我正在使用(作为示例)在 3x2 矩阵上带有六个文本框的用户窗体:像这样:
c1 c2 c3
c4 c5 c6
我正在尝试将这两个文本框行添加到集合(辅助)中,然后将此集合添加到集合的集合(主)中。然后用主Collection中的Collection变量引用嵌套Collection(辅助)中的对象。喜欢:“集合(主要)。第一个元素。Collection (secondary).Third Element.name”是 c3。
我试图阅读和实现通过键或集合的集合在集合集合中引用对象-如何按值而不是引用来制作子集合?,并且我还尝试使用字典,例如建议的 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
有什么建议吗?非常感谢