VBA-Fehler 1004 beim Export nach PDF

669
gist102

Hallo Leute, ich brauche wirklich Hilfe mit dem untenstehenden Code. Ich verwende die folgenden Codes, um Daten in Excel zu importieren:

Option Explicit  Private Sub CommandButton1_Click() Const FULL_PATH = "C:\Users\Documents\test\customerinformation.txt" Dim fId As String, txt As String, txtLen As Long, d As Object, dc As Long  fId = FreeFile Open FULL_PATH For Input As fId txt = Input(LOF(fId), fId) 'Read entire file (not line-by-line) Close fId txtLen = Len(txt) Set d = CreateObject("Scripting.Dictionary") d("Name") = "C11" 'Same as: d.Add Key:="Name", Item:="C11" d("Phone") = "H13" d("Address1") = "C15" d("Email") = "C13" d("Postcode") = "H16" d("SR") = "C10" d("MTM") = "H14" d("Serial") = "H15" d("Problem") = "C17" d("Action") = "C18" d("Dated") = "H10" dc = d.Count  Dim i As Long, k As String, sz As Long, found As Long With ThisWorkbook.Worksheets("Sheet1") '<--- Update sheet name For i = 0 To dc - 1 'd.Keys()(i) is a 0-based array k = d.Keys()(i) 'Name, Phone, etc found = InStr(txt, k) + Len(k) + 1 'Find the (first) key in file If found > 0 Then 'Determine item length by finding the next key If i < dc - 1 Then sz = InStr(txt, d.Keys()(i + 1)) Else sz =  txtLen + 2 .Range(d(k)).Value2 = Trim$(Mid$(txt, found, sz - found - 1)) End If Next End With End Sub 

================================================== ===============

Das Importieren des Folgenden funktioniert gut

Name Name1 Phone Phone1 Address1 Address11 Email Email1 Postcode Postcode1 SR SR1 MTM MTM1 Serial Serial1 Problem Problem1 Action Action1 Dated Dated1 

===============================================

Mein Problem ist das Exportieren des ausgewählten Bereichs nach PDF

Private Sub CommandButton2_Click()  Dim FilePath As String Dim FileName As String Dim MyDate As String Dim report As String Dim Name As String  FilePath = "C:\Users\Documents\test\" MyDate = Format(Date, " - MM-DD-YYYY") report = " - Quatation" Name = Worksheets("Sheet1").Range("C10")  Sheets("Sheet1").Range("A1:I60").ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=FilePath & Name & MyDate & report   End Sub 

================================================== ========

oder

Private Sub report()  Dim myFile As String, lastRow As Long myFile = "C:\Users\heal1\OneDrive\Documents\test\" &  Sheets("Sheet1").Range("C11") & "_" & Sheets("Sheet1").Range("C17") &  Format(Now(), "yyyy-mm-dd") & ".pdf" lastRow = Sheets("Sheet3").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1 'Transfer data to sheet3 Sheets("Sheet3").Cells(lastRow, 1) = Sheets("Sheet1").Range("C11") Sheets("Sheet3").Cells(lastRow, 2) = Sheets("Sheet1").Range("C17") Sheets("Sheet3").Cells(lastRow, 3) = Sheets("sheet1").Range("I28") Sheets("Sheet3").Cells(lastRow, 4) = Now Sheets("Sheet3").Hyperlinks.Add Anchor:=Sheets("Sheet3").Cells(lastRow, 5),  Address:=myFile, TextToDisplay:=myFile 'Create invoice in PDF format Sheets("sheet1").ExportAsFixedFormat Type:=xlTypePDF, FileName:=myFile Application.DisplayAlerts = False 'create invoice in XLSX format ActiveWorkbook.SaveAs "C:\Users\Documents\test\" &  Sheets("Sheet1").Range("C11") & "_" & Sheets("Sheet1").Range("C17") & "_" &  Format(Now(), "yyyy-mm-dd") & ".xlsx", FileFormat:=51 'ActiveWorkbook.Close Application.DisplayAlerts = True   End Sub 

================================================== ===============
Jedes Mal, wenn ich versuche, nach dem Importieren von Daten zu exportieren, erhalte ich die Fehlermeldung 1004

VBA-Fehler 1004 beim Export nach PDF

================================================== ==========

Ohne importierte Daten kann ich mit dem Code exportieren. Nach dem Import von Daten kann ich jedoch nicht noch einmal exportieren.

Ich bekomme ständig " anwendungsdefinierte oder objektdefinierte Fehler" und Laufzeitfehler " 1004" Dokument nicht gespeichert. Das Dokument ist möglicherweise geöffnet oder beim Speichern ist ein Fehler aufgetreten .

Dies ist der erste Code, der beim Debuggen hervorgehoben wird

Sheets("Sheet1").Range("A1:I60").ExportAsFixedFormat Type:=xlTypePDF, _  FileName:=FilePath & Name & MyDate & Report – 

Zweiter Codefehler

