我目前在填充用户表单时遇到问题。
问题:当我输入票证#并按搜索时,我希望填写用户表单。但是当我尝试运行它时,会发生类型不匹配。我已经尝试将文本框设置为整数或字符串,并将工作表中的源更改为受尊重的类型,但随后会出现无效的限定符。
有趣的是我试图简化它,测试代码并且它有效,所以我不确定我做错了什么。
Option Explicit
Private Sub cbSearch_Click()
Dim vResult
'not sure if these are needed or not
'Dim TextBox2 As Integer
'Dim TextBox9 As Integer
'Dim TextBox4 As String
vResult = Application.CountIf(Worksheets("Journal").Range("A2:A10000"), Me.TextBox1.Value)
If vResult > 0 Then
'Error occurs here. "Could not set the Value properly. type mismatch. But when I try to set it(TextBox2, TextBox9, etc..)
'as a string or Integer it comes back as invalid qualifier
TextBox2.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 14, False)
TextBox9.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 15, False)
TextBox4.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 5, False)
'I also want the data to be imported to the userform to check the checkbox if it applies. I used 1 for true and 0 for false
CheckBox1.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False)
CheckBox2.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 31, False)
Else
MsgBox "No match found. Please try again."
End If
End Sub
答案 0 :(得分:0)
尝试使用CStr“清理”您的VLookup结果,并将TextBoxes属性更改为“.Text”。
Me.TextBox2.Text= Cstr(Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 14, False))
您可以执行的复选框是IF语句
If Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False) = 0 then
CheckBox1.Value = False
Else
CheckBox1.Value = True
End if
此外,您不需要声明“TextBox”变量,它只是您直接引用它的对象。
答案 1 :(得分:0)
设置复选框的方法较短。
CheckBox1.Value = Cbool(If Application.VLookup(TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False))
如果VLookup返回任何数字,则此公式将返回True;如果返回0,则返回False。使用On Error Resume Next
来容纳VLookup返回错误的可能性。例如,
Dim Chk As Boolean
Chk = False
On Error Resume Next
Chk = Cbool(If Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False))
On Error Goto 0 ' reinstates "Break on error"
CheckBox1.Value - Chk
如果VLookup返回错误,Chk
将保留在通话之前分配给它的值,在上面的代码False
中。
请注意,复选框的值是布尔值(True / False)。 VB会将您指定的0转换为False,并可能将1转换为True。实际上,True的数字等价值是-1,但是当VB感觉它理解了用户的意图时,它会强制某些值。