2016-09-06 177 views
0

我对VBA很陌生,只有基本的知识水平。VBA运行时错误13使用Msgbox

我一直在尝试创建一个宏,以便在同一工作簿中的多张其他工作表上交叉引用一张工作表上的数据。如果找到记录,我希望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列的指定数据,你可以看到我已经手动输入到宏但运行宏即使有数据可以找到,我也不会返回任何结果。

+0

为什么你最后有“*”? –

+0

修改'* MsgBox(“代理候选人发现在和rngX.Address)''MsgBox”代理候选人在“&rngX.Address”找到 –

+0

您是否遗漏了一些代码? @litelite有正确的答案。错误13,但你的'Do'循环没有任何办法*退出*。另外'如果Rng被发现然后'应该是'如果不是没有什么然后'。 – Comintern

回答

4

您试图在两个字符串上使用二元运算符And。您可能打算使用&来代替连接字符串。

文档:

(该文档是VB.Net,但他们的工作同样在两种语言)

因此,要解决这个问题,替换

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

通过

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

括号是多余的。他们也可以在后端咬你 - 看到[这很混乱,为什么不总是使用圆括号?](http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/thisis -confusing - 为什么 - 不只是-总是使用-括号#T = 201609061647521040081)。 –

+0

用于'&'的Office VBA文档是[here](https://msdn.microsoft.com/en-en/library/office/gg264104.aspx)和'And'它是[here](https:// msdn .microsoft.com/EN-EN /图书馆/办公室/ gg251591。aspx) –

0

编辑占细胞,其内容从一个公式,得到了

既概括所有什么评论和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 
+0

谢谢你们,我现在不再收到错误信息。但是我在手动插入一个我正在搜索的文本字符串后进行了测试。尽管它实际上并没有找到文本字符串。你们能帮忙吗? – Lbrin

+0

需要更多信息:用最少的一组数据更新您的问题,以重现问题。此外,指定要搜索的单元格是否保留_constant_值或_formulas_结果 – user3598756

+0

我已更新问题现在如果有人有任何想法,将不胜感激!感谢您的帮助! – Lbrin