【发布时间】:2013-02-25 00:41:35
【问题描述】:
如何在不创建类型实例副本的情况下使用局部变量引用用户定义的类型?
例如,在下面的代码中,我最想做的是在 MySub3 中创建一个局部变量 MT,并引用嵌套在另一个结构中的数据结构......但是VBA 不允许这样做。它允许它用于对象,但不允许用于用户定义的类型(arrggg!)......而且没有明显的原因......它只是不允许它。
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
【问题讨论】:
标签: excel user-defined-types vba