错误 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")
就像 Workbook
或 Worksheet
你需要 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
我什至建议直接使用第二个 Userform
的 Initialize Event
中的函数来加载数据,然后 Userform
显示这对用户更友好,然后需要提供数据然后仍然需要按下更新按钮。
验证您在 VBA IDE > 工具 > 参考资料中没有缺少库
尝试使用工作表单元格作为存储和检索的位置 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
确保所有代码的顶部都有 Option Explicit
windows。
我浏览了其他用户遇到过的关于这个问题的各种问题,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")
就像 Workbook
或 Worksheet
你需要 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
我什至建议直接使用第二个 Userform
的 Initialize Event
中的函数来加载数据,然后 Userform
显示这对用户更友好,然后需要提供数据然后仍然需要按下更新按钮。
验证您在 VBA IDE > 工具 > 参考资料中没有缺少库
尝试使用工作表单元格作为存储和检索的位置 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
确保所有代码的顶部都有
Option Explicit
windows。