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

Forms 错误1004-vba中的Vlookup-无法获取WorksheetFunction类的Vlookup属性,forms,vba,excel,vlookup,Forms,Vba,Excel,Vlookup,我浏览了其他用户已经遇到的关于这个问题的各种问题,似乎没有一个解决方案能够修复即将出现的错误代码 我有一个表单,提示用户输入参考号-他们将其输入文本字段,然后按OK 'OK button from form1 Public Sub CommandButton1_Click() refInput = refTextBox.Value InputRef.Hide ExportShipForm.Show End Sub 按下此按钮后,将出现下一个表单,我希望根

我浏览了其他用户已经遇到的关于这个问题的各种问题,似乎没有一个解决方案能够修复即将出现的错误代码

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

'OK button from form1
    Public Sub CommandButton1_Click()
    refInput = refTextBox.Value
    InputRef.Hide
    ExportShipForm.Show
    End Sub
按下此按钮后,将出现下一个表单,我希望根据第一个表单上输入的参考号填充数据。我有一个更新按钮,它将更新表单上的“标签”以显示数据-这就是我得到错误的地方。 要更新的第一个标签是通过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中键入了范围,同时也使用了命名范围,但每个变体都显示相同的错误

最后,我希望表单2上的标签能够根据Vlookup的结果进行更新


有什么想法吗?

您需要
将dataRef设置为范围
,然后
设置它

见下面的代码:

Dim DataRef as Range
Set dataRef = Worksheets("Shipping Data").Range("A:K")
就像
工作簿
工作表
一样,您需要
设置
范围

正如等级“Eh”培根在评论中所建议的那样,最好的做法是将每一个参考资料都模糊起来。
最好的方法是将
Option Explicit
一直放在代码的顶部。这迫使您定义所有有助于防止错误/打字错误等的内容

更新编辑:

问题是您正在
工作表中查找参考号(因此是
整数),但是
重新输入
设置为
字符串
,这会发生冲突,
.VLookup
会因为找不到匹配项而抛出错误

我已修改了您的代码:

您的sub现在是一个返回
.Caption字符串的函数

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
更新按钮调用
函数
,并提供以下数据:

Public Sub btnUpdate_Click()
    lbl_ICS.Caption = ICS_Caption(InputRef.refTextBox.Value)
End Sub
通过使用
函数
,您可以提供
整数
值并返回返回值,而无需使用
全局
字符串或整数

这将是您的下一个障碍,因为您只能使用
全局
变量
模块/用户表单
之间传输
变量

我甚至建议直接使用第二个
Userform
Initialize Event
中的函数来加载数据,直到
Userform
显示这比需要提供数据,然后仍然需要按下更新按钮更方便用户

  • 验证VBA IDE>工具>引用中没有缺少的库

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

  • 确保在所有代码窗口的顶部都有
    选项Explicit


  • 你能用你遇到的错误更新你的问题吗?你好,DragonSamu,已经用错误更新了标题。你能在
    Label_ICS=WorksheetFunction.VLookup(refInput,dataRef,7,False)
    行前检查
    refInput
    的类型吗;VBA允许您不用这样做就可以使用变量,但如果您没有意识到Excel假定变量为A类型,但您试图像使用B类型一样使用它(即:字符串与整数等),则通常会引起麻烦。您能否解释将数据存储到
    工作簿中而不是
    变量中的逻辑?我真的看不出其中的逻辑。这将排除表单2试图访问表单1上不再可用的对象时出现的错误-在发布完整错误消息的澄清之前,这是可能的。我不认为它现在是相关的。嗨,DragonSamu,我已经在所有模块和表单中添加了Option Explicit,并在每个引用中应用了dim。然而,错误仍在出现。DataRef和inputRef都被分配了一个dim(分别为范围和整数),但没有joy。Ben在下面建议使用正确的库-我有Visual basic for applications/MS Excel 15.0 Obj库/OLE Automation/MS Office 15.0 Obj库/MS Forms 2.0 Obj库。@jamesc100我已经研究了
    .VLookup
    的工作原理,并且您搜索的数据必须存在(如果您使用
    .VLookup
    )在第一列
    如果不存在,将抛出错误。您搜索的数据是否出现在第一列
    中?我已经测试了您的代码,如果您的搜索数据出现在第一列
    数据出现在第一列中,那么它工作得非常完美是的。vLookup正在尝试查找范围“DataRef”第一列中的refInput。@jamesc100如果您可以上传您的文件并发布链接,那么我可以查看一下,正如我所说的,我使用Userform测试了您的代码,但没有错误。-@这是文件的链接
    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