Der Inhalt einer Textbox auf einer Dialogbox soll mit AutoClose gespeichert werden und beim nächsten Öffnen des Dokuments als Value in der Textbox erscheinen. Das sollte doch eigentlich über eine Dokument-Variable funktionieren, tut es aber - bei mir -nicht. Weiß jemand Hilfe und kann die kleine Prozedur entwickeln? Dank schon jetzt.
Gruß
Wilhelm
Hallo Wilhelm
Was funktioniert dann mit Dokumentenvariablen nicht, mal abgesehen davon, dass der Umgang mit den Dingern etwas mühsam ist, weil man einerseits nicht vernünftig abfragen kann, ob die DocVar mit dem Namen xyz bereits existiert und „leere“ DocVars nicht möglich sind, da diese von Word eliminiert werden???
Wieso möchten Sie diese Sache am Document_Close - Ereignis anbinden? - Ist es nicht naheliegender und einfacher, die beiden Ereignisse UserForm_Activate und UserForm_Terminate zu bemühen?
Übrigens Sie könnten diese Werte auch in einer Art INI-Dazei versorgen. Dann könnten Sie auf Dokumentenvariablen vrzichten und die praktische ProfileString-Methode von Word benutzen.
Aber einverstanden: es ist je nach Aufgabenstellung nicht genau das selbe, ob diese Werte im Dokument selbst (vielleicht besser in der Dokumentenvorlage - wie Sie wollen) oder in einer INI-Datei gespeichert sind.
Im ersten Fall wandern diese Werte beim portieren des Word-Dokumentes bzw. Vorlage automatisch mit, im zweiten Fall ist das nicht so.
Hier also dann die Lösung mit DocVars.
Fügen Sie eine neue UserForm ein. Diese UserForm soll eine beliebige Anzahl von Textboxen enthalten. Kopieren Sie den gesamten Code in diese UserForm und testen Sie die Sache:
Gruss
S. Widmer
---------- Bisskante -----------
Private var As Variable
Private Sub UserForm_Activate()
For Each x In Me.Controls
If TypeOf x Is TextBox Then
If CheckExistence(x.Name) Then x.Text = ActiveDocument.Variables(x.Name).Value
End If
Next x
End Sub
Private Sub UserForm_Terminate()
For Each x In Me.Controls
If TypeOf x Is TextBox Then WertSichern x.Name, x.Value
Next x
ActiveDocument.Save
End Sub
Private Function WertSichern(Name As String, Wert As String)
Flag = CheckExistence(Name)
If Flag = True And Wert = „“ Then
var.Delete
Exit Function
End If
If Wert = „“ Then Exit Function
If Flag = True Then
var.Value = Wert
Else
ActiveDocument.Variables.Add Name:=Name, Value:=Wert
End If
End Function
Private Function CheckExistence(Name As String) As Boolean
CheckExistence = False
For Each var In ActiveDocument.Variables
If var.Name = Name Then
CheckExistence = True
Exit For
End If
Next
End Function
Hallo Silvia,
mit Hilfe eines anderen Gesprächspartners aus dem Fragen-Forum habe ich Ihr kleines Programm zum Laufen bringen können. Herzlichen Dank für die Arbeit, die Sie sich für mich gemacht haben.
Die Eleganz, mit der die kleine Prozedur geschrieben ist, sehe ich als Anfänger zwar, mit meinem augeblicklichen Kenntnisstand hätte ich sie aber nie und nimmer zustande gebracht (und brauchte sie doch so dringen!).
Sie haben also in mir einen weiteren Fan, der sich glücklich schätzen würde, gelegentlich Ihren Rat und Ihre Hilfe wieder in Anspruch nehmen zu dürfen.
Gruß
Wilhelm
Hallo Wilhelm
Ich freue mich auch, dass diese Sache nun läuft.
Gruss
Silvia Widmer