VBA Word - dynamische Textformatierung mittels vba in Bausteinkatalogelementen
Hallo zusammen,
ich arbeite derzeit an einem Skript, das beim öffnen des Dokuments alle ContentControls sucht und diese farblich markiert. Selektiert der Nutzer nun ein CC, dann wird die Markierung gelöscht. Soweit so gut.
Nun habe ich auch Baustein-Katalog Elemente, wo der Benutzer dann einen Schnellbaustein zu seinem Dokument hinzufügen kann. Diese Schnellbausteine haben aber auch ContentControl-Elemente.
Wie kann ich diese nun auch noch farblich markieren, wenn der Benutzer eins eingefügt hat?
Anbei mal das Skript soweit:
Ist dies überhaupt in Word möglich oder muss ich die Formatierung, also das highlighten der CCs im Schnellbaustein manuell vornehmen und der Benutzer muss dann die Formatierung wieder manuell "löschen"?
Vielen Dank im Voraus
ich arbeite derzeit an einem Skript, das beim öffnen des Dokuments alle ContentControls sucht und diese farblich markiert. Selektiert der Nutzer nun ein CC, dann wird die Markierung gelöscht. Soweit so gut.
Nun habe ich auch Baustein-Katalog Elemente, wo der Benutzer dann einen Schnellbaustein zu seinem Dokument hinzufügen kann. Diese Schnellbausteine haben aber auch ContentControl-Elemente.
Wie kann ich diese nun auch noch farblich markieren, wenn der Benutzer eins eingefügt hat?
Anbei mal das Skript soweit:
Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
ContentControl.Range.Shading.BackgroundPatternColorIndex = wdNoHighlight
End Sub
Private Sub Document_Open()
'DoEvents
Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
If cc.Type = wdContentControlDropdownList Or cc.Type = wdContentControlBuildingBlockGallery Or cc.Type = wdContentControlDate Or cc.Type = wdContentControlText Then
cc.Range.Select
Selection.Range.Shading.BackgroundPatternColorIndex = wdYellow
Else
cc.Range.Select
Selection.Range.Shading.BackgroundPatternColorIndex = wdNoHighlight
End If
Next
Selection.HomeKey wdStory
End Sub
Ist dies überhaupt in Word möglich oder muss ich die Formatierung, also das highlighten der CCs im Schnellbaustein manuell vornehmen und der Benutzer muss dann die Formatierung wieder manuell "löschen"?
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 568409
Url: https://administrator.de/forum/vba-word-dynamische-textformatierung-mittels-vba-in-bausteinkatalogelementen-568409.html
Ausgedruckt am: 22.04.2025 um 20:04 Uhr
5 Kommentare
Neuester Kommentar

Einfach den Range der den Baustein einfügt erneut im entsprechenden Event auf ContentControls prüfen und markieren
Du kannst das ganze natürlich so weiter treiben bis der Arzt kommt in dem FAll würde ich das das ganze dann in eine rekursive Funktion packen wenn du in den Bausteinen noch weitere Verschachtelungen berücksichtigen willst.
Private Sub Document_BuildingBlockInsert(ByVal Range As Range, ByVal Name As String, ByVal Category As String, ByVal BlockType As String, ByVal Template As String)
Dim cc As ContentControl
For Each cc In Range.ContentControls
HiglightContentControl cc
Next
End Sub
Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
ContentControl.Range.Shading.BackgroundPatternColorIndex = wdNoHighlight
End Sub
Private Sub Document_Open()
Dim cc As ContentControl
For Each cc In ThisDocument.ContentControls
HiglightContentControl cc
Next
End Sub
Sub HiglightContentControl(ByVal cc As ContentControl)
If cc.Type = wdContentControlDropdownList Or cc.Type = wdContentControlBuildingBlockGallery Or cc.Type = wdContentControlDate Or cc.Type = wdContentControlText Then
cc.Range.Shading.BackgroundPatternColorIndex = wdYellow
Else
cc.Range.Shading.BackgroundPatternColorIndex = wdNoHighlight
End If
End Sub

Zitat von @Pat.bat:
@143728
vielen Dank, das sieht sehr gut aus.
ich musste nur das ThisDocument zu ActiveDocument ändern, da er im Dokument sonst nicht alles markiert hat, warum auch immer.
Nicht "warum auch immer" die Unterschiede zwischen ThisDocument und ActiveDocument sind dokumentiert, gerade wenn du mit Templates arbeitest kommt das zum tragen! Denn "ThisDocument" verweist wenn es eine Vorlage ist, auf die Vorlage selbst nicht das davon erzeugte neue Dokument.@143728
vielen Dank, das sieht sehr gut aus.
ich musste nur das ThisDocument zu ActiveDocument ändern, da er im Dokument sonst nicht alles markiert hat, warum auch immer.
Und wenn ich den Schnellbaustein hinzufüge, dann gibt es in meinem Beispiel 3 CCs, davon wird aber nur das 3. markiert. Dabei handelt es sich um 2x Type Text und das 3. um den Type Datum.
Klappt hier einwandfrei.Noch etwas zum Aufbau der Dokumente. Der User arbeitet mit einem docx Dokument, dieses ist mit einer Dokumentenvorlage (dotm) auf einem Netzwerkpfad verknüpft. Und in diesem dotm sind die Schnellbausteine und das VBA hinterlegt.
Dann ist klar das du mit ActiveDocument arbeiten musst s. Hinweis oben.Bei Verwendung von Vorlagen muss dann auch das Document.New Ereignis statt des Open Ereignisses benutzt werden weil der Default beim Doppelklick auf eine Vorlage die Erzeugung eines neuen Dokuments aus dieser Vorlage ist nicht das Öffnen der Vorlage selbst.

Zitat von @Pat.bat:
@143728
ich verstehe nicht warum er in dem hinzugefügten Schnellbaustein, das letzte CC markiert und die ersten beiden nicht. D.h. er looped ja über alle 3, aber markiert nur das letzte, was ein Datum CC ist. Die Text-CCs mag er nicht.
Debugger nehmen und Variablen prüfen, vor allem ob die Type Werte mit deiner IF übereinstimmen. Klappt hier problemlos, muss also ein Problem bei deinen Bausteinen sein, wir haben ja dein Dokument nicht vorliegen.@143728
ich verstehe nicht warum er in dem hinzugefügten Schnellbaustein, das letzte CC markiert und die ersten beiden nicht. D.h. er looped ja über alle 3, aber markiert nur das letzte, was ein Datum CC ist. Die Text-CCs mag er nicht.