$suppress_localhost = false;
Это сделало трюк для меня.
Вот краткий пример использования массивов для упрощения цикла:
Sub SearchMe()
Dim searchWords() As String
searchWords = Split("Name,Surname,LastName,First Name,AnotherName")
Dim searchRange As Range
Set searchRange = ThisWorkbook.Sheets("Sheet1").Range("A1:AA1")
Dim listText As String
Dim word As String
For Each word In searchWords
Dim cell As Range
For Each cell In searchRange
If InStr(UCase(cell.Text), UCase(word)) > 0 Then
listText = listText & vbNewLine & _
cell.Address(RowAbsolute:=False, ColumnAbsolute:=False) & _
" | " & cell.Value
End If
Next cell
MsgBox listText, vbQuestion, word
Next word
End Sub
Вот иллюстрация, но вы должны прочитать о массивах, так как их много, например, здесь .
Sub x()
Dim ListText As String
Dim FindText(1 To 2) As String
Dim Onecell As Range
FindText(1) = "Name"
FindText(2) = "Surname"
For i = LBound(FindText) To UBound(FindText)
For Each Onecell In Range("A1:AA1")
If InStr(UCase(Onecell.Text), UCase(FindText(i))) > 0 Then
ListText = ListText & vbNewLine & Onecell.Address(RowAbsolute:=False, ColumnAbsolute:=False) & " | " & Onecell.Value
End If
Next Onecell
MsgBox ListText, vbQuestion, FindText(i)
Next i
End Sub
Вы также можете использовать коллекцию вместо массива. Работать с коллекциями очень просто, и я часто нахожу их проще и быстрее реализовать, чем массив.
Dim colFind As New Collection
dim i As integer
Dim ListText As String
' Add the words you wish to search for to the collection.
colFind.Add "Name"
colFind.Add "Surname"
For i = 1 To colFind.Count
Dim Onecell As Range
For Each Onecell In Range("A1:AA1")
If InStr(UCase(Onecell.Text), UCase(colFind(i))) > 0 Then
ListText = ListText & vbNewLine & Onecell.Address(RowAbsolute:=False, ColumnAbsolute:=False) & " | " & Onecell.Value
End If
Next Onecell
MsgBox ListText, vbQuestion, colFind(i)
Next i