使用Msgbox时发生VBA运行时错误13

使用Msgbox时发生VBA运行时错误13,vba,excel,runtime-error,msgbox,Vba,Excel,Runtime Error,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 S

我对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
子搜索()
将ws作为工作表,作为范围找到
Dim TextToFind(1到20)作为字符串
暗淡的文字尽可能长
TextToFind(1)=“玉匠”
TextToFind(2)=“Bob Collins”
TextToFind(3)=“Jemima Smythe”
对于此工作簿中的每个ws。工作表
与ws
如果.Name为“黑名单候选人”,则“不要搜索黑名单候选人!”!
iText=1

在iText尝试对两个字符串使用二进制运算符
时执行此操作。您可能打算使用
&
来连接字符串

文件:

(这些文档适用于VB.Net,但在两种语言中的工作方式相同)

因此,要修复它,请更换

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


您试图在两个字符串上使用二进制运算符
。您可能打算使用
&
来连接字符串

文件:

(这些文档适用于VB.Net,但在两种语言中的工作方式相同)

因此,要修复它,请更换

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


已编辑以说明在内容源自公式的单元格中进行搜索的原因

为了总结评论和litelite回答中已经指出的所有内容,并添加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
选项显式
子搜索()
将ws作为工作表,作为范围找到
Dim TextToFind(1到20)作为字符串
暗淡的文字尽可能长
TextToFind(1)=“xxxx”
TextToFind(2)=“xxxx”
TextToFind(3)=“xxxxx”
对于此工作簿中的每个ws。工作表
与ws
如果.name为“黑名单候选人”,则“不要搜索黑名单候选人!”!
iText=1

执行While iText编辑,以说明在内容源自公式的单元格中进行搜索的原因

为了总结评论和litelite回答中已经指出的所有内容,并添加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
选项显式
子搜索()
将ws作为工作表,作为范围找到
Dim TextToFind(1到20)作为字符串
暗淡的文字尽可能长
TextToFind(1)=“xxxx”
TextToFind(2)=“xxxx”
TextToFind(3)=“xxxxx”
对于此工作簿中的每个ws。工作表
与ws
如果.name为“黑名单候选人”,则“不要搜索黑名单候选人!”!
iText=1


Do While iText为什么结尾有“*”?将
*MsgBox(“在”和rngX.Address中找到的代理候选者)
修改为
MsgBox“在”&rngX.Address中找到的代理候选者”
是否省略了一些代码@litelite的答案是正确的。错误为13,但您的
Do
循环没有任何退出方法。同样
如果找到了Rng,那么
应该是
如果没有,Rng什么都不是,那么
@Comintern在If中有一个
转到
,他用它来打破无限loop@Comintern没错,我读得很快。他的代码永远不会结束…为什么结尾有“*”?将
*MsgBox(“找到的代理候选者”和rngX.Address)
修改为
MsgBox“找到的代理候选者”&rngX.Address
是否省略了一些代码@litelite的答案是正确的。错误为13,但您的
Do
循环没有任何退出方法。同样
如果找到了Rng,那么
应该是
如果没有,Rng什么都不是,那么
@Comintern在If中有一个
转到
,他用它来打破无限loop@Comintern没错,我读得很快。他的代码永远不会结束…括号是多余的。它们也会在后面咬你-参见Office VBA文档中的
&
是,对于
是,括号是多余的。他们也会在后面咬你-请参见.Office VBA文档中的
&
是以及
谢谢各位,我现在不再收到错误消息了。但是,在手动插入我正在搜索的文本字符串之后,我已经测试了这一点。虽然它实际上找不到文本字符串。你们中有人能帮忙吗?需要更多信息:用再现问题的最小数据集的例子更新你的问题。此外,请指定要搜索的单元格是否包含常量值或公式结果。我已经更新了问题,如果有人有任何想法,将不胜感激!谢谢你迄今为止的帮助!我在你们编辑的问题中看到,要在主机中搜索的单元格有一个连接公式。因此,请看编辑后的答案,我刚刚用
xlFormulas
@Lbrin替换了
xlValues
,你完成了吗?谢谢大家,我现在不再收到错误消息了。但是,在手动插入我正在搜索的文本字符串之后,我已经测试了这一点。虽然它实际上找不到文本字符串。你们中有人能帮忙吗?需要更多信息:用再现问题的最小数据集的例子更新你的问题。此外,请指定要搜索的单元格是否包含常量值或公式结果。我已经更新了问题,如果有人有任何想法,将不胜感激!谢谢你迄今为止的帮助!我在你们编辑的问题中看到,要在主机中搜索的单元格有一个连接公式。因此,请看编辑后的答案,我刚才用
xlFormulas
@Lbrin替换了
xlValues
,你看完了吗?