Forms 错误1004-vba中的Vlookup-无法获取WorksheetFunction类的Vlookup属性
我浏览了其他用户已经遇到的关于这个问题的各种问题,似乎没有一个解决方案能够修复即将出现的错误代码 我有一个表单,提示用户输入参考号-他们将其输入文本字段,然后按OKForms 错误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 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