[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブックの[x]でエクセル終了を無効にしたい』(amaryllis)
会社で使用しているExcelはマクロが組み込んでおり、そのマクロで処理している。
で、Excelのファイルを開いている状態で、マクロにより「終了」ボタンで終了しているが、たまに間違えて右上の[x]をクリックしてしまった。
その時、マクロの関係で、他に開いていたExcelファイルが応答なしで強制終了してしまう。
そこで、右上の[x]を無効にするマクロを調べてみたら、
https://answers.microsoft.com/ja-jp/msoffice/forum/all/excel2010%E6%9C%80%E5%B0%8F%E5%8C%96%E6%9C%80/8c818442-048a-43d1-963d-e375daf383c9
↑
これを見つけた。
質問者が掲示したコード(回答者が回答したコードではない)をExcel2010の標準モジュールにコピペしました。
そのマクロで再度Excelファイルを開いて[X]ボタンは無効になったとは良いが、そのファイルを終了後、マクロを含んでないファイル(.xlsx)を開いても[X]ボタンは無効のままになっていました。
[X]ボタンを無効にするファイルだけにして、他のファイルは普通に[X]で終了したい。
もう1つは、マクロで無効にした[X]ボタンをクリックした時は、MsgBoxで「[X]ボタンで終了出来ません」とメッセージを出したい。
コピペで入れたマクロにMsgBoxを入れたら、[X]ボタンを押すまでもなく、そのファイルを開いた途端メッセージが出てしまう。
あと、そのマクロに対してはExcel2010でとなっていますが、うちの会社では、今年度中(来月?)に使用しているPCがWindows 7からWindows 10に変わる予定が入っており、Windows 10のOffice 2016になるので、Excel2016にも対応するマクロでお願いしたいです
< 使用 Excel:Excel2010、使用 OS:Windows7 >
マクロで無効にした[X]ボタンをクリックした時は、MsgBoxで「[X]ボタンで終了出来ません」とメッセージを出したい。
マクロでの[X]ボタンを無効はやめて、
ThisWorkbookのモジュールに下記のコードを記述。
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = True MsgBox "[X]ボタンで終了出来ません" End Sub
閉じるためのコマンドボタンのクリック時に下記のコードを。
Private Sub CommandButton1_Click() Application.EnableEvents = False Application.Quit End Sub
(hatena) 2019/01/23(水) 22:29
あと、
>閉じるためのコマンドボタンのクリック時のマクロ……。
↑
図形をボタンにして、閉じるためのマクロは、既に入っています。
(amaryllis) 2019/01/23(水) 23:51
ところが、
Private Sub Workbook_BeforeClose(Cancel As Boolean)
を回答してもらった通りに入れました。
再度、Excelを起動して、[X]ボタンをクリックしてみたら、MsgBoxが2回表示されてしまいます。
[X]ボタンをクリックでMsgBoxを1回だけ表示されるようにするにはどうしたら良いでしょうか?
(amaryllis) 2019/01/24(木) 13:17
私の提示したコードは、ブックが閉じるときに発生するイベントをキャンセルして閉じないようにしています。
そして、閉じるためのコマンドボタンでのみ閉じることができるようにしています。
ですので、Workbook_BeforeClose は私の回答のコードだけにしてください。
現状のWorkbook_BeforeCloseのコードは、閉じるボタンの方へ移動してください。
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = True MsgBox "[X]ボタンで終了出来ません" End Sub
Sub 終了() Application.DisplayFullScreen = False Call 他のマクロ Application.EnableEvents = False 'イベント抑制、これがないとWorkbook_BeforeCloseが発動する ActiveWorkbook.Close False Application.EnableEvents = True 'イベントを許可 End Sub
また、右上の[x]を無効にするマクロは不要になりますのですべて削除してください。
[x]を無効にしても、Alt+F4 や タスクバーから閉じることはできますので、あまり意味がないかと。
(hatena) 2019/01/24(木) 13:50
あと、
>[x]を無効にしても、Alt+F4 や タスクバーから閉じることはできますので、あまり意味がないかと。
↑
確かそうですね。
うちの会社の職制たちがデータを見るんで、あまりもAlt+F4 や タスクバーから閉じる職制はいないと思います。
一応、2番目の[x](1番目の[x]がActiveWorkbook.Close False)をクリックしてみると、保存しますか?というダイアログ画面が出ました。
まあ、今回の件の追加質問ではなく、気になっていたので、クリックしてみた。
1番目の[x]がActiveWorkbook.Close Falseだけど、(←Excel2016も?)
2番目の[x]って、マクロあるのかな(今使用のExcel2010のみ?)?
気になって質問しました。すいません。
(amaryllis) 2019/01/24(木) 20:59
複数のブックを開いているということでしょうか。
ActiveWorkbook というのは文字通りアクティブなブックということです。
[x]をクリックしたらそのブックがアクティブになります。
そして、そのブックが閉じられようとして、 Workbook_BeforeCloseイベントが発生します。
そのブックのWorkbook_BeforeCloseにコードが記述されていたら、そのコードが実行されます。
Cancel=True と記述されていたら、閉じるイベントがキャンセルされて、閉じられないようになります。
そのブックにWorkbook_BeforeCloseのコードがなければ何も起こりません。そのまま閉じられます。
こんな説明で理解できましたか。
(hatena) 2019/01/25(金) 00:47
Excel2016は最小化、最大化、[X]が1つずつですが、Excel2010は2つずつあるでしょう。その事です。
(amaryllis) 2019/01/25(金) 05:20
2010はないので、動作確認できませんが、
どちらをクリックしても "[X]ボタンで終了出来ません" メッセージができて閉じることができないように思いますが、閉じてしまうということですか。
複数のブックを開いていたら、他のブックは閉じられるかもしれませんが、Workbook_BeforeClose に Cancel=True があるブックは閉じられないはずだと思います。
実物がないので私には確認しようがないですが。
(hatena) 2019/01/25(金) 09:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.