2016-04-04 5 views
1

Ich habe ein Makro in MS Word 2013 VBA (nicht Excel), dass der ausgewählte Text der Highlight-Farbe wechselt. Code sieht aus wie dieses:Looping durch die Teile eines nicht zusammenhängende Auswahl in MS * Wort * VBA

If Selection.Range.HighlightColorIndex = WhtColor Then Selection.Range.HighlightColorIndex = wdNoHighlight Else Selection.Range.HighlightColorIndex = WhtColor 

Das für die kontinuierliche/zusammenhängende Auswahl funktioniert gut. Aber wenn ich , sagen wir, 4 nicht zusammenhängende Zeilen in einer Word-Tabelle (sagen wir, Zeilen 5, 12, 15 und 19), markiert das Makro nur die letzte Zeile ausgewählt.

Wie erhalte ich die HighlightColorIndex für alle „Teile“ des unzusammenhängende anzuwenden, oder, wie kann ich eine Schleife durch die verschiedenen „Teile“ des Bereichs und Anwendung der HighlightColorIndex zu jedem Teil?

+0

https://support.microsoft.com/en-us/kb/288424 - weiß nicht, wie up-to-date das ist, obwohl –

+0

Das Problem gelöst hat. Aber die Frage ist nicht wirklich ein Duplikat angesichts dessen, was das eigentliche Ziel des Codes war. Ich habe die obige Frage mit der Lösung aktualisiert, dank der Informationen auf dem von @Tim Williams angebotenen Link. – DRC

+0

Entschuldigung - Ich habe die verlinkte Seite nicht vollständig gelesen, bevor ich sie gepostet habe. Ich habe Ihre Frage erneut geöffnet, also sollten Sie jetzt in der Lage sein, sie zu beantworten ... –

Antwort

2

Die Webseite, auf die Tim Williams verweist (support.microsoft.com/en-us/kb/288424) gibt einen Hinweis darauf, wie dies möglich ist. Aber, diese Verbindung zeigt zeigen, dass man nicht durch eine nicht zusammenhängende Auswahl durchlaufen kann.

Dennoch, was auch dieser Link zeigt, dass Schriftformatierung kann für eine nicht zusammenhängende Auswahl festgelegt werden, aber nicht für ein Range-Objekt. Hier

ist der überarbeitete Code, dass tun Arbeit für eine nicht zusammenhängende Auswahl:

If Selection.Font.Shading.BackgroundPatternColor = WhtColor Then Selection.Font.Shading.BackgroundPatternColor = wdColorAutomatic Else Selection.Font.Shading.BackgroundPatternColor = WhtColor 

Dieser Code wird die Hintergrundfarbe zu der Zielfarbe ausgewählt ändern (obwohl ich die Farbcodes ändern musste aus Wd-Konstanten zu WdColor-Konstanten).

Der einzige Nachteil bei diesem Ansatz ist, dass ich keine Möglichkeit kenne, nach Text zu suchen, dessen Hintergrundfarbe geändert wurde, während Sie nach Text suchen können, der markiert ist.

Wie auch immer, danke, @Tim Williams für den hilfreichen Link. Ich hoffe, das obige hilft jemandem, der nur die Schrifteigenschaften ändern möchte und nicht wirklich die einzelnen Teile des ausgewählten Bereichs durchlaufen muss.

+0

Nice find @DRC benutzte es hier: https://Stackoverflow.com/a/46106637/3451115 (leider ist die Verbindung zu MS jetzt tot) – SlowLearner

+0

@SlowLearner - clevere Anwendung der Idee auf diesen Beitrag. Nett. – DRC