Один из способов справиться с этим - использовать 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](https://i.stack.imgur.com/uBSxx.gif)
Если вы не хотите использовать ParamArray
или отдельный метод (Sub), тогда вместо этого вы можете запустить цикл For Each
для массива строк:
For Each searchItem In Array("Trust", "Foo", "Bar")
' Do your magic here.
Next searchItem