簡體   English   中英

VBA:使用變量作為用戶定義類型的引用

[英]VBA: Use a variable as a reference to a user defined type

如何在不創建類型實例副本的情況下使用局部變量引用用戶定義的類型?

例如,在下面的代碼中,我理想的做法是在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

從我的角度來看,你讓它變得復雜了。 但我相信你有理由這樣做。 您提交的示例會生成您提到的錯誤。 但是,當我改變一些行時,沒有錯誤。 我不確定我的建議是否是您所期望的結果(雖然這個問題對我來說並不完全清楚)但是請嘗試使用此代替您的MySub3

Sub MySub3(OMT As tOneMoreType)
Dim VarA As Single
Dim MT

MT = OMT.MyOtherType.MyTypeArray(GlobalIndex).VariableA

VarA = MT

End Sub

通常,這樣我就可以讀取從TopLevel傳遞的任何元素im MySub3 如果不是答案,請澄清更多。

我想在這里你遇到了VBA的一個局限性。 我知道無法繞過嵌套用戶類型的部分解引用限制。

我認為你最好使用包含帶有getter和setter函數的私有數組的類(遺憾的是,VBA也沒有運算符重載)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM