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では列挙出来ないものなんですか?
って事を知りたいんです。(無理っぽいとは、感じてます)