Seeing error: Could not set the list property. Type mismatch

Seeing error: Could not set the list property. Type mismatch

当我 运行 以下代码时,我看到错误 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

我已经用一些随机数测试了下面的代码作为数据样本,它工作得很好。如上所述,在编写代码时要记住一些事情,缩进有很大帮助。其次,我强烈建议始终使用 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")

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

谢谢,这很有效我在一些单元格中有一些我没有注意到的错误(#N?A)

Private Sub CommandButton1_Click()
Dim rng As Range
Dim ws As Worksheet
Dim i As Long
Dim fnd As Range
    UserForm1.TextBox1 = Sheets("Welcome").Range("W3")
    UserForm1.TextBox2 = Sheets("Welcome").Range("Z3")
    UserForm1.TextBox3 = Sheets("Welcome").Range("Y3")
    Set ws = Worksheets(TextBox3.Value)
    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 200
            .AddItem Worksheets(TextBox3.Value).Range("B" & i + 5).Value
            .List(.ListCount - 1, 1) = fnd.Offset(i + 3, 0)
            .List(.ListCount - 1, 2) = Worksheets(TextBox3.Value).Range("E" & i + 5).Value
            .List(.ListCount - 1, 3) = Worksheets(TextBox3.Value).Range("F" & i + 5).Value
            .List(.ListCount - 1, 4) = "Oncall"
        Next i
    End With