• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームモジュールだとエラーになる理由は?)

フォームモジュールでのエラーについて

このQ&Aのポイント
  • フォームモジュールにVBAコードを作成して実行するとエラーが出る理由について詳しく説明してください。
  • 具体的には、フォームモジュールでのコード実行時に「指定のコントロールを追加名前の変更または削除することはできません」というエラーが発生します。
  • このエラーは、フォームモジュールではコントロールの名前やキャプションを変更することができないためです。同じコードを標準モジュールに貼り付けて実行すると正常に動作します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> なぜフォームモジュールだとエラーになるのでしょうか? 端的に言ってしまえば「仕様」ということになてしまいますが・・・(汗) VBAでは、記述したコードは、実行される前にコンパイルされます。 http://e-words.jp/w/E382B3E383B3E38391E382A4E383AB.html このコンパイルが実行される際に、  「フォーム上に実際にあるコントロール群の名前」と  「コード上に記載されたコントロール群の名前」 との整合性が確認され、整合していた場合のみ、実行可能になります。 (不整合があった場合は「コンパイルエラー」が発生) このコンパイルの処理は、少なくともAccess VBAではモジュール単位で 行われるようです。 (フォームに実在しないコントロールを参照するコードを記述した場合、  そのフォーム内のコードを実行しようとすると(当該コントロールを参照  する部分は実行しなくても)コンパイルエラーが発生する一方で、  別のフォームのコードは、上記のコードの修正をしなくても問題なく  実行できる、と) そして、コードの実行が可能な状態(=フォーム ビュー)が継続している間は、 この整合性が保たれるよう、ある意味、「レコードロック」と同様と思われる 処理が行われます。 ところが、今回のご質問のように「自身を一旦デザインビューに切り替えて」 という処理の場合は、確かにフォームとしてはビューが切り替わっていますが、 コード側から見ると、「コンパイルされた一連の処理が継続中」の状態です。 このため、その処理が行われると整合が取れなくなるということで、実行時 エラーとなった、ということだと思います。 ・・・納得には程遠い回答かとは思いますが(汗)、参考まで。

BJLUEUYCT
質問者

お礼

回答ありがとうございました。

関連するQ&A