我已经浏览了其他用户已经面临的这个问题已经提出的各种问题,并且没有任何解决方案似乎可以修复错误代码。
我有一个表单,提示用户输入参考号 - 他们将其输入文本字段然后按确定
'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的结果。
有什么想法吗?
答案 0 :(得分:1)
您需要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
一直放在代码的顶部。这迫使你定义一切有助于防止错误/拼写错误等的事情。
更新修改
问题是您在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
Variables
在Modules/Userforms
之间转移Global
。
我甚至建议直接使用第二个Variable
的{{1}}中的函数来加载数据,Initialize Event
显示这更加用户友好,然后需要提供数据和然后仍然需要按下更新按钮。
答案 1 :(得分:0)
确认您在VBA IDE中没有丢失的库>工具>参考
尝试使用工作表单元格作为存储和检索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
确保所有代码窗口的顶部都有Option Explicit
。