Ошибка выполнения VBA 13 при использовании Msgbox

Я очень плохо знаком с VBA и имею только базовый уровень знаний.

Я пытался создать макрос для перекрестной ссылки данных на одном листе с несколькими другими листами в одной рабочей книге. Если запись найдена, я бы хотел, чтобы появилось сообщение msgbox, чтобы предупредить пользователя о местонахождении данных.

После многих часов поиска в интернете и объединения кусков кода, это то, что у меня есть

Sub search()
Dim ws As Worksheet, found As Range
Dim TextToFind(1 To 20) As String
Dim iText As Long

TextToFind(1) = "Jade Smith"
TextToFind(2) = "Bob Collins"
TextToFind(3) = "Jemima Smythe"

For Each ws In ThisWorkbook.Worksheets
    With ws
        If .Name <> "Blacklisted Candidates" Then 'Do not search blacklist candidates!
            iText = 1
            Do While iText <= UBound(TextToFind)
                If TextToFind(iText) <> "" Then 'Do not search blank strings!
                    Set found = .UsedRange.Find(what:=TextToFind(iText), LookIn:=xlformulas, LookAt:=xlPart, MatchCase:=False)

                    If Not found Is Nothing Then
                        MsgBox "Proxy Candidate Found at " & found.Address
                    Else
                        MsgBox "No Proxy Candidates Found ", vbOKOnly, "Success!"
                    End If
                    iText = iText + 1
                End If
            Loop
        End If
   End With
Next ws

End Sub

Этот код, однако, не находит значения из других листов.

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

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

2 ответа

Вы пытаетесь использовать бинарный оператор And на две струны. Вы, вероятно, хотели использовать & вместо этого, чтобы объединить строки.

Документация:

  • And
  • &

(Документы для VB.Net, но они работают одинаково на обоих языках)

Чтобы исправить это, замените

MsgBox ("Proxy Candidate Found at " And rngX.Address)

От

MsgBox ("Proxy Candidate Found at " & rngX.Address)

отредактировано для учета поиска в ячейке, содержание которой определяется формулой

чтобы суммировать все то, что уже было указано в комментариях и небольшом ответе, и добавить около 0,02 цента, здесь рабочий код

Option Explicit

Sub search()
    Dim ws As Worksheet, found As Range
    Dim TextToFind(1 To 20) As String
    Dim iText As Long

    TextToFind(1) = "xxxx"
    TextToFind(2) = "xxxx"
    TextToFind(3) = "xxxxx"

    For Each ws In ThisWorkbook.Worksheets
        With ws
            If .name <> "Blacklisted Candidates" Then 'Do not search blacklist candidates!
                iText = 1
                Do While iText <= UBound(TextToFind)
                    If TextToFind(iText) <> "" Then 'Do not search blank strings!
                        Set found = .UsedRange.Find(what:=TextToFind(iText), LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False)

                        If Not found Is Nothing Then
                            MsgBox "Proxy Candidate Found at " & found.Address
                        Else
                            MsgBox "No Proxy Candidates Found ", vbOKOnly, "Success!"
                        End If
                        iText = iText + 1
                    End If
                Loop
            End If
       End With
    Next ws
End Sub
Другие вопросы по тегам