VB6・VBAメモ:Enumの項目が未定義になる

列挙体(Enum)はGridやExcelの行列位置の管理等、通番に並んだ値を使う場合に便利ですが、
デバッグをしていると、ときどき困ったことが起こることがあります。

Enum enCol
	ColA = 1   '1
	ColB       '2
	ColC       '3
End Enum

デバッグを途中で停止すると、設定しているはずの値が未定義扱いとなり、
コンパイルエラーが発生することがあります。



1度こうなるとVBやExcelを再起動したりしても未定義のまま直らないことがあります。

これが原因で私の同僚は

Enum enCol
	ColA = 1
	ColB = 2
	ColC = 3
End Enum

のような書き方に変更して対処をしていました。

しかしこれでは、Enumの利点を殺してしまいます。
項目数が多い場合の項目追加や順番変更が、これでは大変面倒になりますし、
Constで定義するのと変わりません。

原因はよくわかりませんが、いろいろ試しているうちに これを修復する方法を見つけたのでメモしておきます。(回避策ではありません;)

例えば上記の例で、enCol.ColBが未定義になってしまったとした場合、
一旦、以下のように適当な名前に変更します。

Enum EnCol
	ColA = 1   '1
	xColB       '2
	ColC       '3
End Enum

これで一度コンパイルを実行します。
もちろんColBがなくなるのでコンパイルは通らないはずです。

コンパイルで弾かれた後に、元の定義に戻す
何故かenCol.ColBが正常になります。
恐らく項目の変更後のコンパイル時に再計算か何かが発生して正常になるのだとは思います。

少し面倒ですが、VBやExcelを何度も再起動したり変更したりするよりは良いかと…;

たぶんこれはVBのバグ…ですよね?
回避方法や原因が分かる方がいれば教えていただきたいです。


コメント
コメントする








    
この記事のトラックバックURL
トラックバック