dポイントプレゼントキャンペーン実施中!

Excel VBAで単一ブックで複数のウィンドウを開いている時、その片方を閉じるイベントは

Sub Workbook_WindowDeactivate(ByVal Wn As Window)

End Sub

で、良いのでしょうか。

単一ブックで複数のウィンドウを開いている時は、エクセル本体の右上×をクリックすると1つずつしかウィンドウが閉じず、面倒なので、1つ閉じたらエクセル自体(若しくはブック一つ)が閉じるようなプロシージャを組みたいのです。

よろしくお願いします。

A 回答 (4件)

こんにちは。

お邪魔します。

なんて云うか、
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さんのご提案の方が合理的ですよね。

ご参考まで。
    • good
    • 0

途中から失礼します。

#参考情報として。

2007,2010では、
[Application.ShowWindowsInTaskbar プロパティ]の設定によって挙動が違います。
Excelのオプション-詳細設定-「すべてのウィンドウをタスクバーに表示する」項目です。
デフォルトではチェックが入って True になっています。
この状態ではApplicationウィンドウ右上の×ボタンで複数ウィンドウを閉じる動作になりません。
このチェックを外すと2003以前のバージョンと一緒で複数ウィンドウを閉じExcel終了の動作になります。
(複数Bookの場合も同様)

もし、「面倒」を解消させたい個人的事情なら、「すべてのウィンドウをタスクバーに表示する」
この項目のチェックを外すだけで良いかもしれません。

また、作業中は全ウィンドウをタスクバー表示させたいのでチェックを外したくないなら、
終了時に[Shift]キー押しながらApplicationウィンドウ右上の×ボタンでExcel終了の動作になります。


あくまで参考です。
複数BookのケースでもExcel終了の動作になりますので ThisWorkbook.Close の要望からは外れますし。
プロシージャを組みたい、という事なのでcj_moverさん案おすすめです。 :)
    • good
    • 0

No.1です。



私が回答した方法は、Windowをいくつ開いていても一発で閉じる(終了する)方法です。

>単一ブックで複数のウィンドウを開いている時は、エクセル本体の右上×をクリックすると1つずつしかウィンドウが閉じず、面倒

とあったので、このように回答した次第です。

エクセル本体の×ボタンで閉じたいということでVBAで行いたいということなのでしょうか?

うーん、通常(Windowが一つの時)×ボタンのイベントは「Workbook_BeforeClose」なのですが、複数のWindowを開いていると発生しないようです。

ですので、簡単にはできないように思います。私ではわかりません、すみません。

でも、面倒というだけであれば、先に回答した方法でいいのではないでしょうか。
    • good
    • 0

こんばんは。



手元にあるエクセルがバージョン2010なので、それで回答します。

WindowDeactivateイベントは「Windowがアクティブでなくなった時」に発生するイベントです。
Windowを閉じた時に発生ししますが、それ以外でもほかのWindowが」アクティブ(移ったとき)になったときにも発生します。

エクセルを残してブックを閉じるのなら、ファイルタブ→閉じる でできます。

エクセルを終了するのなら、ファイルタブ→終了 でできます。

バージョン2007なら、オフィスボタンの中にあると思います。

この二つを「クイックアクセスツールバー」に登録しておけばいいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。

私は、単一ブックで2つのウィンドウを開いている時にエクセル本体の右上×をクリックして、1つのウィンドウを閉じたらエクセル自体(若しくはブック一つ)が閉じるようなプロシージャを組みたいのですが、こういうことって可能なのでしょうか。

お礼日時:2013/05/14 00:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています