2016-09-06 176 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