[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブックを閉じると他のブックで表示したフォームも閉じてしまう。』(もね)
【前提】
book1で以下のようにUserForm1を表示しています。
book1を起動するとbook1は最小化され、UserForm1が表示されます。
Private Sub Workbook_Open()
Application.WindowState = xlMinimized UserForm1.Show vbModeless End Sub
【問題事象】
まったく関係のないbook2を開いてから、book1を起動すると、book1は
最小化され、book2の上にUserForm1が表示されます。
ここで、book2を×ボタンで閉じると、UserForm1も閉じてしまいます。
(book1は最小化されたまま残ります。)
【解決したい内容】
book2を閉じてもUserForm1が閉じないようにするにはどのようにしたら
よいのかご教授ください。
因みに、book2を閉じる際、UserForm1にCloseMode=5でQueryClose
イベントが発生しますが、Cancel=1としてもUserForm1は閉じてしまいます。
book2はユーザの任意のブックを想定していますので、book2にコードを
書き込むことによる対処はできません。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
そして、Book2を閉じようとして、Excel自体を終了させていたりしないでしょうか? または、Book2を閉じる際にもマクロを使っていて、中で End を使って強制終了していないでしょうか? End で終わらせると、QueryCloseイベントを通らずに、フォームは強制的に閉じられてしまいますよ。
あとは念のための確認ですが、QueryCloseイベントで対策したのは、閉じたくないフォームのある、book1のマクロですよね?
(???) 2018/12/19(水) 11:25
>CloseModeに5が返っている、というのがよく判らないです。Excel2010までは3までしか無かったし、MSの今年の情報でも3までなんですよね。
→
オブジェクトブラウザーでvbQueryCloseのメンバーを確認すると以下の5つが
定数定義されていますが、5はありません。
ただ、実際にMsgBoxでCloseModeを表示させたところ、5が表示されました。
vbFormControlMenu = 0
vbFormCode = 1
vbAppWindows = 2
vbAppTaskManager = 3
vbFormMDIForm = 4
>そして、Book2を閉じようとして、Excel自体を終了させていたりしないでしょうか? または、Book2を閉じる際にもマクロを使っていて、中で End を使って強制終了していないでしょうか? End で終わらせると、QueryCloseイベントを通らずに、フォームは強制的に閉じられてしまいますよ。
→
book2にマクロはありません。×ボタンで閉じています。book1は閉じず、book1で表示したUserForm1がとじてしまいます。
>あとは念のための確認ですが、QueryCloseイベントで対策したのは、閉じたくないフォームのある、book1のマクロですよね?
→
はい。
(もね) 2018/12/19(水) 11:48
「ThisWorkbookモジュール」に
Private Sub Workbook_Open() Application.WindowState = xlMinimized UserForm1.Show vbModeless End Sub
Public Sub showAgain() Workbook_Open End Sub
「Userformモジュール」に
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 5 Then Application.OnTime Now, ThisWorkbook.Name & "!ThisWorkBook.showAgain" End If End Sub
※ 将来、バグが修正された後、どうなるのか分かんないですけども・・
(半平太) 2018/12/19(水) 15:13
ご返答ありがとうございます。
こんなやり方があるんですね。勉強になります。
(もね) 2018/12/19(水) 15:59
役に立つかどうか、これに該当するか分からないけど、 見つけたので4と5だけ貼っておきます
QueryUnload Event https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa445536(v=vs.60)
Return Values
The unloadmode argument returns the following values:
Constant Value Description vbFormMDIForm 4 An MDI child form is closing because the MDI form is closing. vbFormOwner 5 A form is closing because its owner is closing.
(2u) 2018/12/19(水) 18:53
この説明を見ると、やっぱり今回の動作はちょっとおかしいかと思えます。
UserForm1のownerがbook2になっているような・・・
参考にさせていただきます。
みなさまありがとうございました。
(もね) 2018/12/20(木) 17:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.