首页 > 解决方案 > 看到错误:无法设置列表属性。类型不匹配

问题描述

Could not set the list property. Type mismatch当我运行以下代码时,我看到了错误。

它可以正常工作,For i = 1 To 10但如果我将其更改为10 to 100我会看到错误。

Private Sub CommandButton1_Click()
Dim myString
Sheets("Welcome").Select
Range("W3").Select
myString = Range("W3")
UserForm1.TextBox1.Text = myString
Sheets("Welcome").Select
Range("AA4").Select
myString = Range("AA4")
UserForm1.TextBox2.Text = myString
Dim rng As Range
Dim ws As Worksheet
Dim i As Long
Set ws = Worksheets("August")
Set rng = ws.Range("G2:AK2")
Set fnd = rng.Find(TextBox1)
    If fnd Is Nothing Then MsgBox TextBox1 & " not found": Exit Sub
Set first = fnd
    With ListBox1
    .Clear
        For i = 1 To 100
            .AddItem Worksheets("August").Range("B" & i + 5).Value
            .List(.ListCount - 1, 1) = fnd.Offset(i + 3, 0)
        Next i
    End With

End Sub

标签: excelvbauserform

解决方案


我已经使用数据样本的一些随机数测试了下面的代码,它工作得很好。如上所述,在编写代码时要记住一些事情,缩进有很大帮助。其次,我强烈建议始终将Option Explicit其用作任何代码模块的第一行。这可以防止您使用未声明的变量(即拼写错误)。

Private Sub CommandButton1_Click()
    Dim rng As Range
    Dim ws As Worksheet
    Dim i As Long
    Dim fnd As Range                                    <=== Defined as a Range
        UserForm1.TextBox1 = Sheets("Welcome").Range("W3")
        UserForm1.TextBox2 = Sheets("Welcome").Range("AA4")
        Set ws = Worksheets("August")
        Set rng = ws.Range("G2:AK2")
        Set fnd = rng.Find(TextBox1)
        If fnd Is Nothing Then MsgBox TextBox1 & " not found": Exit Sub
        With ListBox1
            .Clear
            For i = 1 To 100
                .AddItem Worksheets("August").Range("B" & i + 5).Value
                .List(.ListCount - 1, 1) = fnd.Offset(i + 3, 0)
            Next i
        End With
End Sub

在上面的代码中,请注意我已经缩短了用于设置文本框值的代码。您的原始代码:

Dim myString


Sheets("Welcome").Select
Range("W3").Select
myString = Range("W3")

UserForm1.TextBox1.Text = myString

Sheets("Welcome").Select
Range("AA4").Select
myString = Range("AA4")

UserForm1.TextBox2.Text = myString

变成了

UserForm1.TextBox1 = Sheets("Welcome").Range("W3")
UserForm1.TextBox2 = Sheets("Welcome").Range("AA4")

这干净多了。这在没有.Text结尾的情况下有效,TextBox1因为这.Text是默认属性。另请注意,我直接使用我想要的字符串引用了单元格,而没有“选择”它。选择单元格不是必须使用它,只有用户操作鼠标才需要选择单元格。


推荐阅读