2017-06-09 1 views
0

Ich habe einen VBA-Code in Word-Dokument. Der Code wird jedes Mal ausgeführt, wenn der Benutzer auf Speichern klickt. Der Code funktioniert einwandfrei, wenn der Dokumenttyp Word Macro-Enabled Document ist, aber wenn ich das Dokument in Word Macro-Enabled Vorlage umwandeln funktioniert der Code nicht mehr, irgendwelche Ratschläge, wie Sie das beheben können? Hinweis: Code ist in dem Dokument selbstAuto Run Makro beim Speichern funktioniert nicht Word VBA

Private WithEvents App As Word.Application 
Private Sub Document_Open() 
Set App = Word.Application 
End Sub 
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) 
do stuff.... 

Antwort

1

Ihre Klasse initialisiert wird, wenn das docm Dokument geöffnet wird. Nach der Konvertierung in dotm ist es immer noch die Eröffnung des Dokuments, das das On_Open-Ereignis auslöst, was bedeutet, dass Sie die Vorlage öffnen müssen. Natürlich ist der ganze Sinn einer Vorlage, dass Sie sie nicht öffnen wollen. Daher wird die App-Klasse niemals initialisiert und daher werden die App-Ereignisse nie ausgelöst. Möglicherweise möchten Sie die App-Klasse für das Ereignis New initialisieren.

Nachdem ich dies gesagt habe, vermute ich, dass Ihr Code noch funktioniert, wie es sollte, aber Sie haben möglicherweise den falschen Weg getestet. Wenn Sie ein neues Dokument erstellen, wird die App-Klasse nicht initialisiert, und beim Speichern des neuen Dokuments passiert nichts. Nachdem Sie jedoch das neue Dokument geschlossen und es erneut geöffnet haben, wird das Ereignis On_Open ausgelöst und danach werden die App-Ereignisse ausgelöst. Wie ich bereits sagte, wenn Sie die App-Klasse sowohl On_New und On_Open initialisieren, sollte es tun, was Sie wünschen, wenn Sie es wünschen.

+0

danke für Ihre Antwort; es funktionierte, wenn ich das Dokument schließe und wieder öffne. Aber wenn ich das Dokument zum ersten Mal aus der Vorlage erstellt habe, hat es nicht funktioniert. nicht der zusätzlich hinzugefügte Code ist Privat Document_Close() Set App = Word.Application End Sub – 1990Mustafa

+0

Was ist der Document_Close-Prozess zu tun? Ihr Problem besteht darin, dass alle Prozeduren in der App-Klasse nicht funktionieren, da die Klasse nicht initialisiert wird. Es ist dieser Code, der den Job erledigt: - Private Sub Document_Open() Set App = Word.Application End Sub'. Es muss im 'ThisDocument' Modul sein. Ich habe vorgeschlagen, ein anderes, ähnliches Verfahren an der gleichen Stelle hinzuzufügen: - 'Private Sub Document_New() Setze App = Word.Application End Sub'. 'Öffentliche WithEvents-App als Word.Application' muss im Klassenmodul sein (vielleicht' WdApp'), muss aber öffentlich sein, nicht privat. App-Ereignis-Procs befinden sich ebenfalls im Klassenmodul. – Variatus