schneerunzel
Goto Top

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?

Content-Key: 378739

Url: https://administrator.de/contentid/378739

Printed on: April 25, 2024 at 17:04 o'clock

Member: colinardo
Solution colinardo Jun 30, 2018 updated at 18:10:01 (UTC)
Goto Top
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"):
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
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.
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
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:
ContentControl.DropdownListEntries
Die kannst du auch mit einer Schleife durchlaufen wenn das nötig sein sollte.

Grüße Uwe