2015-08-28 345 views
1

我瀏覽過其他用戶遇到的這個問題已經提出的各種問題,而且這些解決方案似乎都沒有解決即將出現的錯誤代碼。錯誤1004 -Vlookup在vba中 - 無法獲取WorksheetFunction類的Vlookup屬性

我有提示輸入參考號碼用戶的形式組織 - 它們輸入到文本字段這一點,然後按OK

'OK button from form1 
    Public Sub CommandButton1_Click() 
    refInput = refTextBox.Value 
    InputRef.Hide 
    ExportShipForm.Show 
    End Sub 

一旦被按下,接下來的形式出現,我想根據第一個表單上的參考編號輸入數據。我有一個更新按鈕,它將更新表單上的「標籤」以顯示數據 - 這是我收到錯誤的地方。 更新的第一個標籤是通過VLOOKUP:

下面的用戶點擊更新按鈕2號形式:

Public Sub btnUpdate_Click() 
Call ICS_Caption 

lbl_ICS.Caption = Label_ICS 
End Sub 

這需要以下功能:

Public Sub ICS_Caption() 
Dim ws1 As Worksheet 

refInput = InputRef.refTextBox.Value 
Set ws1 = Worksheets("MACRO") 

dataRef = Worksheets("Shipping Data").Range("A:K") 
Label_ICS = WorksheetFunction.VLookup(refInput, dataRef, 7, False) 
End Sub 

錯誤繼續每次都出現 - 我已經在VBA以外的單元中手動運行了vlookup,並且它工作正常。 我已經在Vlookup中鍵入了範圍,同時也使用了命名範圍,但是每個變體都顯示了相同的錯誤。

最終,我希望表單2上的標籤更新Vlookup的結果。

任何想法?

+0

你可以更新你的問題,你得到什麼錯誤? – DragonSamu

+0

Hi DragonSamu,已更新標題並顯示錯誤 – jamesc100

+0

您能否在'Label_ICS = WorksheetFunction.VLookup(refInput,dataRef,7,False)'行之前檢查'refInput'的類型。 – ManishChristian

回答

1

你需要Dim dataRef as Range然後Set吧。

見下面的代碼:

Dim DataRef as Range 
Set dataRef = Worksheets("Shipping Data").Range("A:K") 

就像一個WorkbookWorksheet需要SetRange

正如級「呃,」培根建議在評論它總是最好Dim每一個參考。
這樣做的最好方法是將Option Explicit一直放在代碼的頂部。這將迫使你定義的一切,這有助於其防止錯誤/錯字的等

更新編輯:

的問題是你在你的Sheet(因此是Integer),但refInput尋找一個參考數設置作爲String這個衝突和.VLookup引發錯誤,因爲它找不到匹配項。

我已經重新設計你的代碼:

現在你子是返回.Caption String

Function ICS_Caption(refInput As Integer) 
    Dim dataRef As Range 
    Set dataRef = Worksheets("Shipping Data").Range("A:K") 
    ICS_Caption = WorksheetFunction.VLookup(refInput, dataRef, 7, False) 
End Function 

更新按鈕調用您Function並提供數據的函數:

Public Sub btnUpdate_Click() 
    lbl_ICS.Caption = ICS_Caption(InputRef.refTextBox.Value) 
End Sub 

通過使用Function您可以提供Integer值並返回沒有ne的返回值編輯有Global字符串或整數。

這將是您的下一個障礙,因爲您只能使用GlobalVariableModules/Userforms之間轉移Variables

我甚至建議直接使用功能在你的第二UserformInitialize Event加載數據的Userform顯示,這是對用戶更友好,然後需要提供數據,然後尚需推更新按鈕之前。

+0

嗨DragonSamu,我已經在Option Explicit中添加了所有模塊和表單,並且還將dim應用於每個引用。但是,錯誤仍然出現。 DataRef和inputRef都分配了一個dim(分別爲範圍和整數),但沒有喜悅。本建議下面有正確的庫 - 我有Visual Basic應用程序/ MS Excel 15.0 Obj庫/ OLE自動化/ MS Office 15.0 obj庫/ MS Forms 2.0 obj庫。 – jamesc100

+0

@ jamesc100我已經研究過.VLookup是如何工作的,並且如果不存在,那麼您在第一個「Column」中搜索的數據必須存在(如果您使用'.Lookup')則會拋出錯誤。您搜索的數據是否出現在第一個「Column」中?我測試了你的代碼,它的工作完美,如果你的搜索數據出現在第一列'列' – DragonSamu

+0

數據存在於第一列是。 vLookup試圖找到位於「DataRef」範圍中第一列的refInput。 – jamesc100

0
  1. 確認您擁有在VBA IDE>工具沒有丟失庫>參考

  2. 嘗試使用工作表單元格的地方來存儲和檢索refTextBox.Value,而不是refInput(我假設是一個全局變量):

    Public Sub CommandButton1_Click() 
    ... 
    Worksheets("Shipping Data").Range($M$1).Value=refTextBox.Value 
    End Sub 
    
    Public Sub ICS_Caption() 
    Dim refInput as Long'My assumption 
    ... 
    refInput=Worksheets("Shipping Data").Range($M$1).Value 
    ... 
    End Sub 
    
  3. 確保你在所有的代碼窗口的頂部有Option Explicit

+0

您能解釋一下將數據存儲到'Workbook'而不是'Variable'的邏輯嗎?我真的沒有看到這方面的邏輯。 – DragonSamu

+0

它將排除表單2嘗試訪問表單1上不再可用的對象時的錯誤 - 在發佈完整錯誤消息的說明之前,它可能會發生錯誤。我認爲現在沒有關係。 – Ben

相關問題