Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro Probleme beim ausführen

Makro Probleme beim ausführen
12.02.2021 15:42:25
Ralf
Hallo zusammen,
vorab, ich weiß wir sind hier im Excel Forum nur niemand kann mir bisher helfen und Makro in Excel oder Word sind doch bestimmt fast identisch, daher meine riesen Bitte um Hilfe, denn ich habe 4 Dokumente jeweils 430 Ausdrucke, bitte nicht manuell.
Mein Problem bezieht sich auf eine Makro, die ein Dokument in einzelne pdf-Doku speichern soll.
Ich habe 4 verschiedene Dokumente, eine Makro und diese nur kopiert und den Speichernamen verändert.
Die kopierte Makro aus dem Netz war so geschrieben, das ein Ordner auf dem Desktop angelegt wird und dort alles abgelegt werden soll. Dies wollte ich nicht und habe den Speicherort verändert.
Nun führe ich die Marko aus und ich werde trotzdem gefragt, wo gespeichert werden soll. Wie kann ich das abstellen?
Dann werden 6 Dokumente abgespeichert als pdf, dann bekomme ich die Fehlermeldung: Der ausgewählte Speicherort ist ungültig. (Modul 3)
Beim Modul 1 wird der Ordner angelegt, nichts wird gespeichert, der Ordner beleibt leer und die Fehlermeldung lautet. Unbekannter Fehler 5941.
Recherche im Netz hat ergeben, das es wohl Unterschiede gibt bei der Word Version, ich benutze Office 365.
Bitte helft mir, vielen Dank, Ihr spart mir Stunden..
Lieben Gruß und Danke vorab.
Ralf B.
(Modul 3)
Sub Gestattungsvertrag_im_PDF_Format_speichern()
' set variables
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String
' catch any errors
On Error GoTo ErrorHandling
' determine path
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "C:\Desktop\", 0, 16)
If BrowseDir = "C:\Desktop\" Then
Path = CreateObject("WScript.Shell").SpecialFolders("C:\Desktop\")
Else
Path = BrowseDir.items().Item().Path
End If
If Path = "" Then GoTo ErrorHandling
Path = Path & "\Gestattungsvertrag-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
MkDir Path
On Error GoTo ErrorHandling
' hide application for better performance
MsgBox "Serienbriefe werden exportiert. Dieser Vorganag kann einige Minuten dauern -  _
Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation
Application.Visible = False
' create bulkletter and export as pdf
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("VorNachname_GV").Value & ".pdf"
End With
.Execute Pause:=False
If .DataSource.DataFields("VorNachname_GV").Value > "" Then
ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False
If .DataSource.ActiveRecord  0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.",  _
vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If
End Sub
Modul 1
Sub Erstes_Anschreiben_im_PDF_Format_speichern()
' set variables
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String
' catch any errors
On Error GoTo ErrorHandling
' determine path
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "C:\Users\Ralf.Bredenbeck\Documents\1_Druck\",  _
0, 16)
If BrowseDir = "C:\Users\Ralf.Bredenbeck\Documents\" Then
Path = CreateObject("WScript.Shell").SpecialFolders("C:\Users\Ralf.Bredenbeck\Documents\ _
1_Druck\")
Else
Path = BrowseDir.items().Item().Path
End If
If Path = "" Then GoTo ErrorHandling
Path = Path & "\Erstes Anschreiben-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
MkDir Path
On Error GoTo ErrorHandling
' hide application for better performance
MsgBox "Serienbriefe werden exportiert. Dieser Vorganag kann einige Minuten dauern -  _
Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation
Application.Visible = False
' create bulkletter and export as pdf
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("VorNachname_1.AS").Value & ".pdf"
End With
.Execute Pause:=False
If .DataSource.DataFields("VorNachname_1.AS").Value > "" Then
ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False
If .DataSource.ActiveRecord  0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.",  _
vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Probleme beim ausführen
12.02.2021 16:34:57
Yal
Hallo Ralf,
Helfen ja, berufliche Tätigkeit für anderen kostenlos erledigen, na ja...
Gehe oben recht auf "Auftragsprogrammierung" oder schaue in der Profilliste, wer Programmieraufträge entgegen nimmt: https://www.herber.de/cgi-bin/profil_d.pl?value=0
Alternativ: Du setzst dich mit dem Code auseinander, lässt in Schritt-Modus laufen und schaut dabei im Lokal-Fenster (Anischt, Lokal-Fenster), was passiert und leitet ab, wo was geändert werden soll.
Wenn gezielt an einer Stelle Verständnis- oder Hilfsbedarf entsteht, hier fragen. Dann wird es Dir (gezielt) beantwortet.
Ein Tipp: es wird an zu viele verschiedene Stellen einen Pfad angesprochen.
VG
Yal
Anzeige
AW: Makro Probleme beim ausführen
12.02.2021 17:23:18
Ralf
Hallo Yal,
danke für die Antwort, ich habe nun ein anderes Makro gefunden, dies funktioniert super, nur es speichert alles in docx,
Diese Zeile soll von ActiveDocument.SaveAs FileName:=Dateiname 'Speichern unter Dateiname
in ActiveDocument.ExportAsFixedFormat
getauscht werden.
Dies funktioniert nicht und es wird gelb unterlegt und ich bekomme keine genaue Fehlermeldung.
Was muss ich tun?
Danke vorab
LG
Sub Test()
' Serienbrief in einzelnen Word Dokumenten speichern
Dim Dateiname As String
Dim LetzterRec As Long
Application.ScreenUpdating = False
Application.Visible = False
Const path As String = "C:\OrdnerZumSpeichern\"          'Pfad anpassen
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
LetzterRec = Word.ActiveDocument.MailMerge.DataSource.ActiveRecord
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = wdFirstRecord
Do
If .DataSource.ActiveRecord > 0 Then
If .DataSource.DataFields("VorNachname").Value  "0" Then
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
Dateiname = path & .DataFields("VorNachname").Value & ".docx"
End With
.Execute Pause:=False
ActiveDocument.SaveAs FileName:=Dateiname           'Speichern unter  _
Dateiname
ActiveDocument.Close False
End If
End If
If .DataSource.ActiveRecord 

Anzeige
AW: Makro Probleme beim ausführen
12.02.2021 17:54:04
Yal
Hallo Ralf,
spitze! Du hast es richtig entdeckt, ActiveDocument.SaveAs muss wie folgt aussehen (es hat nur den Wert für PDF-Format geehlt):
'Speichern unter Dateiname
ActiveDocument.ExportAsFixedFormat OutputFileName:=Dateiname, ExportFormart:= _
wdExportFormatPDF
Die Parameter für ExportAsFixedFormat können auch ohne "Qualifier" übergeben werden, aber dann auf die Reihenfolge achten:
'Speichern unter Dateiname
ActiveDocument.ExportAsFixedFormat Dateiname, wdExportFormatPDF

Viel Erfolg
Yal
Anzeige
AW: Makro Probleme beim ausführen
12.02.2021 18:11:36
Ralf
Hi Yal,
ich habe deine 1.Lösung kopiert und eingefügt.
Nun wird bei der Ausführung ExportFormart:= blau unterlegt und die Fehlermeldung lautet:
Fehler beim Kompilieren: Benanntes Argument nicht gefunden.
Was bedeutet das und was kann ich machen?
LG
AW: Makro Probleme beim ausführen
12.02.2021 18:45:38
AlterDresdner
Hallo Ralf,
es muss heissen ExportFormat:= ohne r
AW: Makro Probleme beim ausführen
12.02.2021 19:03:55
Ralf
Hallo Alter Dresdner,
danke hatte ich übersehen, jetzt gibt er mir einen Laufzeitfehler: 5852 bei folgender Zeile raus:
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
ich werde das glaub ich nie lernen und verstehen!
Gruß
Ralf
Anzeige
AW: Makro Probleme beim ausführen
12.02.2021 23:39:40
Yal
Hallo Ralf,
nicht entmutigen lassen. Alles strukturiert rangehen.
"5852: Das angeforderte Objekt ist nicht verfügbar"
Einerseits hast Du
ActiveDocument.MailMerge.DataSource.ActiveRecord
ActiveDocument: ist klar.
MailMerge: die Funktion, die abgerufen wird
DataSource: die Datenquelle für die Durchführung der Funktion
ActiveRecord: die Quelle ist in Datensätze unterteilt (Record), also jede einzelne Zeile einer Liste). Dann gibt es ein Zeiger, dass sagt, welcher Zeile gerade verwendet wird: ActiveRecord.
auf die andere Seite
wdLastRecord: es handelt sich um eine benannte Konstante (leichter zu lesen als "10" oder "404"). Viele Zustände werden mit Werte zurückgemeldet. Diese Werte bekommen ein feste Name. Hier ist der Wert, die ein Zeiger auf einer Datenquelle hat, wenn es auf die letzte Element der Liste zeigt.
So jetzt hast das gesamte Befehl verstanden. Nun die Fehlermeldung:
"5852: Das angeforderte Objekt ist nicht verfügbar"
Diese Fehlermeldung hat auch einen Wert 5852 aber keine Name. Dafür eine Beschreibung (die ich mit "word fehler 5852" gegoogelt habe).
Also auf wdLastRecord bezieht es sich nicht, da es nur eine konstante Wert ist. Warum sollte 10 oder 400 nicht verfügbar sein?
Bezieht es sich auf ActiveDocument? ActiveDocument ist die Word-Datei, die gerade bearbeitet wird. Sie ist da. Also verfügbar.
MailMerge? Es ist eine Grundfunktion von Word, die immer da ist. Zugegeben: man muss diese in das ActiveDocument platziert haben, sodass sie erreichbar ist. In dem Fall: ist drin.
DataSource: Könnte das verfügbar oder nicht verfügbar sein? Legen wir auf die Seite
ActiveRecord: Wenn eine DataSource da ist, und es hat mindestens eine Zeile, dann gibt es (mehr oder weniger, aber ich spare Dir die Details) eine Zeile, worauf man zielen kann.
Also, wo kann es klemmen?
Ich tippe auf DataSource. Dann ist die Frage: wie wird Word mitgeteilt, welche DataSource es verwenden soll?
VG
Yal
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge