![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
こんにちは。
お邪魔します。なんて云うか、
Excel.Window操作に関するイベントは限られていて、
何をするにしても工夫がいるというか融通が利かないというか、、、。
この課題の本質は、
Applicationを閉じるボタンへのクリックをトリガに出来れば、
後は簡単なのに、ってところですね。
やれば出来ないこともないでしょうけれど、
もはやVBAとは呼べない程の高度な内容になるかと思います。
Version互換(Win/Excel)の問題も手数が必要そうですし、
結構大変そうなので、私は、お手上げです。
多少、限定的で簡略化したものなら、純粋なVBAで出来ます。
Workbook_WindowDeactivate
の、後に続けて、
Workbook_WindowActivate
が、必ず発効することを利用して、
Windows.Count
が、減少なら、閉じる。
' ' ==========ThisWorkbookモジュール==========
Private nWin As Long
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
If Windows.Count < nWin Then
Application.Quit ' ' EXCELを終了する場合(1/2択)
' ThisWorkbook.Close ' ' 自ブックのみ閉じる場合(2/2択)
End If
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
nWin = Windows.Count
End Sub
' ' ===============================
限定的という意味は、
ウィンドウ側の閉じるボタンでウィンドウを(非表示ではなく)閉じる
場合にも、
ブックを閉じる(またはExcelを終了する)ように動作してしまうことです。
しかし、ウィンドウ表示の設定を変更する場合は、
デザインモードを使うようにすれば困ることもないです。
それでいいかどうかの判断は、現場次第ですけれども。
とりあえず試してから検証検討してみてください。
他に、
閉じるボタンを覆うように専用のボタンを配置しておく
ような方法もありかも知れませんが、
それなら、#1さんのご提案の方が合理的ですよね。
ご参考まで。
No.4
- 回答日時:
途中から失礼します。
#参考情報として。2007,2010では、
[Application.ShowWindowsInTaskbar プロパティ]の設定によって挙動が違います。
Excelのオプション-詳細設定-「すべてのウィンドウをタスクバーに表示する」項目です。
デフォルトではチェックが入って True になっています。
この状態ではApplicationウィンドウ右上の×ボタンで複数ウィンドウを閉じる動作になりません。
このチェックを外すと2003以前のバージョンと一緒で複数ウィンドウを閉じExcel終了の動作になります。
(複数Bookの場合も同様)
もし、「面倒」を解消させたい個人的事情なら、「すべてのウィンドウをタスクバーに表示する」
この項目のチェックを外すだけで良いかもしれません。
また、作業中は全ウィンドウをタスクバー表示させたいのでチェックを外したくないなら、
終了時に[Shift]キー押しながらApplicationウィンドウ右上の×ボタンでExcel終了の動作になります。
あくまで参考です。
複数BookのケースでもExcel終了の動作になりますので ThisWorkbook.Close の要望からは外れますし。
プロシージャを組みたい、という事なのでcj_moverさん案おすすめです。 :)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?5a7ff87)
No.2
- 回答日時:
No.1です。
私が回答した方法は、Windowをいくつ開いていても一発で閉じる(終了する)方法です。
>単一ブックで複数のウィンドウを開いている時は、エクセル本体の右上×をクリックすると1つずつしかウィンドウが閉じず、面倒
とあったので、このように回答した次第です。
エクセル本体の×ボタンで閉じたいということでVBAで行いたいということなのでしょうか?
うーん、通常(Windowが一つの時)×ボタンのイベントは「Workbook_BeforeClose」なのですが、複数のWindowを開いていると発生しないようです。
ですので、簡単にはできないように思います。私ではわかりません、すみません。
でも、面倒というだけであれば、先に回答した方法でいいのではないでしょうか。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?5a7ff87)
No.1
- 回答日時:
こんばんは。
手元にあるエクセルがバージョン2010なので、それで回答します。
WindowDeactivateイベントは「Windowがアクティブでなくなった時」に発生するイベントです。
Windowを閉じた時に発生ししますが、それ以外でもほかのWindowが」アクティブ(移ったとき)になったときにも発生します。
エクセルを残してブックを閉じるのなら、ファイルタブ→閉じる でできます。
エクセルを終了するのなら、ファイルタブ→終了 でできます。
バージョン2007なら、オフィスボタンの中にあると思います。
この二つを「クイックアクセスツールバー」に登録しておけばいいでしょう。
ありがとうございます。
私は、単一ブックで2つのウィンドウを開いている時にエクセル本体の右上×をクリックして、1つのウィンドウを閉じたらエクセル自体(若しくはブック一つ)が閉じるようなプロシージャを組みたいのですが、こういうことって可能なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
XL:BeforeDoubleClickが動かない
その他(プログラミング・Web制作)
-
VBの画面で、全ウィンドウを一気に閉じるには
Visual Basic(VBA)
-
-
4
エクセルで作った新しいウインドウを削除するには・・・
Excel(エクセル)
-
5
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
6
エクセルVBAで配列内に空白データを入れる場合
その他(Microsoft Office)
-
7
excel シート上のボタンが動かない
Visual Basic(VBA)
-
8
指定の動作中ユーザーフォーム終了方法
Excel(エクセル)
-
9
エクセルVBAでUserFormを起動した時
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
作成したウインドウのサイズを...
-
VBで外部プログラムを位置のみ...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
ダイアログをスクロールさせるには
-
アクティブウインドウのIME...
-
勝手にウィンドウが開いて止ま...
-
【VB2008】 マウス操作の一時的...
-
最大化と最小化ボタン
-
他のアプリケーションの終了処理
-
c++/cli .NET Formアプリケー...
-
ラジオボタンの初期指定
-
ExcelのBOOKが消えた!
-
リモートデスクトップの中のウ...
-
VBA SendMessage 無限ループに...
-
メッセージをスルー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
Alt+P,Alt+NをPostmessageで送...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報