• 締切済み

VBAのエラーについて

エクセル2007 でマクロのコードを書いています。 開発画面からマクロを実行するとうまくいくのに、エクセルのシートに配置したボタンにそのマクロを登録して実行するとエラーが出てしまいます。 標準モジュールに UserForm1.showを書いており、UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが、UserForm2が出る前に、「問題が発生したために、Microsoft Office 2007 Excelを・・・・・・」というような画面が出て強制終了されます。(UserForm1、UserForm2とも modelessで表示しています。) また、開発画面から1度実行すれば、シートに配置しマクロを登録したボタンからでも実行できるようになるのですが、一度、そのブックを保存してから改めて開くと、同じような症状が出てしまいます。 UserForm2のInitializeに問題があるのだと思い、そこのコードをじっくりと見た結果、UserForm2にあるPageの中に配置した特定のComboBoxとCommandButtonに関する処理を非表示にするとエラーが出ないことが判明しました。しかし、それらについての処理は、他のComboBoxなどと同じ処理(セルの値を読み込むような)をしているもので、名前などのミスもありません。(というか、開発画面からの実行では正常に動きます。) ただ、共通していることとしては、そのエラーが出る特定のComboBoxとCommandButtonは、最後の最後で思いついて配置したものであるということだけなのです。  ずっと、いろいろな方向から試しているのですが、わかりません。複雑な説明で申し訳ないのですが、なにかしら情報をお願いします。

みんなの回答

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

ボタンクリックするとフォーカス移動しそうだから、 Excel マクロでは鬼門の Select~ とか Active~ でもエラーになりそうだし、フォーム上のコントロール を基準とした視点でも、実際にメモリ上に領域確保 される。。。つまりはインスタンスの生成のタイミングと 実行できる命令、できない命令もあるだろうし、 標準モジュールから呼んでる時点でそんな意識無い だろうし、可能性だけなら、たくさんあり過ぎて 分からないです。 質問者はどれだけの経験をお持ちなのか分からないですが、 自分の判断で > しかし、それらについての処理は、他のComboBoxなどと同じ処理 と判断されたのですから、どうしようもないです。 助言はありません。 私は、結果が違う時点で「違う処理」だと思います。 Excel が実際にメモリ上で行なっている作業まで意識 されての判断でしょうかね。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>エクセルのシートに配置したボタン と >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"で(骨格を)追跡すべきだ。判らないと直ぐ質問して無いですか。

