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