Vba 如何在多列表框中正确添加项目?

Vba 如何在多列表框中正确添加项目?,vba,listboxitem,Vba,Listboxitem,我正在使用vba获取设备编号及其相应信息,并将其放入列表框中。用户将输入所需的设备编号,excel将获取信息。但是,当我第一次单击“获取数据”按钮时,它工作正常。当我第二次为另一个设备编号执行此操作时,我收到消息“无法设置列表属性。无效的属性数组索引”。以下是我的代码: Dim value As Long Public i As Integer 请注意,我不仅将“I”声明和值更改为public,还将列表列的位置从0开始,因此如果这是6元素表,请将其切换回原来的位置 出现错误的原因实际上是循

我正在使用vba获取设备编号及其相应信息,并将其放入列表框中。用户将输入所需的设备编号,excel将获取信息。但是,当我第一次单击“获取数据”按钮时,它工作正常。当我第二次为另一个设备编号执行此操作时,我收到消息“无法设置列表属性。无效的属性数组索引”。以下是我的代码:

Dim value As Long

Public i As Integer


请注意,我不仅将“I”声明和值更改为public,还将列表列的位置从0开始,因此如果这是6元素表,请将其切换回原来的位置

出现错误的原因实际上是循环之后的另一个“i”迭代“i=i+1”,列表行也从0开始,因此您添加了第二个索引,并尝试将其插入第三个位置

Public value As Long
Public i As Integer
Private Sub GetDataButton_Click()

Dim num As Variant

value = EquipmentNumber.value

For Each num In Sheets("S1 Cvtg Eqt List").Range(Range("B1"), Range("B1").End(xlDown))

If num = value Then
    i = MWOList.ListCount 'set i to available space
    MWOList.AddItem
    MWOList.List(i, 0) = (num.Offset(0, 1))
    MWOList.List(i, 1) = (num.Offset(0, 2))
    MWOList.List(i, 2) = (num.Offset(0, 3))
    MWOList.List(i, 3) = (num.Offset(0, 4))
    MWOList.List(i, 4) = (num.Offset(0, 5))

End If

Next num

EquipmentNumber = ""

End Sub

FYI‘EquipmentNumber’是一个文本框。哪一行给出了错误?您需要删除末尾Sub.a)之前的
i=i+1
,您可以完全避免变量
i
,并在
之后使用列表的
.ListCount
属性;由于
.List
是基于零的减去
-1
会导致列表的当前行索引:
MWOList.List(MWOList.ListCount-1,i)=……
;顺便说一句,与MWOList一起使用
<代码>以
结尾以缩短代码;b) 不要使用现有属性或函数名(如
value
)重载代码,例如使用
myValue
。c) 使用数组加速代码,d)更喜欢将与范围相关的计数器声明为
Long
而不是
Integer
,因为超过100万行的行数可能超过+32k的正整数限制。-@JaylanPaigeFYI使用数组方法进一步链接:;-@JaylanPaigerRight方向+:);建议在过程级而不是模块级声明变量
i
。顺便说一句,数值赋值不需要括号。仅供参考,c.f.在我对OP。
Public value As Long
Public i As Integer
Private Sub GetDataButton_Click()

Dim num As Variant

value = EquipmentNumber.value

For Each num In Sheets("S1 Cvtg Eqt List").Range(Range("B1"), Range("B1").End(xlDown))

If num = value Then
    i = MWOList.ListCount 'set i to available space
    MWOList.AddItem
    MWOList.List(i, 0) = (num.Offset(0, 1))
    MWOList.List(i, 1) = (num.Offset(0, 2))
    MWOList.List(i, 2) = (num.Offset(0, 3))
    MWOList.List(i, 3) = (num.Offset(0, 4))
    MWOList.List(i, 4) = (num.Offset(0, 5))

End If

Next num

EquipmentNumber = ""

End Sub