VBA中如何将用户窗体19个ComboBox选中索引存入数组并验证?
修正你的VBA排班表数组存储代码
嘿,我一眼就看出你这段代码的问题啦~核心是赋值方向搞反了,而且数组也没初始化,导致根本没法正确存储ComboBox的选中索引。我给你修正并解释清楚:
原代码的问题点
- 数组
Larray没有初始化大小,直接赋值会触发下标越界错误 - 你写的是
Me.Controls("ComboBox" & j).ListIndex = Larray,这是把数组的值赋给ComboBox的选中索引,完全搞反了逻辑,应该是把ComboBox的索引存到数组里
修正后的完整代码
Public Sub cmd_Erstellen_Click() Dim j As Long Dim Larray As Variant ' 初始化数组,设置为包含19个元素的数组(索引从1到19,对应19个ComboBox) ReDim Larray(1 To 19) For j = 1 To 19 ' 把每个ComboBox的选中索引存入数组对应的位置 Larray(j) = Me.Controls("ComboBox" & j).ListIndex Next j ' 可选:验证数组是否正确存储,打开VBA编辑器的立即窗口(Ctrl+G)查看结果 For j = 1 To 19 Debug.Print "ComboBox" & j & "的选中索引: " & Larray(j) Next j Unload UserForm1 End Sub
关键说明
- 数组初始化:用
ReDim Larray(1 To 19)定义数组的大小,确保有足够的位置存储19个ComboBox的索引 - 正确赋值逻辑:
Larray(j) = Me.Controls("ComboBox" & j).ListIndex,这才是把每个ComboBox的选中索引(0-4,未选中则为-1)存入数组对应位置 - 验证方法:添加的
Debug.Print循环可以帮你在立即窗口查看每个元素的值,确认是否成功存储
如果需要处理ComboBox未选中的情况(此时ListIndex为-1),可以加个判断,比如:
Larray(j) = IIf(Me.Controls("ComboBox" & j).ListIndex = -1, 0, Me.Controls("ComboBox" & j).ListIndex)
这样就能把未选中的情况默认设为0,根据你的需求调整就行。
内容的提问来源于stack exchange,提问作者Aleksandar Bilic
相关产品推荐
相关产品推荐

