错误 1004 - vba 中的 Vlookup - 无法获取 WorksheetFunction class 的 Vlookup 属性

Error 1004 - Vlookup in vba - Unable to get the Vlookup property of the WorksheetFunction class

我浏览了其他用户遇到过的关于这个问题的各种问题,none 的解决方案似乎修复了即将出现的错误代码。

我有一个提示用户输入参考号的表格 - 他们将其输入文本字段,然后按确定

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

按下此按钮后,将出现下一个表格,我希望根据第一个表格上输入的参考编号填充数据。我有一个更新按钮,它将更新表单上的 "labels" 以显示数据 - 这是我收到错误的地方。 要更新的第一个标签是通过 Vlookup:

下面用户点击更新按钮第二个表格:

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 中输入了 运行ge,同时还使用了命名的 运行ges,但每个变体都显示相同的错误。

最终,我希望表格 2 上的标签随着 Vlookup 的结果进行更新。

有什么想法吗?

你需要 Dim dataRef as Range 然后 Set 它。

参见下面的代码:

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

就像 WorkbookWorksheet 你需要 Set Range

正如等级 'Eh' 培根建议在评论中最好 Dim 每个参考。
最好的方法是将 Option Explicit 一直放在代码的顶部。这会迫使您定义所有有助于防止 mistakes/typo 等

的内容

更新编辑:

问题是您正在 Sheet 中查找参考号(因此是 Integer),但是 refInput 被设置为 String 这会发生冲突并且 .VLookup 抛出错误,因为它找不到匹配项。

我修改了你的代码:

你的 sub 现在是 return .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 值并获得 return 值,而无需 Global 字符串或整数。

这将是您的下一个障碍,因为您只能使用 Global Variable.

Modules/Userforms 之间转移 Variables

我什至建议直接使用第二个 UserformInitialize Event 中的函数来加载数据,然后 Userform 显示这对用户更友好,然后需要提供数据然后仍然需要按下更新按钮。

  1. 验证您在 VBA IDE > 工具 > 参考资料中没有缺少库

  2. 尝试使用工作表单元格作为存储和检索的位置 refTextBox.Value,而不是 refInput(我假设它是一个全局变量):

    Public Sub CommandButton1_Click()
    ...
    Worksheets("Shipping Data").Range($M).Value=refTextBox.Value  
    End Sub
    
    Public Sub ICS_Caption()
    Dim refInput as Long'My assumption
    ...
    refInput=Worksheets("Shipping Data").Range($M).Value
    ...
    End Sub
    
  3. 确保所有代码的顶部都有 Option Explicit windows。