2013-01-06 64 views
2

在我的Main過程中,我想寫一個快速的if語句來檢查用戶是否提供了有效的輸入(用戶從數據列表中選擇項目數量,請參閱附加的截圖)。爲此,我正在檢查項目編號是否不屬於項目列表的一部分。如果這是真的,則顯示錯誤消息;如果不是,那麼調用其他一些程序。VBA application.match錯誤2015

由於某些原因,雖然我在運行時遇到了錯誤2015,這意味着即使在正確的用戶條目中if語句始終爲真。有人能幫我理解錯誤嗎?

  • 該項目號碼輸入是稱爲「IdSelect」命名的細胞,並在一個被稱爲「發票」
  • 針對此輸入檢查是在一個被稱爲「輸入」
  • 片材中的數據表數據存儲在B列,被稱爲「ProjectList」

下面的代碼(注:我曾嘗試將其粘貼5次,但格式仍然無法工作這段時間由於某種原因 - 任何想法,可能是什麼?該代碼格式正確。對不起,顯示混亂;如果有人可以告訴我什麼問題mig HT我將不勝感激)從「輸入」表

Sub Main() 
    'Turn off screen updating 
    Application.ScreenUpdating = False 
    'Define variable for currently active cell to reactivate it afterwards 
    Dim OldActiveSheet As Object 
    Dim OldActiveCell As Object 
    Dim i As Integer 
    Dim ProjectList As Range 
    Set OldActiveSheet = ActiveSheet 
    Set OldActiveCell = ActiveCell 
    'If-statement to check whether project number is valid or not 
    Worksheets("Invoice").Activate 
    'Print to Immediate Window to check value - remove later 
    Debug.Print Range("IdSelect").Value 
    If IsError(Application.Match(Range("IdSelect").Value, "ProjectList", 0)) Then 
     'Print to Immediate Window to check value - remove later 
     Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0) 
     MsgBox "Invalid Choice: Project with this number does not exist!" 
     Exit Sub 
    Else 
     'Call procedures to execute 
     Call SortData 
     Call Count_Line_Items 
     Call Count_Total_Rows 
     Call Write_Services(ServCnt) 
     Call Write_Expenses(ExpCnt) 
    End If 
    'Reactivate previous active cell 
    OldActiveSheet.Activate 
    OldActiveCell.Activate 
End Sub 

截圖:

enter image description here

+0

閱讀能否請您格式化'subroutine' :-)?你錯誤地放了'code'。你需要在問題編輯器中使用「方括號」。 – bonCodigo

+0

好的謝謝,這解釋了它! :-)感謝您的編輯! – Matthias

+0

請試一試答案。評論你是否需要進一步澄清或接受,如果它解決了問題;-) – bonCodigo

回答

7

您參考範圍的方式是相當奇怪的..因爲你錯過了range參考。奇怪的是,你這樣做是正確的在下一行 Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0)

所以請嘗試這個請:(我需要100年來格式化我自己的帖子在移動.....)。請確保使用顯式參考,如以下示例代碼所示。相應地設置你的表。

Dim ws as Worksheet 
Set ws = Sheets(1) 

IsError(Application.Match(ws.Range("IdSelect").Value, ws.Range("ProjectList"), 0)) Then 

這裏是爲您的error handling on on match.

+0

非常感謝(並在您的手機上做它額外的獎金:-))。現在它工作得非常好,我將接受關於未來船上明確參考的教訓。感謝您的鏈接! – Matthias

+0

@Matthias很高興你的工作。 :) – bonCodigo