Excel VBA嵌套循环问题:多选ListBox赋值VacLine数组
修正VBA多选列表框赋值数组的代码
问题背景
我有10个Integer类型的真空感应线路变量 VacLine(1 To 10),对应多选列表框VacLinesList中1至19的奇数选项。需根据列表框选中项,将选中值依次赋值给VacLine数组,未选中的赋值为0;选中项最少1个、最多10个,顺序不限。例如选中3、17、19时,VacLine1=3,VacLine2=17,VacLine3=19,VacLine4至VacLine10=0。现有嵌套循环代码无法实现找到选中值赋值后,下一次从上次找到的位置开始遍历,请求修正代码:
原代码:
With VacTC.VacuumLinesList For q = 1 To 10 v = 0 For v = v To .ListCount - 1 If VacLine(q) = "" Then If .Selected(v) Then VacLine(q) = .List(v) Exit For End If Exit For End If Next v Next q End With
原代码问题分析
- 每次外层循环重置
v=0,导致每次都从列表框开头遍历,无法延续上次的位置 VacLine是Integer类型,不能与空字符串""比较,应判断是否为0(数组初始值需设为0)- 内层循环中
Exit For位置错误,会导致第一次循环就直接退出,无法遍历后续选项
修正后的代码
' 先初始化数组所有元素为0 Dim q As Integer, v As Integer For q = 1 To 10 VacLine(q) = 0 Next q With VacTC.VacuumLinesList q = 1 ' 数组起始索引 ' 按顺序遍历列表框所有选项 For v = 0 To .ListCount - 1 ' 若当前选项被选中且数组未填满 If .Selected(v) And q <= 10 Then VacLine(q) = .List(v) q = q + 1 ' 移动到数组下一个待赋值位置 End If Next v End With
代码说明
- 先初始化
VacLine数组为0,确保未选中的位置默认值正确 - 用
q跟踪数组当前的赋值索引,初始为1 - 遍历列表框时,按顺序检查每个选项,选中则赋值给
VacLine(q),然后q自增 - 当
q超过10时自动停止赋值(符合最多10个选中项的限制) - 该逻辑自然实现了“找到一个选中项后,下一次从后续位置继续遍历”的需求,因为
v是递增遍历的
内容的提问来源于stack exchange,提问作者Andres Cobos
相关产品推荐
相关产品推荐

