错误1004 – vlookup在vba中 – 无法获取WorksheetFunction类的Vlookup属性
我已经浏览了其他用户遇到的这个问题已经提出的各种问题,而且这些解决scheme似乎都不能解决即将出现的错误代码。
我有一个提示用户input参考号码的表单 – 他们将这个input到文本字段中,然后按确定
'OK button from form1 Public Sub CommandButton1_Click() refInput = refTextBox.Value InputRef.Hide ExportShipForm.Show End Sub
一旦按下这个键,下一个表格就会显示出来,我希望根据第一个表单上的参考编号input数据。 我有一个更新button,将更新窗体上的“标签”以显示数据 – 这是我得到一个错误。 要更新的第一个标签是通过Vlookup:
用户点击更新button第二个窗体:
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中input了范围,同时也使用了命名范围,但是每个变化都显示了相同的错误。
最终,我希望表单2上的标签更新Vlookup的结果。
有任何想法吗?
您需要Dim dataRef as Range
,然后Set
它。
见代码如下:
Dim DataRef as Range Set dataRef = Worksheets("Shipping Data").Range("A:K")
就像Workbook
或Worksheet
您需要Set
Range
正如“Eh”培根等级在评论中所暗示的那样,总是最好地暗示每一个参考。
最好的办法是把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
更新button调用您的Function
并提供数据:
Public Sub btnUpdate_Click() lbl_ICS.Caption = ICS_Caption(InputRef.refTextBox.Value) End Sub
通过使用Function
您可以提供Integer
数值并获取返回值,而无需具有Global
string或整数。
这将是你的下一个障碍,因为你只能使用Global
Variable
在Modules/Userforms
之间传送Variable
。
我甚至build议直接使用第二个用户Userform
的Initialize Event
中的函数来加载数据,然后用户Userform
显示这是更加用户友好的,然后需要提供数据,然后仍然需要推动更新button。
-
validation您在VBA IDE>工具>参考中没有丢失的库
-
尝试使用工作表单元格作为存储和检索refTextBox.Value,而不是refInput(我假设是一个全局variables)的地方:
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
-
确保在所有代码窗口的顶部都有
Option Explicit
。