関連するQ&A

  • VBAについて

    UserForm1に、TextBox2、TextBox3、ComboBox1があります。 例えば、それぞれに TextBox2 = 100 TextBox3 = 500 ComboBox1 = abc-def と値をフォームから入力し、 UserForm1に配置された「OK」ボタンをクリックすると、 エクセルシートのH10からM10の結合された一つのセルの中に 100 / 500 abc-def と2段表示させたいのですが、可能でしょうか。 可能でしたら方法を教えて下さい。

  • 2つのユーザーフォームの表示切替(Excel2002VBA)

    Excel2002VBAを使用しています。 UserForm1 に CommandButton1 を配置したものと UserForm2 に CommandButton2 を配置したもの があります。 UserForm1が表示されている時、CommandButton1 を クリックすると、UserForm2 が表示され UserForm1 が非表示になり、 UserForm2 が表示されている時  CommandButton2 をクリックすると UserForm1 が 表示され UserForm2 が非表示になる というように 画面上にどちらか一方だけユーザーフォームを表示 させたいのですが上手くいきません。 CommandButton1 の Clickイベントに UserForm2.show vbmodeless Unload UserForm1 CommandButton2 の Clickイベントに UserForm1.show vbmodeless Unload UserForm2 と記述したのですが、実行すると、 ”このオブジェクトは、ロードまたはアンロード することはできません。”とエラー表示が出てき ます。 何とぞご教授よろしくお願いいたします。

  • エクセル不可解な現象?ではないと思うのですが。

    初歩的な質問ですがエクセルVBAの操作方法についてお尋ねします。 コントロールの編集とマクロの設定についてお尋ねします。 エクセルをたちあげ、シート1が表示されている状態にします。 次に、表示→ツールバー→コントロールボックスを表示し、コントロールボックスより シート上にコマンドボタンを配置します、CommandButton1が配置されたらこのボタンをダブルクリックするとVsualBasicEditerが立ち上がります。 プロジェクトエクスプローラーが表示され、シート1が選択されていることが確認できます。 ここで簡単なプログラムを書きます。 Sub CommandButton1_Click () UserForm1.Show End Sub 更に、挿入メニューよりユーザーフォームを挿入します。 この状態で、VsualBasicEditer上で 実行→Sub/ユーザーフォームの実行をクリックします。 プログラムが実行されUserAForm1が表示されます。 ここでUserForm1の閉じるボタンでUserForm1を閉じます。 一度プログラムを走らせると、 1:シート1に配置したコマンドボタンをクリックするとプログラムが動作する。   マクロの設定はしていないのに! 2:コマンドボタンの編集が出来なくなる。但し、新規にもう一個ボタンを配置すると   前のボタンの編集が出来るようになると同時にCommandButton1をクリックしても プログラムは走らない。 上記1、2の現象が起こります。  1について:ボタンにマクロの設定がしてないのに何故プログラムが走るのか?   このようなやり方でマクロの設定を行わないでもよいのか?  2について:一度プログラムを走らせても、新規にコントロールを追加するという操作をしないで、編集が出来るようにするにはどうすればよいか。   一度走らせたBookをそのまま保存しサイド立ち上げなおしてもボタンをクリックすればプログラムが動作します。走らせる前と後で何が変わっているのでしょうか?   何処かの設定が変わるのであればその場所を教えてください。

  • VBAのCallステートメントについて

    ExcelのSheet1にCommandButton1(表示)があります。 -------------------------------------------------- Private Sub 表示_Click() (DBより表示処理) End Sub -------------------------------------------------- UserForm1にCommandButton1(登録)があります。 -------------------------------------------------- Private Sub 登録_Click() (DBへの登録処理) UserForm1.Hide Call WorkSheets("Sheet1").表示_Click() ・・・☆ Exit Sub End Sub -------------------------------------------------- 表記のようなプログラムにしたところ、☆印のところで、 下記エラーが表示されてしまいます。 【エラー】--------------------------------------------------- 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 ------------------------------------------------------------- どのようにしたらCallステートメントで表示_Clickを呼び出すことが できるのでしょうか。

  • Excel VBAについて

    UserForm上に配置しているComboBox1はSheet3からデータを読み込んで表示するようにしているのですが、現在はComboBox1に直接手入力でもいれることができてしまいます。 これをできなくするのはどうしたらよいのでしょうか。

  • EXCEL_VBAでCheckBox等の未チェックをMsgBoxで返したい

    EXCEL VBAで入力フォームとして、UserFormにTextBox,ComboBox,OptionnButton,CheckBoxが複数配置してあり、 入力が完了したらCommandButtonをクリックし、テンプレートシートの 各セルに値が反映されるようなBookを想定しています。 ここでCommandButtonをクリックした時に、各入力・チェック項目が抜けている場合、MsgBoxで「○○○に入力漏れがあります」と再入力を促し、全て入力が完了した場合にテンプレートシート(ActiveSheet)に値が反映され、MsgBoxで「入力内容に間違いがなければ印刷、やり直す場合は修正して下さい」と表示させたいのですが、エラー処理ができず、ご教示願えればと思っております。 よろしくお願いします。

  • MSOffice2003_VBA

    MSOffice2003_VBA 最近ですがVBAを覚えようと勉強中の初心者の身です。 よろしくお願いします。 Sheet1にコマンドボタンを配置しました。 VBEでSheet1にUserform1をつくりました。 Sheet1のコマンドボタンを動作させるために、VBEの画面からSheet1を右クリックし コマンド画面を表示させましたがcommandbuttonの項目がありません。 いくつもcommandbuttonを作って上書き保存しましたが コマンド画面のコマンド指示の項目にはGeneralとwarksheetのみしか出ません。 Sheet1→挿入でフォームを作った画面のコマンドにはフォーム内に使用した 個々のボタン名がコマンド画面の上部にcommandbuttonとClickの2項目があります。 Sheet1のコマンド画面上部のプルダウンにcommandbuttonとClickを表示させる 方法を教えていただけませんか? 方法論がネット上で紹介してあるなら検索文字だけでもいいので教えてください。

  • VBA コマンドボタンのキャプション名を変更に

    お手数をおかけします。 実は、ExcelのUserformに設置されている『CommandButton』のキャプション名を自由に変更できる様にしたいと考えています。 内容は、Userform1に『CommandButton』が10個設置しています。その10個設置しているCommandButtonのキャプション名を変更できる様に、もう一つのUserform2の方に TextBox1とComboBox1を設置しComboboxで変更したいCommandButtonを選択しTextBox1に 変更したい名を入力しUserform2のCommandButton1=決定を押すと自在にUserform1のCommandButtonのキャプション名を 変更できる様にしたいのですが、どの様にしたらできますでしょうか? 宜しくお願いしますm(__)m

  • エクセル VBA コンボボックスの計算

    UserForm1上に コンボボックスには数字がリストされます! ComboBox1、ComboBox2、ComboBox3 3つ作成して 例えば ComboBox1=1 ComboBox2=0 ComboBox3=5 と表示された時 CommandButton1をクリックしたら UserForm2の TextBox1に”6”と足し算 された数字を表示したいのですが 普通のセルなら 出来るのですが・・ ComboBoxでするなら どのような記述に なるのでしょうか? すいません、教えて下さい!

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

専門家に質問してみよう