错误1004 - vbaup在vba中 - 无法获取WorksheetFunction类

时间:2015-08-28 13:33:24

标签: excel forms vba excel-vba vlookup

我已经浏览了其他用户已经面临的这个问题已经提出的各种问题,并且没有任何解决方案似乎可以修复错误代码。

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

'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的结果。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要Dim dataRef as Range然后Set

见下面的代码:

Dim DataRef as Range
Set dataRef = Worksheets("Shipping Data").Range("A:K")

就像WorkbookWorksheet一样,您需要Set Range

就像成绩' Eh'培根在评论中建议每个参考文献最好Dim 最好的方法是将Option Explicit一直放在代码的顶部。这迫使你定义一切有助于防止错误/拼写错误等的事情。

更新修改

问题是您在Sheet寻找参考号码(因此Integer),但refInput设置为String此冲突和{{1因为无法找到匹配项而抛出错误。

我重写了你的代码:

您的子现在是一个返回.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 并提供数据:

Function

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

这可能是您的下一个障碍,因为您只能使用Global VariablesModules/Userforms之间转移Global

我甚至建议直接使用第二个Variable的{​​{1}}中的函数来加载数据,Initialize Event显示这更加用户友好,然后需要提供数据和然后仍然需要按下更新按钮。

答案 1 :(得分:0)

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

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

    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