C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

VBAの列挙型

VBAの列挙型(enum)を使った事が無いのですが、Blog用に現在
作っているCATIAのマクロで使ってみようと思ったのですが、
思うように行かなかったです。
有識者の方がご覧になっていたら、教えて頂けると助かります。
(何となく "出来ない" と感じてはいるのですが、検索しても
 "出来ない" にたどり着けなかったので・・・)

あまり良い例ではないのですが、列挙型を用意します。

'vba
Enum Pos
    X = 0
    Y '= 1
    Z '= 2
End Enum

目的は、配列のインデックスとして利用したいんです。
続いて、目的の配列を初期化します。

'vba
Sub test()
    Dim Move(2)
    Move(Pos.X) = 5
    Move(Pos.Y) = 7
    Move(Pos.Z) = 11
End Sub

配列の値は、規則性が無いためチマチマ代入します。
で、関数を用意します。

'vba
'Function twice(ByVal v As Pos)
Function twice(ByVal v As Integer)
    twice = v * 2
End Function

やりたい事は、列挙型全てを列挙してtwice関数処理を
行いたいのです。こんな感じに。

'vba - NG
Sub test()
    ・・・
    For Each P In Pos
        Debug.Print twice(Move(P))
    Next
End Sub

"Posはコレクションや配列じゃないから駄目だよ"って
エラーが出ます。 それじゃあ

'vba - NG
Sub test()
    ・・・
    For i = 0 To Pos.Count 'Len(Pos)
        Debug.Print twice(Move(i))
    Next
End Sub

とかでもエラーです。

もちろん

'vba - OK
Sub test()
    ・・・
    For i = 0 To UBound(Move)
        Debug.Print twice(Move(i))
    Next
End Sub

これであればOKなのですが、これでは "Enum Pos" を
増やした際、Move配列数しか処理しない為、ちょっと
危険な香りがしますし、そもそも列挙型を用意する
意味がかなり薄れます。

要は、列挙型ってネーミングなんだから列挙させたいの
ですが、VBAでは列挙出来ないものなんですか?
って事を知りたいんです。(無理っぽいとは、感じてます)