- 締切済み
VBAのエラーについて
エクセル2007 でマクロのコードを書いています。 開発画面からマクロを実行するとうまくいくのに、エクセルのシートに配置したボタンにそのマクロを登録して実行するとエラーが出てしまいます。 標準モジュールに UserForm1.showを書いており、UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが、UserForm2が出る前に、「問題が発生したために、Microsoft Office 2007 Excelを・・・・・・」というような画面が出て強制終了されます。(UserForm1、UserForm2とも modelessで表示しています。) また、開発画面から1度実行すれば、シートに配置しマクロを登録したボタンからでも実行できるようになるのですが、一度、そのブックを保存してから改めて開くと、同じような症状が出てしまいます。 UserForm2のInitializeに問題があるのだと思い、そこのコードをじっくりと見た結果、UserForm2にあるPageの中に配置した特定のComboBoxとCommandButtonに関する処理を非表示にするとエラーが出ないことが判明しました。しかし、それらについての処理は、他のComboBoxなどと同じ処理(セルの値を読み込むような)をしているもので、名前などのミスもありません。(というか、開発画面からの実行では正常に動きます。) ただ、共通していることとしては、そのエラーが出る特定のComboBoxとCommandButtonは、最後の最後で思いついて配置したものであるということだけなのです。 ずっと、いろいろな方向から試しているのですが、わかりません。複雑な説明で申し訳ないのですが、なにかしら情報をお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
ボタンクリックするとフォーカス移動しそうだから、 Excel マクロでは鬼門の Select~ とか Active~ でもエラーになりそうだし、フォーム上のコントロール を基準とした視点でも、実際にメモリ上に領域確保 される。。。つまりはインスタンスの生成のタイミングと 実行できる命令、できない命令もあるだろうし、 標準モジュールから呼んでる時点でそんな意識無い だろうし、可能性だけなら、たくさんあり過ぎて 分からないです。 質問者はどれだけの経験をお持ちなのか分からないですが、 自分の判断で > しかし、それらについての処理は、他のComboBoxなどと同じ処理 と判断されたのですから、どうしようもないです。 助言はありません。 私は、結果が違う時点で「違う処理」だと思います。 Excel が実際にメモリ上で行なっている作業まで意識 されての判断でしょうかね。
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルのシートに配置したボタン と >UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが との関係はどうなっているのか。 一般には、シートにコントロールを貼り付けるのと、フォームに貼り付けるのはコードが違ったりする。 >開発画面からマクロを実行するとうまくいくのに 初心者レベルで開発画面とその他と分けて考えるとは何?あまり大げさな言葉はッ使わないように。 それよりしっかり内容を表現して。 ーーー Private Sub CommandButton1_Click() MsgBox "BBB" End Sub はUserForm1などに作成される。 ーー Private Sub CommandButton1_Click() MsgBox "AAA" End Sub はSheet1などのイベントプロに作成される。 ーー 標準モジュールには Sub test01() UserForm1.Show vbModeless End Sub を作る。 ーー 実行 Sub/ユーザーフォームの実行で シートのボタンをクリックしたらMsgBox "AAA"が表示され フォームのボタンをクリックすると MsgBox "BBB" が表示されました。 骨格は上記で何処が違うのかな。 Userform2の存在かな。 上記のような簡単なMsgBox "XXX"で(骨格を)追跡すべきだ。判らないと直ぐ質問して無いですか。