Word VBA - Code ausführen, wenn sich ein Wert ändert
Hallo zusammen,
ich habe eine kleine Frage zu Word und VBA.
Eigentlich wahrscheinlich ganz einfach, nur leider finde ich nicht das was ich suche bei Google....
Ich habe ein Iinhaltssteuerlement (Dropdown Liste) mit X Einträgen. Wenn ein Wert aus dieser Liste ausgesucht wird, soll VBA Code ausgeführt werden. Wie geht das?
Interessen halber: geht das auch mit, wenn sich der Inhalt Textfelds (auch Inhaltssteuerlement) ändert?
Gibt es quasi etwas, was ein Feld auf Änderung überwacht und wenn eine Änderung stattfindet, das dann VB Code ausgeführt wird?
ich habe eine kleine Frage zu Word und VBA.
Eigentlich wahrscheinlich ganz einfach, nur leider finde ich nicht das was ich suche bei Google....
Ich habe ein Iinhaltssteuerlement (Dropdown Liste) mit X Einträgen. Wenn ein Wert aus dieser Liste ausgesucht wird, soll VBA Code ausgeführt werden. Wie geht das?
Interessen halber: geht das auch mit, wenn sich der Inhalt Textfelds (auch Inhaltssteuerlement) ändert?
Gibt es quasi etwas, was ein Feld auf Änderung überwacht und wenn eine Änderung stattfindet, das dann VB Code ausgeführt wird?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 378739
Url: https://administrator.de/forum/word-vba-code-ausfuehren-wenn-sich-ein-wert-aendert-378739.html
Ausgedruckt am: 14.04.2025 um 16:04 Uhr
1 Kommentar
Ja die gibt es auch wenn diese nicht so umfangreich ausfallen wie bei den alten Formularsteuerelementen, folgende Events stehen dir für die Inhaltsteuerlemente (in VBA auch "ContentControls" genannt) zur Verfügung (Code-Abschnitt "ThisDocument"):
Anders als der Name des Events Document_ContentControlBeforeContentUpdate verlauten lässt feuert das Event nicht beim Ändern eines Wertes, sondern nur beim Ändern dessen Datenquelle welche aus einer XML-Datei bestehen kann.
Sinnvoll wäre es hier also mit den OnEnter und OnExit zu hantieren. Darin kannst du dann beispielsweise den Titel des betreffenden Feldes abfragen und somit feststellen welches der ContentControls gerade angesprochen wird.
Bspw.
Ob sich dann was im Feld geändert hat musst du den Inhalt entsprechend der EIgenschaften des ContentControls prüfen, z.B indem du den aktuellen Wert in einer globalen Variable zischenspeicherst und dann den Wert im Event damit vergleichst.
DropDown-Felder haben auch bspw. diese Eigenschaft um alle Einträge in der Liste abzufragen:
Die kannst du auch mit einer Schleife durchlaufen wenn das nötig sein sollte.
Grüße Uwe
Private Sub Document_ContentControlAfterAdd(ByVal NewContentControl As ContentControl, ByVal InUndoRedo As Boolean)
End Sub
Private Sub Document_ContentControlBeforeContentUpdate(ByVal ContentControl As ContentControl, Content As String)
End Sub
Private Sub Document_ContentControlBeforeDelete(ByVal OldContentControl As ContentControl, ByVal InUndoRedo As Boolean)
End Sub
Private Sub Document_ContentControlBeforeStoreUpdate(ByVal ContentControl As ContentControl, Content As String)
End Sub
Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
End Sub
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
End Sub
Sinnvoll wäre es hier also mit den OnEnter und OnExit zu hantieren. Darin kannst du dann beispielsweise den Titel des betreffenden Feldes abfragen und somit feststellen welches der ContentControls gerade angesprochen wird.
Bspw.
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
if ContentControl.Title = "fldDescription" then
msgbox "Wert des Feldes mit dem Titel 'fldDescription' : " & ContentControl.Range.Text
End if
End Sub
DropDown-Felder haben auch bspw. diese Eigenschaft um alle Einträge in der Liste abzufragen:
ContentControl.DropdownListEntries
Grüße Uwe