2014-07-06 165 views
0

我試圖顯示一個消息框*指示當一個查找公式匹配數組中的名稱,當它沒有。當vlookup返回或不返回匹配時顯示一個消息框

有了下面的數據,我目前的代碼工作正常:

Name Name 
John John 

它返回下面的消息框:「OK」

Sub check_name() 
Dim name As String 
name = Range("A2") 

If Application.WorksheetFunction.VLookup(Range("A2"), Range("B1:B2"), 1, False) = name Then 
    MsgBox "Ok" 
Else 
    MsgBox "Not Ok" 

End If 
End Sub 

但如果沒有一個代碼不起作用比賽。
以下數據,我試圖顯示:「不好」。

Name Name 
John Wayne 

我得到以下信息:

運行時錯誤「1004」
應用程序定義或對象定義的錯誤

我猜If聲明不起作用當vlookup未返回匹配時,即公式返回#N/A(不可用)。

我試圖將變量name定義爲布爾值。使它與用IsNA包裝的查找公式相等,然後我嘗試在If語句中使用'name',但是我得到了上述相同的結果模式。

我該如何解決這個問題?韓國社交協會。

* 尋找使用VBA

+0

試試看:MsgBox IIF(IsError(Application.Match(name,Range(「B1:B2」),False)),「Not OK」 OK「)'。 –

+0

Gahhh。對於類似的問題,有一個可以接受的答案,就像關閉原因所表明的那樣,但這不是一個真正的答案......當這個問題被標記爲正式「關閉」時,我距離提交答案約5秒。如果你想PM /聊天或給我發電子郵件([email protected]),我可以給你我的完整答案。乾杯。 –

+1

@DavidZemens它的Doug的答案來自應該使用的副本。同意接受的不順暢。 – brettdj

回答

1

你可以簡單地聲明Validation rules下討論的細胞做這個答案。

您需要選擇Validation,然後選擇驗證列表中的單元格(另一個包含所需單元格的區域)。

如果您絕對需要在VBA中執行此操作,則必須執行一些錯誤捕獲。

基本上需要添加的代碼:

Function ThisFunction() 
    On Error GoTo ErrorHandler 

    ' Your normal code 
    ' The next two lines are VERY IMPORTANT. If you don't Exit, you'll get weird logical errors on runtime 
    ThisFunction = '... 
    Exit Function 
ErrorHandler: 
' Code to return the results in case of Error 
ThisFunction = '... 
End Function 

錯誤出現上No Match結果和不能由WorksheetFunction.VLookup()

此代碼直接處理,特別是進行修飾,

Sub check_name() 
    On Error GoTo ErrorHandler 
    Dim name As String 
    name = Range("A2") 

    If Application.WorksheetFunction.VLookup(Range("A2"), Range("B1:B2"), 1, False) = name Then 
     MsgBox "Ok" 
    Else 
     MsgBox "Not Ok" ' Never invoked 
    End If 
    Exit Sub 
ErrorHandler: 
    MsgBox "Not ok" 
End Sub 

這是一種非常低效的完成此任務的方式,但是這是修改問題的最少方法它將適用於您的代碼在這個子程序中的其餘部分

+1

哈哈,沒問題,每當我靠近電腦時我都會這樣做,通常我會從手機或平板電腦上輸入這些東西,所以很難處理格式和內容,並且我保持最低限度這個問題。但要指出的一點。 – hnk