Sheets("sheet1").ExportAsFixedFormat Type:=xlTypePDF, FileName:=myFile 

VBA-Fehler 1004 beim Export nach PDF

Finden Sie bitte die folgenden Fehlermeldungen, die aus dem Unterbericht und der Schaltfläche 2 stammen

Blatt1

Unterbericht Unterbericht

Schaltfläche 2 commandButton2

0
Bitte geben Sie die Codezeile an, die den Fehler generiert. Excellll vor 5 Jahren 3
Während ich bezweifle, dass dies Ihr Problem ist, habe ich einen logischen Fehler entdeckt, der möglicherweise Probleme verursachen könnte: `found = InStr (txt, k) + Len (k) + 1 'liefert immer einen Wert> 0 (als solches markiert auf der nächste Zeile). Selbst wenn der Text k nicht gefunden wird (gibt -1 zurück), fügen Sie len (k) und 1 hinzu (vorausgesetzt, k ist nie ""). Wie ich schon sagte, versagt es sowieso nie, könnte es aber. Bill Hileman vor 5 Jahren 0
Ich habe den Code mit der Zeile aktualisiert, die den Fehler auslöst. Bitte unterstützen gist102 vor 5 Jahren 0

1 Antwort auf die Frage

1
paul bica

Beim Speichern der PDFs enthält der Dateiname ungültige Sonderzeichen

Verfahren CleanFileName& CleanUsedRangeentfernen\ / : * ? | < > " Backspace Tab LF CR


Option Explicit  Public Function CleanFileName(ByVal fName As String) As String Dim b() As Byte, specialChars As Variant, i As Long  b = "\/:*?|<>" & Chr(34) & Chr(8) & Chr(9) & Chr(10) & Chr(13)  specialChars = Split(StrConv(b, vbUnicode), Chr(0))  fName = Trim$(fName) 'Trim, then remove \ / : * ? | < > " Backspace Tab LF CR For i = 0 To UBound(specialChars) fName = Replace(fName, specialChars(i), vbNullString) Next CleanFileName = fName End Function 

Public Sub CleanUsedRange(ByRef ur As Range) Dim arr As Variant, r As Long, c As Long  arr = ur.Formula For r = 1 To UBound(arr, 1) For c = 1 To UBound(arr, 2) arr(r, c) = CleanFileName(arr(r, c)) Next Next ur.Formula = arr End Sub 

.

So verwenden Sie die Verfahren in Ihren Subs


Private Sub CommandButton2_Click() Dim ws As Worksheet, fPath As String, fName As String, dt As String  Set ws = ThisWorkbook.Worksheets("Sheet1")  fPath = "C:\Users\Documents\test\" dt = Format(Date, " - MM-DD-YYYY")  CleanUsedRange ws.UsedRange  fName = fPath & ws.Range("C10") & dt & " - Quatation"  ws.Range("A1:I60").ExportAsFixedFormat Type:=xlTypePDF, FileName:=fName End Sub 

Private Sub SaveReport() Const FILE_PATH_1 = "C:\Users\heal1\OneDrive\Documents\test\" Const FILE_PATH_2 = "C:\Users\Documents\test\"  Dim ws1 As Worksheet, ws3 As Worksheet, fPath As String, dt As String  Set ws1 = ThisWorkbook.Worksheets("Sheet1") Set ws3 = ThisWorkbook.Worksheets("Sheet3") dt = Format(Now, "yyyy-mm-dd")  Dim cfn As String, fName As String, lr As Long  CleanUsedRange ws1.UsedRange  lr = ws3.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1  'Transfer data to sheet3 ws3.Cells(lr, 1) = ws1.Cells(11, "C") ws3.Cells(lr, 2) = ws1.Cells(17, "C") ws3.Cells(lr, 3) = ws1.Cells(28, "I") ws3.Cells(lr, 4) = Now 'or dt ws3.Hyperlinks.Add Anchor:=ws3.Cells(lr, 5), Address:=fName, TextToDisplay:=fName  'Create invoice in PDF format cfn = ws1.Range("C11") & "_" & ws1.Range("C17") fName = FILE_PATH_1 & cfn & dt & ".pdf" ws1.ExportAsFixedFormat Type:=xlTypePDF, FileName:=fName  'create invoice in XLSX format Application.DisplayAlerts = False fName = FILE_PATH_2 & cfn & "_" & dt & ".xlsx" ThisWorkbook.SaveAs fName, FileFormat:=51 'ActiveWorkbook.Close Application.DisplayAlerts = True End Sub 

.

Fügen Sie beides CleanFileNameund CleanUsedRangeein generisches Modul hinzu

Zum Beispiel Module1

Code

Kommentare sind nicht für eine erweiterte Diskussion vorgesehen. Dieses Gespräch wurde [zum Chat verschoben] (https://chat.stackexchange.com/rooms/78962/discussion-on-answer-by-paul-bica-vba-error-1004-while-exportingto-pdf) . DavidPostill vor 5 Jahren 1