向文本框添加数据时,VBA中出现类型不匹配错误

向文本框添加数据时,VBA中出现类型不匹配错误,vba,excel,Vba,Excel,我有一个文本框和一个列表框,其中包含从Excel文件填充的各个城市的列表 现在每个城市都有两种选择之一:要么在境内,要么在境外。我希望该选项显示在文本框中 我试过这样的方法: Private Sub CommandButton1_Click() TextBox2.Value = Application.VLookup(Me.ListBox1.Text,Sheets("Sheet1").Range("B:C"), 2, False) End Sub 但我的错误是: 运行时错误21473525

我有一个
文本框
和一个
列表框
,其中包含从Excel文件填充的各个城市的列表

现在每个城市都有两种选择之一:要么在境内,要么在境外。我希望该选项显示在文本框中

我试过这样的方法:

Private Sub CommandButton1_Click()

TextBox2.Value = Application.VLookup(Me.ListBox1.Text,Sheets("Sheet1").Range("B:C"), 2, False)

End Sub
但我的错误是:

运行时错误2147352571(80020005)。无法设置值属性。类型不匹配

我的excel文件如下所示:

Private Sub CommandButton1_Click()

TextBox2.Value = Application.VLookup(Me.ListBox1.Text,Sheets("Sheet1").Range("B:C"), 2, False)

End Sub

假设您的数据存储在
表1
中。您想将这些数据绑定到
UserForm
上的
ListBox1
。我建议使用自定义函数加载数据,而不是通过使用
RowSource
属性绑定数据。在这种情况下,我建议使用,以避免重复

见:


注意:代码是直接从头部编写的,因此可能包含错误

问题可能是您没有检查对Application.VLookup的调用是否成功。大多数返回的值都可以成功地转换为字符串,但有一个重要的例外:如果VLookup返回错误,例如,它找不到Me.ListBox1.Text,则无法转换直接返回的变量

这应表明:

Private Sub ReturnsOfVLookup()

    Dim works As Variant, doesnt As String

    works = Application.VLookup("Something not found", _
                                Sheets("Sheet1").Range("B:C"), 2, False)
    Debug.Print works

    On Error Resume Next
    doesnt = Application.VLookup("Something not found", _
                                 Sheets("Sheet1").Range("B:C"), 2, False)
    If Err.Number <> 0 Then
        Debug.Print Err.Description
    Else
        Debug.Print doesnt  'We won't be going here...  ;-)
    End If

End Sub
Private Sub ReturnsOfVLookup()
Dim用作变量,而不是字符串
works=Application.VLookup(“找不到的东西”_
表(表1)。范围(表2,假)
调试。打印作品
出错时继续下一步
doesnt=Application.VLookup(“未找到的东西”_
表(表1)。范围(表2,假)
如果错误号为0,则
调试.打印错误说明
其他的
调试。打印不会“我们不会在这里…”;-)
如果结束
端接头

列表框是否放置在UserForm上?如何将数据加载到其中?@MaciejLos Yes它被放置在Userform上,我通过将其Rowsource设置为excel文件中的名称来加载。Listbox是否显示整个范围(名称、城市、地区)?如果
Application.VLookup
未找到查找值,它将返回
\N/A
错误
TextBox2.Value
不能成为错误值。@MaciejLos否。它只有city-@MaciejLos——如果不知道代码是否有效,为什么要提供代码?在提供答案之前,你是否先测试过它?@DaveExcel,没有,我还没有测试过。我几乎可以肯定它也一定会起作用。
Private Sub ReturnsOfVLookup()

    Dim works As Variant, doesnt As String

    works = Application.VLookup("Something not found", _
                                Sheets("Sheet1").Range("B:C"), 2, False)
    Debug.Print works

    On Error Resume Next
    doesnt = Application.VLookup("Something not found", _
                                 Sheets("Sheet1").Range("B:C"), 2, False)
    If Err.Number <> 0 Then
        Debug.Print Err.Description
    Else
        Debug.Print doesnt  'We won't be going here...  ;-)
    End If

End Sub