Выделение альтернативных слов в Word VBA с использованием VBA - PullRequest
1 голос
/ 10 марта 2011

Привет, вот сценарий: мне нужно выделить слова чередующимися цветами красного и зеленого, и у меня есть следующий код, который уже работает.Вопрос в том, как это можно сделать без использования оператора Mod или Modulo?Также следует использовать Range.Любые предложения приветствуются!Спасибо, парни!

Модуль для вызова функции:

Sub Test()
'If to call the function
If (altHighlight(ActiveDocument.Range)) = True Then MsgBox "Alternate Highlighting Done!"

End Sub

Функция для альтернативного выделения:

Function altHighlight(R As Range) As Boolean
    Dim eachWord As Range
    Dim count As Integer

    For Each eachWord In R.Words
        If count Mod 2 = 0 Then
            eachWord.HighlightColorIndex = wdRed
        Else
            eachWord.HighlightColorIndex = wdGreen
        End If
        count = count + 1
    Next
    altHighlight = True
End Function

1 Ответ

0 голосов
/ 10 марта 2011

Прежде чем компьютеры могли выполнять деление быстро, было два распространенных способа чередовать вещи.

Младший значащий бит целого числа будет чередоваться от 0 до 1 при увеличении.Вы можете использовать побитовый оператор AND для выделения этого бита:

Function altHighlight(R As Range) As Boolean
    Dim eachWord As Range
    Dim count As Integer

    For Each eachWord In R.Words
        If count And 1 = 0 Then
            eachWord.HighlightColorIndex = wdRed
        Else
            eachWord.HighlightColorIndex = wdGreen
        End If
        count = count + 1
    Next
    altHighlight = True
End Function

Поскольку вы фактически не считаете элементы в вашем диапазоне, вы можете просто заставить count переключаться между 0 и 1:

Function altHighlight(R As Range) As Boolean
    Dim eachWord As Range
    Dim count As Integer

    For Each eachWord In R.Words
        If count = 0 Then
            eachWord.HighlightColorIndex = wdRed
        Else
            eachWord.HighlightColorIndex = wdGreen
        End If
        count = 1 - count
    Next
    altHighlight = True
End Function
...