- ベストアンサー
フォームモジュールでのエラーについて
- フォームモジュールにVBAコードを作成して実行するとエラーが出る理由について詳しく説明してください。
- 具体的には、フォームモジュールでのコード実行時に「指定のコントロールを追加名前の変更または削除することはできません」というエラーが発生します。
- このエラーは、フォームモジュールではコントロールの名前やキャプションを変更することができないためです。同じコードを標準モジュールに貼り付けて実行すると正常に動作します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> なぜフォームモジュールだとエラーになるのでしょうか? 端的に言ってしまえば「仕様」ということになてしまいますが・・・(汗) VBAでは、記述したコードは、実行される前にコンパイルされます。 http://e-words.jp/w/E382B3E383B3E38391E382A4E383AB.html このコンパイルが実行される際に、 「フォーム上に実際にあるコントロール群の名前」と 「コード上に記載されたコントロール群の名前」 との整合性が確認され、整合していた場合のみ、実行可能になります。 (不整合があった場合は「コンパイルエラー」が発生) このコンパイルの処理は、少なくともAccess VBAではモジュール単位で 行われるようです。 (フォームに実在しないコントロールを参照するコードを記述した場合、 そのフォーム内のコードを実行しようとすると(当該コントロールを参照 する部分は実行しなくても)コンパイルエラーが発生する一方で、 別のフォームのコードは、上記のコードの修正をしなくても問題なく 実行できる、と) そして、コードの実行が可能な状態(=フォーム ビュー)が継続している間は、 この整合性が保たれるよう、ある意味、「レコードロック」と同様と思われる 処理が行われます。 ところが、今回のご質問のように「自身を一旦デザインビューに切り替えて」 という処理の場合は、確かにフォームとしてはビューが切り替わっていますが、 コード側から見ると、「コンパイルされた一連の処理が継続中」の状態です。 このため、その処理が行われると整合が取れなくなるということで、実行時 エラーとなった、ということだと思います。 ・・・納得には程遠い回答かとは思いますが(汗)、参考まで。
お礼
回答ありがとうございました。