【问题标题】:VBA runtime error 13 using Msgbox使用 Msgbox 的 VBA 运行时错误 13
【发布时间】:2016-09-06 15:49:52
【问题描述】:

我对 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

但是,此代码无法从其他工作表中找到值。

在测试这个时,我只是在没有找到数据时得到 msgbox,即使那里有测试数据。

我有一个大约 9 张(不断增长)的工作簿,我想在每个工作簿的前 9 列中搜索指定的数据,如您所见,我已经手动输入宏,但是在运行宏时我即使有数据要查找,也不会返回任何结果。

【问题讨论】:

  • 为什么末尾有“*”?
  • 修改*MsgBox ("Proxy Candidate Found at " And rngX.Address)MsgBox "Proxy Candidate Found at " &amp; rngX.Address
  • 您是否遗漏了一些代码? @litelite 有正确的答案。错误 13,但您的 Do 循环无法退出If Rng Is found Then 也应该是 If Not Rng Is Nothing Then
  • @Comintern if 中有一个goto,他用来跳出无限循环
  • @Comintern 是的,我读得很快。他的代码永远不会结束......

标签: vba excel runtime-error msgbox


【解决方案1】:

您正在尝试对两个字符串使用二元运算符And。您可能打算使用 &amp; 来连接字符串。

文档:

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

所以要修复它,替换

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

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

【讨论】:

【解决方案2】:

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

总结所有已经在 cmets 和 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

【讨论】:

  • 谢谢大家,我现在不再收到错误消息了。但是,我在手动插入要搜索的文本字符串后对此进行了测试。虽然它实际上并没有找到文本字符串。你们有谁能帮忙吗?
  • 需要更多信息:使用重现问题的最小数据集示例更新您的问题。此外,指定要搜索的单元格是否保存 constant 值或 formulas 结果
  • 我现在已经更新了这个问题,如果有人有任何想法,将不胜感激!感谢您迄今为止的帮助!
  • 我在您编辑的问题中看到要搜索的单元格包含连接公式。因此,请参阅我刚刚将 xlValues 替换为 xlFormulas 的编辑答案。
  • @Lbrin,你通过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多