Как искать / заменять термины (и их форматирование)? - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь найти различные термины в рабочей книге и изменить их форматирование на красный шрифт, выделенный жирным шрифтом (по сути, чтобы выделить термины). Я нашел ниже скрипт, который работает на один срок. Я пытался добавить дополнительные условия безуспешно. Любая помощь будет оценена. Заранее спасибо!

Sub colorText()

Dim cl As Range
Dim startPos As Integer
Dim totalLen As Integer
Dim searchText As String
Dim endPos As Integer
Dim testPos As Integer

' specify text to search.
 searchText = "Trust"

' loop trough all cells in selection/range
For Each cl In Selection

  totalLen = Len(searchText)
  startPos = InStr(cl, searchText) 
  testPos = 0

  Do While startPos > testPos
    With cl.Characters(startPos, totalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With

    endPos = startPos + totalLen
    testPos = testPos + endPos
    startPos = InStr(testPos, cl, searchText, vbTextCompare)
  Loop

Next cl

End Sub

1 Ответ

2 голосов
/ 30 апреля 2019

Один из способов справиться с этим - использовать ParamArray. Удалите searchText и добавьте параметр ParamArray к вашему Sub:

Sub ColorText(ParamArray searchStrings() As Variant)
    Dim cl As Range
    Dim startPos As Integer
    Dim totalLen As Integer
    Dim endPos As Integer
    Dim testPos As Integer

    For Each searchItem In searchStrings
        For Each cl In Selection
            totalLen = Len(searchItem)
            startPos = InStr(cl, searchItem)
            testPos = 0

            Do While startPos > testPos
                With cl.Characters(startPos, totalLen).Font
                    .FontStyle = "Bold"
                    .ColorIndex = 3
                End With

                endPos = startPos + totalLen
                testPos = testPos + endPos
                startPos = InStr(testPos, cl, searchItem, vbTextCompare)
            Loop
        Next cl
    Next searchItem
End Sub

И теперь вы можете вызывать другой Sub / Macro с несколькими строками, например:

Sub Test()
    ColorText "Trust", "Foo", "Bar"
End Sub

Результат:

Result


Если вы не хотите использовать ParamArray или отдельный метод (Sub), тогда вместо этого вы можете запустить цикл For Each для массива строк:

For Each searchItem In Array("Trust", "Foo", "Bar")
    ' Do your magic here.
Next searchItem
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...