Ошибка выполнения 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