Speichermakro funktioniert (nicht?!)

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Speichermakro funktioniert (nicht?!)
von: Quellkot
Geschrieben am: 30.09.2015 12:23:15

Hallo ihr Lieben...
Ich brauche mal eure Hilfe. Ich sitze jetzt seit Stunden an einem recht seltsamen Problem:
Ich habe eine sehr sehr lange Prozedur, die auch wunderbar funktioniert. Nur ein Teil macht mir Schwierigkeiten. Dabei sollen die Daten aus Excel in ein Word Dokument exportiert werden.
Der runter gebrochene Quelltext, auf das was interessant ist:


Private Sub Create()
'Variablendeklaration
Dim objWord As Object
'Variablendefinition
Set objWord = CreateObject("Word.Application")
'Trage Daten aus UserForm in Tabelle ein
'...
'Exportiere in Excel Datei
...
'Exportiere in Word
objWord.documents.Open ThisWorkbook.Path & "\Vorlage.docm" 'Öffne die Vorlage
  
'Fülle die Vorlage anhand des dort hinterlegten Makros
objWord.Run "Makros.Import"
objWord.Quit
Set objWord = Nothing
End Sub

'Speichermakro
Sub SaveAsName()
'Auslesen der Nummer
Dim strPath As String, strNummer As String
strNummer = _
Vorlage.SelectContentControlsByTitle("lblNummer").Item(1).Range.Text
strPath = Vorlage.Path & "\DOCX\" & strNummer & ".docx"
ChangeFileOpenDirectory Vorlage.Path & "\DOCX\"
ActiveDocument.SaveAs2 FileName:= _ '
strPath, FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", _
ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False, CompatibilityMode:=15
End Sub
Hinweis: Speichermakro ist zu diesem Zeitpunkt ein aufgenommenes, SaveAs2 ist also an der Stelle kein Syntaxfehler.
Am Ende des Makros Import (in dem Modul "Makros") wird die Prozedur "SaveAsName" aufgerufen.
Jetzt kommt das Problem:
Wenn ich die Vorlage.docm öffne und das Makro Import ausführe, werden die Daten importiert und das Dokument wird unter dem richtigen Namen, unter dem richtigen Pfad abgespeichert.
Wenn ich jetzt den besagten Quelltext aus meiner Prozedur in Excel aufrufe (durchlaufe im Einzelschritt - Debugmodus), dann funktioniert alles Augenscheinlich wunderbar. Die Makros werden in der richtigen Reihenfolge durchlaufen, es kommt zu keiner Fehlermeldung, alles macht was es soll. Auch das Speichermakro wird durchlaufen.
Wenn ich anschließend aber in den Ordner gucke, wurde die Datei nicht erstellt.
(Wenn ich die Makros manuell aus der Vorlage ausführe wird die Datei erstellt!)
Ich habe jetzt schon auf verschiedensten Wegen versucht das Problem zu umgehen. Die meisten eher verzweifelt als effizient.
Ich habe auch schon verschiedenste Lösungsansätze für das Speichermakro versucht, komme aber einfach auf keine gescheite Lösung, vor allem, weil der Quelltext ja richtig zu sein scheint (?!)
Vielleicht hat einer von euch eine Idee woran das liegen könnte?
(Es tut mir übrigens Leid, falls ein solcher Beitrag bereits existiert, aber ich weiß ehrlich gesagt gar nicht wirklich wonach ich da suchen soll...)

Bild

Betrifft: Speichermakro funktioniert (nicht?!)
von: Anton
Geschrieben am: 30.09.2015 15:18:18
Hallo Quellkot,
mal ins Blaue...
Welchen Wert hat die Variable strPath beim Ausführen des Codes?
mfg Anton

Bild

Betrifft: AW: Speichermakro funktioniert (nicht?!)
von: Quellkot
Geschrieben am: 30.09.2015 15:28:32
Hallo Anton,
Danke erstmal für die schnelle Antwort.
strPath ist Variabel in Abhängigkeit von der Nummer des Dokuments und dem Ort in dem das Programm abgelegt ist
Ein Beispiel:
"C:\Users\Quellkot\Documents\VBProjekt\DOCX\002.docx"
In diesem speziellen Fall handelt es sich um ein Netzwerklaufwerk mit ausreichend Speicher, zu dem ich aber vollen Zugriff habe.
Ich habe die Variable im Debugmodus überprüft und der gesamte Pfad (also inklusive Dateiname) sieht korrekt aus.
Ich glaube nicht dass es meinem Chef gefallen würde wenn ich es genaue Laufwerk Namen oder dergleichen nenne...

Bild

Betrifft: AW: Speichermakro funktioniert (nicht?!)
von: Jürgen V.
Geschrieben am: 05.10.2015 16:46:04
Hallo Quellkot,
wenn Makros nicht durchlaufen und im Debug-Modus tadellos funktionieren sind meist Timing-Probleme die Ursache. In Deinem Fall wird vermutlich mit "objWord.Quit" Word schon aus dem Excel-Code heraus geschlossen bevor das Speichern-Makro in Word zum Ende gekommen ist.
Lösungsansätze könnten so aussehen:
- Du lässt das Excel-Makro vor dem Schließen des Word-Objekt eine (feste) Zeit warten
- Du lässt das Excel-Makro prüfen, ob das Word-Makro fertig ist (z. B. "existiert die Word-Datei?")
- Du verlagerst den gesamten Code nach Excel
- Du verlagerst den gesamten Code nach Word
- Du prüfst, ob das gewünschte Ziel nicht ohne oder zumindest mit viel weniger VBA-Code zu erreichen ist (z. B. Verknüpfungen in der Word-Datei auf die Excel-Daten oder eine pfiffige Word-Serienbrief-Lösung)
Ich hoffe, das hilft Dir weiter.
Gruß, Jürgen

 Bild

Beiträge aus den Excel-Beispielen zum Thema "CSV Vergleichen und in Excel übertragen"