• ベストアンサー

ExcelVBAで指定外のUserFormを閉じる

複数のUserFormを表示させた時に、 コードで指定したUserForm以外のUserFormを閉じる方法を教えてください。 Unload UserForm1、Unload UserForm2、Unload UserForm3 このような方法では、手間がかかってしまいます。 何か良い方法がありましたら教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

はて?? >3つのUserFormを表示させた場合、 >1つのUserFormを画面上に残した状態で、残りの2つのUserFormを閉じる方法 回答したマクロがまさにそのように作動しますが、いったいどういう事でしょうか。 回答のマクロをまだ試してもいないのですか? それから意味が通じていないようなので、一応補足しておきます。 再掲: >どこから実行したいのか不明 何らかの方法でユーザーフォームを3つとか表示させてます ここから「どこに記載したマクロを実行して」要らない2つをアンロードしたいのですか。 ・たとえば標準モジュールに記載したマクロを新たに実行する(回答は基本このパターンを想定しています) ・たとえば3つ開いているユーザーフォームのどれかに載っている、たとえばコマンドボタン等から実行する  その場合、残したいユーザーフォームと、いままさにボタンをクリックしたユーザーフォームの関係はどうなっているのですか。 ・たとえば「コマンドボタンがクリックされたそのユーザーフォーム」が残って欲しくて、他を閉じたいのか ・たとえば「どのユーザーフォームのボタンをクリックしても関係なし」に、特定の1つのユーザーフォームを残したいのか #でもまぁ、すでに2回も回答してますので、これ以上はあんまり回答を重ねるのは、こちらも大変ですしあなたも説明するのはメンドクサイでしょう。 まず自力で適切に応用してみて、それでも上手くいかないようなら一回このご相談は「解決」の操作で閉じて、改めて詳しい状況を添えてご相談を新たに投稿し直してみてはいかがですか。

di6351
質問者

お礼

大変申し訳ありません。 ご説明の通りUserForm1を残した状態で、他のUserFormを閉じる事が出来ました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

どこから実行したいのか不明ですが,とりあえず  dim o as object  for each o in userforms  if o.caption <> "UserForm1" then   unload o  end if  next みたいなカンジで,ふつーに巡回してけばいいのでは。

di6351
質問者

補足

