如何在不创建类型实例的副本的情况下使用局部变量引用用户定义的类型?作为一个例子,在下面的代码中,我最想要做的是在MySub3中创建一个局部变量,MT,并引用嵌套在另一个结构中的数据结构...但VBA不包含允许这个。它允许它用于对象,但不允许用户定义的类型(arrggg!)......并且没有明显的原因......它只是不允许它。VBA:使用变量作为用户定义类型的引用
MySub1显示了如何以长时间笨重的方式引用嵌套结构。 MySub2展示了如何通过传入嵌套结构来完成此操作,但是这会使调用例程混乱,并且有多个这样的嵌套结构会变得很难看。
MySub2演示VBA 可以做我想做的,它似乎没有提供一种方法来做到这一点。我希望有一种方法,我没有偶然发现。
请注意,我的实际代码比这个例子复杂得多,有多个独立结构为许多数组提供索引作为结构元素。使用这些本地引用变量会使代码更具可读性和可管理性。
另请注意,我意识到“with”语句,它有帮助,但一次只能在一个结构上使用。
另请注意,我知道我可以使用实际的对象类。我的代码从一个对象开始,但我很快发现VBA对数组作为属性成员存在限制......用户定义类型没有的限制。
Type tMyType
VariableA As Single
End Type
Type tMyOtherType
MyTypeArray() As tMyType
End Type
Type tOneMoreType
MyOtherType As tMyOtherType
End Type
Dim GlobalIndex As Integer
Sub TopLevel()
Dim TopLevelType As tOneMoreType
ReDim TopLevelType.MyOtherType.MyTypeArray(0 To 10)
Call MySub1(TopLevelType)
Call MySub2(TopLevelType.MyOtherType.MyTypeArray(GlobalIndex))
Call MySub3(TopLevelType)
End Sub
Sub MySub1(OMT As tOneMoreType)
Dim VarA As Single
VarA = OMT.MyOtherType.MyTypeArray(GlobalIndex).VariableA
End Sub
Sub MySub2(MT As tMyType)
Dim VarA As Single
VarA = MT.VariableA
End Sub
Sub MySub3(OMT As tOneMoreType)
Dim VarA As Single
Dim MT
Set MT = OMT.MyOtherType.MyTypeArray(GlobalIndex)
VarA = MT.VariableA
End Sub
你已经重新创建了MySub1 – grahamj42 2013-03-09 19:43:27
好的,我没有注意到它:)一般来说,如果你不引用对象,你不能使用'Set'。用'Type'定义的任何你自己的变量都不是对象。请澄清更多... – 2013-03-09 19:53:49
grahamj42和Kaz Jaw,谢谢你回复我的问题。 – 2013-03-09 23:35:08