错误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") 

就像WorkbookWorksheet您需要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数值并获取返回值,而无需具有Globalstring或整数。

这将是你的下一个障碍,因为你只能使用Global VariableModules/Userforms之间传送Variable

我甚至build议直接使用第二个用户UserformInitialize Event中的函数来加载数据,然后用户Userform显示这是更加用户友好的,然后需要提供数据,然后仍然需要推动更新button。

  1. validation您在VBA IDE>工具>参考中没有丢失的库

  2. 尝试使用工作表单元格作为存储和检索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 
  3. 确保在所有代码窗口的顶部都有Option Explicit