PDA

Vollständige Version anzeigen : Speicherabfrage beim Schließen


AndyM74
19.08.2009, 10:12
Hallo Allerseits,

ich habe eine Dokumentvorlage, auf der mehrere andere basieren und auch die zentralen Funktionen nutzen. Das heißt zu einigen Dokumentvorlagen die ich erstelle, wird diese als Addin dazugeladen. Das Problem ist, dass Word immer beim Speichern und Schließen eines Dokuments, welches mit einer dieser Vorlagen erstellt wurde, fragt, ob die Änderungen auch in der Vorlage "Basis.dot" (dieses Addin) gespeichert werden sollen. Dies sollen Sie nicht, aber die Tricks, die ich bei anderen Vorlagen verwendet habe, die kein Addin haben (z. B. ein Klassenmodul "Document_Before_Close", welches activedocument.attachedtemplate.saved=true ausführt) klappen hier nicht.

Bin recht ratlos. Hat jemand eine Idee, wie man diesem Addin "vorgaukelt" es ist schon gespeichert, damit es nicht fragt?

Danke.

Grüße,

Andy

PapaSchlumpf
19.08.2009, 10:38
Hi,

activedocument.attachedtemplate.saved=true
greift nur für die basierende Dokumentvorlage, nicht für das AddIn.

Verwende im Klassenmodul folgenden Code
ThisDocument.Saved=True
damit sollte auf ThisDocument=AddIn zugegriffen werden.

PS

AndyM74
19.08.2009, 10:46
Hallo,

habe direkt in der Vorlage, die das Addin darstellt im Klassenmodul thisdocument.saved=true angegeben. Leider fragt Word immernoch, ob es die Basis.dot (Addin) speichern soll.

Auch unter Microsoft Word Objekte "ThisDocument" habe ich das schon versucht. Weiß echt keinen Rat mehr.

Grüße,

Andy

PapaSchlumpf
19.08.2009, 10:46
Hast Du das Klassenmodul auch in einem normalen Modul initialisiert?

PS

AndyM74
19.08.2009, 10:51
Habe im autonew folgenden Verweis gesetzt:

Dim X As New cls_EventHandle 'Verweis auf Klassenmodul
Set X.wdapp = Word.Application

Habe auch bisher immer so getestet, dass ich ein neues Doc auf Basis der Vorlage erstellt habe und dann geschlossen habe. Wenn autonew funktioniert wollte ich noch autoopen ergänzen oder gibt es einen besseren Weg?

Hier als Ergänzung noch der Code der Klassenmodule:
Option Explicit
Public WithEvents wdapp As Word.Application

Private Sub wdapp_DocumentBeforePrint _
(ByVal Doc As Document, Cancel As Boolean)

ThisDocument.Saved = True
End Sub

Private Sub wdapp_DocumentBeforeClose _
(ByVal Doc As Document, Cancel As Boolean)
ThisDocument.Saved = True
End Sub

Private Sub wdapp_DocumentBeforeSave _
(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)

ThisDocument.Saved = True
End Sub

Private Sub wdapp_DocumentChange()

ThisDocument.Saved = True
End Sub

Private Sub wdapp_DocumentOpen(ByVal Doc As Document)

ThisDocument.Saved = True
End Sub

Private Sub wdapp_NewDocument(ByVal Doc As Document)

ThisDocument.Saved = True
End Sub


Danke.

Grüße,
Andy

PapaSchlumpf
19.08.2009, 10:56
Hi
bei AddIns funktioniert eigentlich nur AutoExec.
Bei der basierenden Dokumentvorlage funktionieren auch AutoNew und AutoOpen

PS

AndyM74
19.08.2009, 11:56
Hallo,
habe ein Modul Autoexec in der Basis.dot angelegt. Das funktioniert aber nicht. Wie müsste dies ins Klassenmodul eingebaut werden. Ich habe dort noch kein Autoexec verwendet.

Grüße,

Andy

PapaSchlumpf
19.08.2009, 11:57
was bitte heisst "funktioniert aber nicht"?
Wird das Klassenmodul überhaupt angesprungen? (Stopmarke setzen)
Fehlermeldung?

PS

AndyM74
19.08.2009, 12:24
Hallo,

habe ein Sub autoexec angelegt und folgendes Klassenmodul:

Private Sub wdapp_autoexec(ByVal Doc As Document)
MsgBox "test3"
ThisDocument.Saved = True
End Sub

Ins Klassenmodul geht es weder beeim Start noch beim Beenden bzw. schliessen des doc.

Nur das Autoexec wird angesprungen, aber trotzdem die Speicherabfrage.

Fehlermeldung gibt es keine.

Grüße,
Andy

PapaSchlumpf
19.08.2009, 12:31
Also meine Aufrufe im Modul lauten immer:
Dim X As New cls_EventHandle 'Verweis auf Klassenmodul
Sub autoexec()
Set X.wdapp = Word.Application
End Sub

und damit klappt es auch problemlos.

PS

AndyM74
19.08.2009, 13:08
Super. Danke. Das funktioniert. Dachte erst, dass dann auch die Änderungen im Doc nicht mehr abgefragt werden , aber sogar das funktioniert.

Vielen Dank nochmals.

Grüße,

Andy