填充用户表单错误“类型不匹配”

时间:2017-03-18 17:01:18

标签: excel vba excel-vba userform

我目前在填充用户表单时遇到问题。

问题:当我输入票证#并按搜索时,我希望填写用户表单。但是当我尝试运行它时,会发生类型不匹配。我已经尝试将文本框设置为整数或字符串,并将工作表中的源更改为受尊重的类型,但随后会出现无效的限定符。

有趣的是我试图简化它,测试代码并且它有效,所以我不确定我做错了什么。

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

2 个答案:

答案 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感觉它理解了用户的意图时,它会强制某些值。