2012-11-02 241 views
11

Excel VBAのクラスモジュールで定義されている列挙型を使用しています。これは正常に動作してきたが、私は列挙型変数の比較を行うたびにコンパイルエラーを取得開始しました:VBA列挙型で時折 "定数式が必要"エラーが発生する

クラスCExampleで:

他の場所
Enum MyEnum 
    Foo 
    Bar 
End Enum 

If someValue = myEnum.Foo Then 

テキスト.Fooが強調表示され、「コンパイルエラー:定数式が必要です」というメッセージが表示されます。

Googleで検索すると、これがランダムに起こりうることが示唆され、IDEを再起動するか、enum宣言の後にスペースを追加すると修正が再開されます。

これは本当にVBAでの既知のバグですか?それが起こるのを避けるために何かできますか、それが収穫したらVBAを確実に再稼働させますか?

私の場合は、Excelを終了して再オープンしても効果がありません。私のPCを再起動している間、すみません。再起動後

更新:

問題驚くべきことである私のマシンを、再起動後に続きました。私はpublic by defaultであることを意味していますが、enumの定義の前にPublicを追加しようとしましたが、試してみると思いますが、エラーは消えました。私はPublicキーワードを削除しました(私たちは元のコードに戻っています)、それでもコンパイルして正常に動作します。

これはVBAのランダムなバグです。私は、経験豊かな開発者がこれが頻繁に起こることを発見したかどうかを知ることに興味があります - あなたはenumを使用しないことをアドバイスしますか?それとも青い月に一度ポップアップして、私は不運だったのですか?

更新さらなる発展の6週間後:

問題は、このプロジェクトを開発する私の時間の残りの部分の間に再発しなかったので、それは珍しい問題であるように見えます。

+1

「someValue = Foo Then ...」を実行するとどうなりますか? 'myEnum.'を取り除いてください。 –

+0

再起動後、問題はまだ起こっています。 Cthulhuさん、あなたの提案をありがとうが、それは助けにはなりません - 同じコンパイルエラー。 –

+1

バグと思われます。同じモジュールのコードを新しいモジュールにコピーし、再コンパイルします。それはいくつかのためにそれを解決するようです。 –

答えて

6

質問で指摘したように、私は編集してエニューム定義を保存し、編集を元に戻して再度保存することでエラーを取り除きました。最近、このプロジェクトでもう少し作業を行っていたが、コードは1行で型の不一致が発生し、同じ関数が変更されていない場合には、同じ入力。

私が見ている断続的なエラーのいくつかは、Excelファイルにコードアーチファクトが蓄積されている可能性があります。読んだところで、VBAコードがコンパイルされ、ファイルに保存されています。 「クリーン」または「すべてを再構築する」オプションはありません.VBAは、増分変更が必要なものを自分自身で解決しようとします。これにより、多くのコード変更を行ったプロジェクトで、あらゆる種類の奇妙なランタイム動作につながる可能性があります。これは、おそらく私がこのワークブックの最初の開発中に見つけた列挙型エラーの原因です。この記事の「What It Means to Decompile and Compact in VBA」セクションは、概要をよく示しています。

この問題の多くは、VBA CodeCleaner:http://www.appspro.com/Utilities/CodeCleaner.htmを使用することを推奨しています。よく知られたVBAの専門家であるチップピアソンは、「非常に強くこのアドインをお勧めします。私はこれまでに遭遇していないことに驚いています!

5

バグであるようです。

同じモジュールのコードを新しいモジュールにコピーし、再コンパイルします。それはいくつかのためにそれを解決するようです。

同様の修正が存在します。これには、列挙の定義行の編集と元に戻すことが含まれます。

これが頻繁に問題になる場合は、数値定数に切り替えることを検討してください。

0

古い質問ですが、これはただ経験しただけです。 Enum上の公開された定義者を削除しました。 IDEを再起動しませんでした。これはまだ驚いています。

関連する問題