Arrays 在用户窗体(VBA)中动态构建数组

Arrays 在用户窗体(VBA)中动态构建数组,arrays,vba,dynamic,userform,Arrays,Vba,Dynamic,Userform,我试图根据是否从另一个数组中勾选了一组复选框(在Userform中)来构建一个数组。因此,目前的代码是: Dim MyArray(10) As Integer MyArray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Dim IntrnlArray() As Variant For i = 1 To 10 If Me.Controls("CheckBox" & i).Value = True Then ' some cod

我试图根据是否从另一个数组中勾选了一组复选框(在Userform中)来构建一个数组。因此,目前的代码是:

   Dim MyArray(10) As Integer
   MyArray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  Dim IntrnlArray() As Variant

  For i = 1 To 10
  If Me.Controls("CheckBox" & i).Value = True Then
  ' some code I cant figure out!
  End If
Next
生成的(可能更小)新数组IntrnlArray()将在其他地方使用。因此,新数组将包含已勾选复选框的编号。这些数字将用于其他地方的进一步计算,而不是告诉用户勾选了哪个复选框。
任何帮助都将不胜感激

不完全确定您到底想要什么,但我想这就足够了:

Dim IntrnlArray() As boolean

For i = 1 To 10
        redim IntrnlArray(i)
        IntrnlArray(i) = nz(Me.Controls("CheckBox" & i).Value,false)
Next

您不需要2个数组。此代码将每个复选框的值(true或false)分配给数组的相应元素

,因为@Mr Nemo在评论中提出了问题,我还提供了一个使用集合的示例:

Public Sub UsingCollections()

Dim MyCollection As New Collection

For i = 1 To 10
    If Me.Controls("CheckBox" & i).Value = True Then
        MyCollection.Add i
    End If
Next i

End Sub

我相信这里提供的一个解决方案会适合你的需要:与本文作者类似,我相信收藏可能更适合你的需要。或者,您也可以将数字连接到字符串中(逗号分隔),然后使用
Split()
方法从字符串中读取。出于兴趣,我以前从未使用过集合。我该如何编写这个?谢谢你的耐心!下面的内容可能有点太多:但它是非常结构化的,像这样,你只能得到你真正想要/需要的东西。还有一个与数组以及何时使用数组的比较:正如作者所提到的:当你有一个固定的大小时,数组会更好。由于您希望动态调整尺寸,我建议使用collection.Grand。谢谢你的链接非常感谢!注意:最后,你将有一个集合,集合中的项目数量与带有
True
值的复选框数量相同。他改变了主意,你偷走了我15个代表点;-)@尼莫先生,我仍然会让
NZ()
设置在复选框的值上,否则你会在三个状态复选框上得到一个错误,它们可以返回
true
false
NULL
@ThomasG,这就是为什么我对你的答案投了高票,至少给你10分,因为我感到内疚。我希望尼莫先生也能学会投票。那你现在已经有20个了。顺便说一句,
NZ()
仅适用于MS访问。由于我看不到MS Access的任何迹象,您应该注意在Excel中使用
Iif
的替代用法。啊,是的,您对Excel上的NZ的看法是正确的,另一方面,他从未指定它用于Excel:p