22

ExcelVBAのクラスモジュールで定義された列挙型を使用しています。これは正常に機能していますが、列挙型変数を比較するたびにコンパイルエラーが発生し始めました。

クラスCの例:

Enum MyEnum
    Foo
    Bar
End Enum

他の場所:

If someValue = myEnum.Foo Then

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

Googleで検索すると、これはランダムに発生する可能性があり、IDEを再起動したり、列挙型宣言の後にスペースを追加したりすると、IDEが再び機能し始める可能性があります。

これは本当にVBAの既知のバグですか?それが起こらないようにするために、またはVBAが発生した場合に確実に再び機能させるために、私にできることはありますか?

私の場合、Excelを閉じて再度開くことは役に立ちませんでした。PCを再起動している間すみません。

再起動後の更新:

マシンを再起動した後も問題が解決しませんでしたが、これは驚くべきことです。Public列挙型定義の前に追加しようとしましたが(デフォルトでは公開される予定ですが、試してみようと思いました)、エラーは消えました。キーワードを削除しましたがPublic(元のコードに戻ったため)、コンパイルと実行は正常に行われます。

これはVBAのランダムなバグのようです。経験豊富な開発者がこれが頻繁に発生することに気付いたかどうか知りたいのですが、列挙型を使用しないことをお勧めしますか?それとも、ブルームーンに一度ポップアップして、運が悪かっただけですか?

さらに開発してから6週間後に更新します。

このプロジェクトを開発している間、この問題は再発しなかったので、まれな問題のようです。

4

7 に答える 7

15

質問で述べたように、列挙型定義を編集して保存し、編集を元に戻して再度保存することで、エラーを取り除きました。最近プロジェクトでさらに作業を行ったところ、別の類似した問題が見つかりました。1行のコードで「タイプの不一致」エラーが発生し、タイプの不一致はなく、同じ関数が変更されずに正常に機能していました。同じ入力。

私が見ている断続的なエラーのいくつかは、Excelファイル内のコードアーティファクトの蓄積が原因である可能性があります-いくつかの読み取りを行った後、VBAコードがコンパイルされてファイルに保存されることがわかりました。「クリーン」または「すべて再構築」オプションはありません。VBAは、必要な増分変更を自分で解決しようとします。これにより、コードを大幅に変更したプロジェクトで、あらゆる種類の奇妙なランタイム動作が発生する可能性があります。これは、このワークブックの最初の開発中に見つけた列挙型エラーの原因である可能性があります。この記事の「 VBAで逆コンパイルして圧縮することの意味」のセクションでは、概要を説明しています。

この問題に関するほとんどの言及では、VBA CodeCleanerの使用を推奨しています:http://www.appspro.com/Utilities/CodeCleaner.htm。有名で尊敬されているVBAの専門家であるChipPearsonは、「このアドインを強くお勧めします」と述べています。これまで出会ったことがないのでびっくり!

于 2013-11-28T12:23:23.700 に答える
8

バグのようです。

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

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

これが頻繁に発生する問題である場合は、数値定数への切り替えを検討してください。

于 2013-02-12T10:47:06.237 に答える
2

古い質問ですが、これを経験したばかりです。列挙型のパブリック定義を削除し、正常にコンパイルされました。IDEを再起動しませんでした。驚くべきことに、これはまだここにあります。

于 2017-04-03T13:11:13.843 に答える
1

私は今日この問題に遭遇し、別の可能な解決策を見つけました。これが他の誰かを助けるかもしれない場合に備えて、私は投稿しています。

次のどれも私のために働いていませんでした:

  1. Excelを再起動します
  2. Windowsの再起動
  3. 列挙型から「パブリック」を削除する
  4. 列挙型に「パブリック」を追加します

これは仕事用のコンピューターであり、管理者アクセス権がないため、VBAクリーナーアドインを使用することはできませんでした。

新しいモジュールを作成しようとしなかったので、それが機能したかどうかはわかりません。

ただし、Excelを閉じて、Excelの新しいインスタンスを起動し、[開いて修復]オプションを使用するとうまくいきました。それを行うには:

  1. すべてのExcelウィンドウを閉じる
  2. スタートメニューからExcelを開く
  3. 左側の「開く」に移動します
  4. 「その他の場所」の下にある「参照」を選択します
  5. 問題が発生したファイルに移動します
  6. 右下の[開く]のドロップダウン矢印をクリックし、[開いて修復...]を選択します。
于 2021-05-24T22:48:02.567 に答える
1

これは今日私に起こりました、そして、何らかの理由で原因は宣言でモジュールの上部にある誤って削除された「OptionExplicit」ステートメントでしたEnum。再度追加すると、すぐに動作し始めました。

于 2021-06-23T12:01:48.540 に答える
0

このエラーは、列挙型、その使用法、または関連するコードに変更が加えられていない場合に発生することがあります。私にとってうまくいったのは、列挙型をクラスから「共通」と呼ばれるモジュールに移動し、列挙型をプライベートではなくパブリックにすることです。

于 2019-07-25T18:55:53.650 に答える
0

列挙型でも同じ問題が発生しました。宣言にパブリック列挙型を追加すると、問題は停止しました。再起動する必要はありません。

于 2019-11-22T15:10:26.447 に答える