Collection of Collections - 参考 SubCollection Item with Variable for Primary Collection
Collection of Collections - Refer to SubCollection Item with Variable for Primary Collection
我正在使用(作为示例)在 3x2 矩阵上有六个文本框的用户窗体:像这样:
c1 c2 c3
c4 c5 c6
我正在尝试将这两行文本框添加到一个集合(辅助)中,然后将此集合添加到集合的一个集合(主要)中。
然后使用主集合中集合的变量引用嵌套集合(辅助)中的对象。
喜欢:“集合(主要)”。第一个元素。合集(二级).第三Element.name”是c3.
我尝试阅读并实施 Referencing an object within a collection of collections by key or , and I also tried with a Dictionary like suggested Dynamically Create collection of Collections VBA,但我不断收到:
运行-时间错误“438”:对象不支持此 属性 或方法
在此行(或在下面代码中发布的行变体之一):
If rigavar.ItemCollection(q)(3).Name = "c3" Then
我试图理解和改编这些例子,但我就是做不到,我不知道我是否遗漏了什么,或者我做的完全错了,或者我只是没有做'不了解事物的运作方式或全部。
我通过为每一行创建一个集合并为每个集合创建一个特定过程得到了一个解决方法。
当例程到达某个集合时,它会使用该集合的特定引用触发例程,如下所示:
Private Sub workaround_Click()
Set rigaAA = New Collection
rigaAA.Add c1
rigaAA.Add c2
rigaAA.Add c3
Set rigaBB = New Collection
rigaBB.Add c4
rigaBB.Add c5
rigaBB.Add c6
If rigaAA.ItemCollection(3).Name = "c3" Then
Call rigaAAspecificRoutine
End if
End sub
Private Sub rigaAAspecificRoutine()
MsgBox c1.value & c2.value & c3.value
End sub
但我希望通过变量而不是具体的方式来完成它,比如:
Private Sub test_Click()
Dim rigaAA As VBA.Collection
Dim rigaBB As VBA.Collection
Dim rigavar As VBA.Collection
Set rigaAA = New Collection
rigaAA.Add c1
rigaAA.Add c2
rigaAA.Add c3
Set rigaBB = New Collection
rigaBB.Add c4
rigaBB.Add c5
rigaBB.Add c6
Set rigavar = New Collection
rigavar.Add rigaAA
rigavar.Add rigaBB
'none of this works:
For q = 1 To 2
If rigavar.ItemCollection(q)(3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q)(3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q, 3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q).ItemCollection(3).Value <> "" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
End Sub
有什么建议吗?
非常感谢
一个Collection
没有属性ItemCollection
。要访问集合 rigavar
的元素 q
,您可以使用以下方法之一
rigavar(q)
rigavar.Item(q)
(通常使用较短的形式,这基本上是较长形式的缩写,因为 Item
属性 就是所谓的 默认 属性 个合集)。
由于元素 rigavar(q)
又是一个集合,您可以使用
访问第三个元素
rigavar(q)(3)
rigavar.Item(q)(3)
rigavar.Item(q).Item(3)
检查控件名称的最简单方法,使用rigavar(q)(3).Name
你不能做的是写rigavar(q, 3)
,因为现在VBA会将两个参数都作为参数传入rigavar.Item(就好像它是一个二维数组)。
我正在使用(作为示例)在 3x2 矩阵上有六个文本框的用户窗体:像这样:
c1 c2 c3
c4 c5 c6
我正在尝试将这两行文本框添加到一个集合(辅助)中,然后将此集合添加到集合的一个集合(主要)中。 然后使用主集合中集合的变量引用嵌套集合(辅助)中的对象。 喜欢:“集合(主要)”。第一个元素。合集(二级).第三Element.name”是c3.
我尝试阅读并实施 Referencing an object within a collection of collections by key or
运行-时间错误“438”:对象不支持此 属性 或方法
在此行(或在下面代码中发布的行变体之一):
If rigavar.ItemCollection(q)(3).Name = "c3" Then
我试图理解和改编这些例子,但我就是做不到,我不知道我是否遗漏了什么,或者我做的完全错了,或者我只是没有做'不了解事物的运作方式或全部。
我通过为每一行创建一个集合并为每个集合创建一个特定过程得到了一个解决方法。 当例程到达某个集合时,它会使用该集合的特定引用触发例程,如下所示:
Private Sub workaround_Click()
Set rigaAA = New Collection
rigaAA.Add c1
rigaAA.Add c2
rigaAA.Add c3
Set rigaBB = New Collection
rigaBB.Add c4
rigaBB.Add c5
rigaBB.Add c6
If rigaAA.ItemCollection(3).Name = "c3" Then
Call rigaAAspecificRoutine
End if
End sub
Private Sub rigaAAspecificRoutine()
MsgBox c1.value & c2.value & c3.value
End sub
但我希望通过变量而不是具体的方式来完成它,比如:
Private Sub test_Click()
Dim rigaAA As VBA.Collection
Dim rigaBB As VBA.Collection
Dim rigavar As VBA.Collection
Set rigaAA = New Collection
rigaAA.Add c1
rigaAA.Add c2
rigaAA.Add c3
Set rigaBB = New Collection
rigaBB.Add c4
rigaBB.Add c5
rigaBB.Add c6
Set rigavar = New Collection
rigavar.Add rigaAA
rigavar.Add rigaBB
'none of this works:
For q = 1 To 2
If rigavar.ItemCollection(q)(3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q)(3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q, 3).Name = "c3" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
For q = 1 To 2
If rigavar.ItemCollection(q).ItemCollection(3).Value <> "" Then
MsgBox c1.value & c2.value & c3.value
End If
Next
End Sub
有什么建议吗? 非常感谢
一个Collection
没有属性ItemCollection
。要访问集合 rigavar
的元素 q
,您可以使用以下方法之一
rigavar(q)
rigavar.Item(q)
(通常使用较短的形式,这基本上是较长形式的缩写,因为 Item
属性 就是所谓的 默认 属性 个合集)。
由于元素 rigavar(q)
又是一个集合,您可以使用
rigavar(q)(3)
rigavar.Item(q)(3)
rigavar.Item(q).Item(3)
检查控件名称的最简单方法,使用rigavar(q)(3).Name
你不能做的是写rigavar(q, 3)
,因为现在VBA会将两个参数都作为参数传入rigavar.Item(就好像它是一个二维数组)。