
UserForm1とUserForm2の2つのユーザーフォームがあります。
UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。
(ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています)
UserForm1の方に、
Private Sub CommandButton1_Click()
UserForm2.Show 0
Unload UserForm1
End Sub
UserForm2の方に、
Private Sub CommandButton1_Click()
UserForm1.Show 0
Unload UserForm2
End Sub
と記述してあります。
ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ActiveWorkbook.Save 'ブックを保存
ActiveWorkbook.Close 'ブックを閉じる
Application.Quit 'excelを終了
End If
End Sub
というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。
右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか?
宜しくお願いします。(*´Д`人)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。
>右上の「×」を押したときだけブックを閉じるようにしたいのですが
QueryCloseイベントプロシージャ
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
これを見て、何故、引数Cancel、CloseModeを調べてみないのですか?
答えは、そこにあるのですよ。
と、偉そうなことを言ってみる、、(^^;;;
詳しくはヘルプを見てください。
UserFormの閉じるボタンを押してUserFormを閉じるときは、
QueryCloseイベントの引数CloseModeが0となりますので、
それをきけばいいわけです。
'-------------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
ActiveWorkbook.Save
Application.Quit
ActiveWorkbook.Close
End If
End Sub
'--------------------------------------------------
そしてまた、Application.Quitは、ActiveWrokbook.CLoseより先におかないと、ブックは終了しますが、エクセルは終了しません。
それから、
Private Sub CommandButton1_Click()
UserForm2.Show 0
Unload UserForm1
End Sub
これでは、
Unload UserForm1
Userform2.Show 0
と、Unloadから先に書く癖をつけておきましょう。
理由?
勉強しているうちに分かるでしょう。
以上。
No.3
- 回答日時:
何か適当な機会(または初期化で)に
Sub test01()
Load UserForm1
UserForm1.Show
End Sub
ーー
Userform1のコマンドボタン1の
Private Sub CommandButton1_Click()
Me.Hide
UserForm2.Show vbModeless
End Sub
ーー
Userform2のコマンドボタン1の
Private Sub CommandButton1_Click()
UserForm1.Show vbModeless
Me.Hide
End Sub
でそれぞれのコマンドボタンクリックでを行うと、フォームを交互に何度も表示が入れ替わりましたが。
なぜ毎回Unloadする必要があるのですか。
1時的に書いて見てもらう黒板と思って毎回それぞれのフォームに表示する前にプログラムで内容を細工すれば良いと思いましたが。
Unloadは全ての処理処理終了の直前にする。
思い違いでしょうか。
この回答への補足
VBAを勉強し始めて数ヶ月の初心者なので
正直な話、Load ~/~.Show の違いや、Unload ~/~.Hide の違いが
よくわかっていないのです。ネットで調べながら書いたコードなので
「なぜ毎回Unloadする必要があるか」はわかりません。
もしよければ、上記の詳しい使い方や使い分けを教えていただけないでしょうか?
宜しくお願いします。
No.2
- 回答日時:
UserFormのInitializeイベントを毎回処理しなくてもいいなら
UserForm2.Show 0
Me.Hide
といった具合で 自分自身を非表示にする事で QueryCloseへ飛ばなくてすみますよ
No.1
- 回答日時:
フラグを使用して制御してあげると実現可能です。
(他にもっと良いやり方があるかもしれませんが・・・)
・標準モジュールへグローバル変数を用意する
Publc lngFlg as Long
・UserForm1
Private Sub UserForm_activate()
'フラグ初期化
lngFlg = 0
End Sub
Private Sub CommandButton1_Click()
'フラグ設定
lngFlg = 1
Unload UserForm1
UserForm2.Show 0
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If lngFlg = 0 Then
ActiveWorkbook.Save 'ブックを保存
ActiveWorkbook.Close 'ブックを閉じる
Application.Quit 'excelを終了
End If
End Sub
・UserForm2
Private Sub UserForm_activate()
'フラグ初期化
lngFlg = 0
End Sub
Private Sub CommandButton1_Click()
'フラグ設定
lngFlg = 1
Unload UserForm2
UserForm1.Show 0
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If lngFlg = 0 Then
ActiveWorkbook.Save 'ブックを保存
ActiveWorkbook.Close 'ブックを閉じる
Application.Quit 'excelを終了
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
7
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
8
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
9
別のユーザーフォームのコマンドボタンを押す
Visual Basic(VBA)
-
10
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
11
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
12
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
13
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
14
Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。
Visual Basic(VBA)
-
15
VBAでのユーザフォームの表示有無の確認について
Visual Basic(VBA)
-
16
エクセルVBA オプションボタンのチェックを外したい
Excel(エクセル)
-
17
エクセルVBA/マルチページ/ページ切り替え時
Access(アクセス)
-
18
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
19
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
20
Excel-VBA>コントロールをグレイアウトするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルのマクロを使ってメー...
-
VBA 別ブックからコピペしたい...
-
[Excel]ADODBでNull変換されて...
-
別ブックをダイアログボックス...
-
エクセルVBA→他ブックを参照し...
-
エクセルVBAが途中で止まります
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
Excel2007でBOOK間のシート移動...
-
相対パスでExcel Bookのオープン
-
VBAで複数のブックを開かずに処...
-
VBAで別のブックにシートをコピ...
-
Excel2007VBAファイルの表示に...
-
Excel VBAマクロで複数のファイ...
-
EXCEL→CSV形式で別ファイルに保存
-
ExcelVBA:すでに開かれている...
-
マクロVBA 1シートをまとめ...
-
VBA 二つのブックをうまく扱え...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
複数のエクセルファイルとシー...
おすすめ情報