説明が足らず、申し訳ありません。 例えば、3つのUserFormを表示させた場合、 1つのUserFormを画面上に残した状態で、残りの2つのUserFormを閉じる方法があればと思いました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのマクロでUserForm1を作って下記のようなコードを実行す

    エクセルのマクロでUserForm1を作って下記のようなコードを実行すると UserForm1を一瞬だけ表示して消えるのかと思ったのですが、表示されたまま消えません。 Unload UserForm1のところを UserForm1.Hideにしても同じです。 表示されたUserForm1を閉じるにはどうしたらよいですか。 Sub test() UserForm1.Show Unload UserForm1 End Sub

  • Excel97マクロのUserForm

    Excel97でUserFormを表示して 消すのにUnloadでは消えてくれません UserForm.show 処理1 処理2 unload UserForm としているのですが、なぜかUserForm.showで 止まったまま制御が流れません ちょっと教えていただけるとうれしいです

  • UserFormコレクション

    UserForm1内に配置されたコントロールを操作するのに、UserForm2を使うことは有りますか。 コレクションで指定する時に・・・UserForm1.Controls("OptionButton1").Value等。 学習教材で、画像はUserForm1だが、コードにはUserForm2と有る。 どうぞ宜しくお願いします。

  • Visual BasicのUserFormが閉じづらい

    Excel2000,VisualBasicのUserFormの閉じ方で困っています。 マクロ起動中にUserForm1.Show,UserForm1.Hide,UserForm2.Show,UserForm2.Hideを 何度も繰り返していると、同じUserFormが重複してメモリーに残っている 状態で、閉じるために「×」を何度もクリックしています。 作業を長時間するとフリーズ状態もしくはエラーになります。 尚、Load.Unloadでも同じ結果になりました。 どなたか解決方法を教えてください、宜しくお願いします。

  • userformの表示位置について

    userformを表示し、 マウスで位置を動かし、その位置を調べてプロパティ(top,left)を変更しています。 そしていったんunloadして、再度表示すると、 変更したプロパティが最初に戻ってしまっています。 コレはどうすることも出来ないのでしょうか。 移動させた位置を別保存し、 次回のshow時にそれを読み込むことでは解決できますが、 プロパティーを変更したときの値を保存しておく(初期化させない)ことがやりたいのですが。 宜しくお願いします。

  • エクセルのuserform1上に、コントロールボタンを配置し、コントロ

    エクセルのuserform1上に、コントロールボタンを配置し、コントロールボタン上にカーソルを持っていくと、 別のuseruform2が表示されるようにしたいのですが、 コントロールボタンを消すときに、userform1が白抜きになってしまいます。 きれいにuserform2を消す方法をおしえてください。 Private Sub UserForm1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Unload userform2 End Sub

  • 8つのコマンドボタン上にそれぞれマウスカーソルを置くと、userfor

    8つのコマンドボタン上にそれぞれマウスカーソルを置くと、userform1~8(図)が表示されるようにしております。 そして、Label上にマウスカーソルを置くと、表示中のuserformが消えるようになっております。 しかし、たまにですが、 > エラー番号:50290 > "アプリケーション定義またはオブジェクト定義のエラーです。" が表示されてしまい。 下記マクロのunload userform1でとまってしまいます。 なぜなのでしょうか。 Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Unload userform1 Unload userform2 Unload userform3 Unload userform4 Unload userform5 Unload userform6 Unload userform7 Unload userform8 End Sub

  • ExcelVBA ユーザーフォーム間の変数について

    UserForm1のコントロールボタンbtn1又はbtn2をクリックするとUserForm2を開く。 UserForm1にはテキストボックスtxtN1、txtN2がある。 UserForm2のテキストボックスtxtN3に入力された値をbtnDecideをクリックすると、 UserForm1に自動入力するようにする。 その際btn1をクリックしてUserForm2を開いた場合はtxtN1に、btn2をクリックして開いた場合は txtN2に自動入力されるようにする。 以下のようにコードを組んでみました。 UserForm1のコード Public Number as integer Private Sub btn1_Click() Number = 1 UserForm2.Show End Sub Private Sub btn2_Click() Number = 2 UserForm2.Show End Sub UserForm2のコード Public Number as integer Private Sub btnDecide_Click() If Number = 1 Then UserForm1.txtN1 = txtN3.Text else:Number=2 UserForm1.txtN2= txtN3.Text End If Unload Me End Sub 以上になります。 どうもpublic 変数NumberがUserForm2を開いた段階でリセットされているようなのです。 何かいい方法はありますでしょうか。 教えていただける方がいましたらよろしくお願い致します。

  • MsgBoxの表示について

     ユーザーフォームのチェックボックスの選択後(複数選択可)コマンドボタンのクリックで各チェックボックスのマクロを実行するようにしていますが、下記コードだとマクロの実行後もMsgBoxが表示されてしまいますが(当たり前ですが)、これをコマンドボタンのみをクリックした場合のみMsgBoxを表示させることは可能でしょうか?お教え下さい。 Windows7・SP1 Office2010・SP2 Private Sub CommandButton1_Click() Sheets("編集").Select If CheckBox9 Then Unload UserForm6 変更後編集データの保存 End If If CheckBox10 Then Unload UserForm6 変更前編集データの保存 End If If CheckBox11 Then Unload UserForm6 指定勤務有あり編集データの保存 End If If CheckBox12 Then Unload UserForm6 指定勤務有なし編集データの保存 End If If CheckBox2 Then Unload UserForm6 日付データの保存 End If If CheckBox3 Then Unload UserForm6 個人情報の保存 End If MsgBox ("保存する編集データを選択してください。"), vbExclamation End Sub

  • UserFormをサブルーチンに出来るか

    頓珍漢な質問かもしれませんが、何分ご了承下さい。 標準モジュールで記述時、UserFormをサブルーチンとして呼び出す事は出来ないですか。 プログラムの途中に、複数項目を入力させたいのです。 InputBoxは一つしか入力させられない様だから、UserFormならと、思ったのですが。 Private付プロシージャは、同じモジュールのプロシージャからしか呼び出せないのでしょうか。 宜しくお願い致します。

専門家に質問してみよう