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 テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
-
4
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
5
UserForm1.Showでエラーになります。
工学
-
6
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
7
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
10
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
11
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
12
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
13
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
14
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
15
テキストボックスのフォーカスの判定
Visual Basic(VBA)
-
16
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
17
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
18
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
19
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
20
エクセルVBA 別シートの複数のセルの値をコピーする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
エクセルのVBAコードについて教...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBA コードを実行すると画面が...
-
Excel-VBAでのファイルの開き方
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】インデックスが有...
-
Excel2007VBAファイルの表示に...
-
VBA 実行時エラー 2147024893
-
VBSでExcelのオープン確認
-
別ブックからの取込み保存エラー
-
VBA 別ブックからコピペしたい...
-
Workbooks(workbooks.count)に...
-
転記先VBA 一致しているセルが...
-
複数ファイルのシートを1つにま...
-
Excelのマクロコードについて教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
vbaでvbaProjectのパスワード解...
-
VBA コードを実行すると画面が...
-
【マクロ】アクティブセルにブ...
-
Excelのマクロについて教えてく...
-
VBAで別のブックにシートをコピ...
-
VBS Bookを閉じるコード
-
Excelのマクロについて教えてく...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
ACCESSVBA からExcelの他ブック...
-
vbaで他のブックに転記したい。...
-
【マクロ】違うフォルダにある...
おすすめ情報