VBA Word 2k/XP - Dokumentenvariable
Danke zuerst einmal für die ausführliche Antwort.
Die Dokumentenvariable habe ich soweit begriffen und auch ausprobiert.
Ich sehe aber leider nicht, wie ich den Code so anpassen kann, dass es mein Problem löst.
Es geht ja darum, dass ich beim Aufstarten von Word eine Abfrage (Nach einem Unterschied zwischen einem leeren und einem bereits bearbeiteten Dokument) auf das aktuelle Dokument automatisch machen kann.
Den Code, den du geschrieben hast, habe ich mit dem folgenden Code gelöst:
Sub AutoNew()
frmDokuvorlage.Show
End Sub
Das genügt für meine Anwendung völlig aus.
Das Problem liegt beim Aufstarten von Word.
Wenn Word über das Icon (winword.exe) gestartet wird, dann erscheint ein leeres Dokument. Leider nimmt es keinen Bezug auf den Document_New (AutoNew) Befehl. Ich will/muss daher eine Möglichkeit finden, wie ich beim Aufstarten von Word feststellen kann, ob das Dokument leer ist oder ob der User ein Dokument ausgewählt und geöffnet hat, das er bereits bearbeitet hat.
Ich schweife da mal bisschen ab:
Word kann eigentlich über zwei Arten geöffnet werden.
1. Möglichkeit:
In dem das Icon (Die Verknüpfung oder direkt das Winword.exe Symbol angewählt wird) oder in dem der Befehl „winword“ in „Start - Ausführen…“ eingegeben wird.
2. Möglichkeit:
In dem der User auf ein, für den Computer zugängliches, bereits vorhandenes Dokument klickt und somit öffnet.
Word bezieht sich bei einem Dokument immer auf eine Dokumentenvorlage. Normalerweise ist es die „Normal.dot“ - Vorlage, welche aber nicht geöffnet wird.
Mit einer Dokumentenvariable kann ich daher nicht in normal.dot die Abfrage machen, weil es nicht geöffnet ist und ich den Befehl ActiveDocument oder ThisDocument nicht verwenden kann, da noch kein Dokument offen ist. Ausser ich würde das Makro manuell starten, was ich aber wiederum nicht anwenden will.
Mit AutoExec() habe ich das selbe Problem. Mit diesem Befehl führt Word den Code bereits vor dem Öffnen des Dokuments aus. Somit kann eine Abfrage mit Hilfe von ActiveDocument oder sonst einem Befehl, der sich direkt aufs Dokument bezieht, vergessen werden.
Es müsste entweder eine Möglichkeit geben, wie das AutoExec() nach dem Öffnen des Dokuments gestartet/aufgerufen werden kann. (mit Hilfe von vielleicht einer Verzögerung) Also AutoExec() Now + TimeValue „00:00:05“ oder so ähnlich.
Oder es gäbe eine andere Variante zum automatischen Aufruf eines Makros beim Starten von Word (z.B. die Dokumentvariable)
Wenn ich wüsste wo, oder wie Word ein leeres Dokument erstellt, dann könnte man Abfragen ob das zu öffnende Dokument im Pfad X ist. Wenn ja, dann soll er das Formular öffnen, ansonsten nicht.
Besten Dank nochmals Rasta, hat mir leider nicht weitergeholfen oder ich habe bei deinem Code etwas noch nicht ganz verstanden.
Hoffe auf weitere Ideen,
Viele Grüsse,
Christoph
hallo christoph,
eine dokumentenvariable fügst du deinem dokument über
„einfügen“, „feld“, „dokumentautomation“ -docvariable
hinzu.
dazu schreibst du natürlich einen namen zur dok-variable–…
wie start
mit alt+f9 kannst du im dokument zwischen den code- und
normal-ansicht switchen.
die dok-variable kannst du folgendermaßen zurücksetzen(musst
du eh 1mal machen, da die variable keinen wert hat und
dementsprechend ne „fehlermeldung“ wirft):
activedocument.variables(„start“) = „0“
Dim feld As Range
For Each feld In ActiveDocument.StoryRanges 'alle felder
updaten
feld.Fields.Update
While Not (feld.NextStoryRange Is Nothing)
Set feld = feld.NextStoryRange
feld.Fields.Update
Wend
Next
Private Sub Document_New()
On Error Resume Next
If ActiveDocument.Variables(„start“) = „1“ Then
Exit Sub
End If
UserForm1.Show
End Sub
Private Sub Document_Open()
On Error Resume Next
If ActiveDocument.Variables(„start“) = „1“ Then
Exit Sub
End If
userform1.show
End Sub
sollte dein formular ausgeführt worden sein, schreibst du am
ende vom code natürlich noch
'damit dokument beim wiederhotlen start nicht mit code
losläuft
ActiveDocument.Variables(„start“) = 1
so, ich hoffe dir geholfen zu haben
viele grüße
rasta