【发布时间】:2021-03-18 18:13:51
【问题描述】:
如果某个范围内的值包括“(FS)”,我使用以下循环将数据添加到列表框。
搜索范围定义为AllAreas(12)。用户窗体上的选项按钮定义了要搜索的 12 个区域中的哪一个,这些区域由三个整数定义:Upr、Lwr 和 Idx。
Plybooker 是来自 Combobox 值的字符串。如果这不是空白,则输入到列表框中的数据会根据这一点进行过滤,因此会出现 If、ElseIf 语句。
代码工作得很好,但是在搜索整个范围时非常慢(即当搜索到 AllAreas 中包含的所有 12 个范围时)。
我需要一种替代方法来将数据添加到列表框中,该方法比我的 For Each 循环要快得多。欢迎提出任何建议!
非常感谢
Public Sub PlybookListboxAll()
Dim Plybooker As String
Plybooker = Plybooks.ComboBox1.Value
Dim Upr As Integer, Lwr As Integer
If Plybooks.OptionButton12.Value = True Then
Lwr = 0
Upr = 12
End If
If Plybooker = "" Then
For Idx = Lwr To Upr
For Each MyCell In AllAreas(Idx).Cells
If InStr(1, MyCell.Value, "(FS)") > 0 Then 'And IsNumeric(MyCell.Offset(0, 6).Value) Then
Plybooks.ListBox1.AddItem
Plybooks.ListBox1.List(i, 0) = MyCell.Offset(, -1).Value
Plybooks.ListBox1.List(i, 1) = MyCell.Value
Plybooks.ListBox1.List(i, 2) = MyCell.Offset(, 2).Value
Plybooks.ListBox1.List(i, 3) = MyCell.Offset(, 3).Value
Plybooks.ListBox1.List(i, 5) = MyCell.Offset(, 8).Value
If IsNumeric(MyCell.Offset(, 6).Value) = True Then
Plybooks.ListBox1.List(i, 4) = CInt(MyCell.Offset(, 6).Value)
Else: Plybooks.ListBox1.List(i, 4) = "TBC"
End If
i = i + 1
End If
Next MyCell
Next Idx
ElseIf Plybooker <> "" Then
For Idx = Lwr To Upr
For Each MyCell In AllAreas(Idx).Cells
If InStr(1, MyCell.Value, "(FS)") > 0 And MyCell.Offset(0, 2).Value = Plybooker Then 'And IsNumeric(MyCell.Offset(0, 6).Value)
Plybooks.ListBox1.AddItem
Plybooks.ListBox1.List(i, 0) = MyCell.Offset(, -1).Value
Plybooks.ListBox1.List(i, 1) = MyCell.Value
Plybooks.ListBox1.List(i, 2) = MyCell.Offset(, 2).Value
Plybooks.ListBox1.List(i, 3) = MyCell.Offset(, 3).Value
Plybooks.ListBox1.List(i, 5) = MyCell.Offset(, 8).Value
If IsNumeric(MyCell.Offset(, 6).Value) = True Then
Plybooks.ListBox1.List(i, 4) = CInt(MyCell.Offset(, 6).Value)
End If
i = i + 1
End If
Next MyCell
Next Idx
End If
End Sub
【问题讨论】:
-
创建一个数组并为其分配列表框的
List属性。AddItem很慢。 -
感谢您的提示。我是数组的新手,你能给我关于这如何工作的进一步指导吗?我会想出一些东西,但我正在努力解决这个问题,只需要朝着正确的方向轻推!
标签: excel vba loops foreach listbox