2014-02-06 17 views
1

我正在運行一個宏,它根據用戶輸入的數字進行過濾。然後,它獲取該數字並根據該值過濾列表。我需要一個驗證,如果用戶輸入一個不在列表中的數字,它將退出宏。我覺得我很接近,但我是VBA的新手,所以我一直陷入困境。任何幫助都是極好的!如果在過濾器中沒有值,那麼退出sub

謝謝!

'Filter based on user entry 
Sheets("New Revision ").Select 
    part = Range("B4").Value 
    Sheets("PN_List").Select 
    Columns("D:E").Select 
    Selection.EntireColumn.Hidden = False 
    ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part 
    If ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field=1, Criteria1="" Then 
    MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error" 
    Exit Sub 
    End If 

回答

2
Sheets("New Revision ").Select 
    part = Range("B4").Value 
    Sheets("PN_List").Select 
    If Application.Countif([A1:A3000], part) < 1 Then 
    MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error" 
    Exit Sub 
    End If 
    Sheets("PN_List").Columns("D:E").EntireColumn.Hidden = False 
    ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part 
+0

這正是我需要的,謝謝! – user3281827

0

嘗試了這一點:

Sub Parts() 
Dim Part As Variant 
Dim Found As Boolean 
    Part = Sheets("New Revision").Range("B4").Value 
    On Error Resume Next ' If the lookup fails, ignore the error 
    ' the following assumes Part is in Column A 
    Found = WorksheetFunction.Match(Part, Sheets("PN_List").Range("$A$1:$A$3000"), 0) > 0 
    On Error GoTo 0 ' Resume normal error handling 
    If Not Found Then 
    MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error" 
    End If 
End Sub 

編輯:如果你想,你仍然可以進行過濾。也許這是一個好地方,在條款If Not Found

+0

您可以在不需要額外變量或更改On Error操作的情況下執行相同操作。通過用'If Not IsError(Application.Match(Part,Range(「$ A $ 1:$ A $ 3000」),0))替換Part和Msgbox之間的所有東西,然後''也可以擺脫你的暗淡語句。會從9行到4行。因爲問題不在於找到匹配,所以您不需要實際返回匹配結果。 – user2140261

+0

@ user2140261所有優點。 'Part'的值也可以在飛行中確定,進一步減少代碼。我故意選擇展示更加分步式的方法。也就是說,我喜歡你使用'CountIf'比我選擇的Match'更好(並且因爲這個原因而投票贊成)。 –

相關問題