Excel VBA、自分は終了しても他を閉じない

Excel VBAの話。バッチと組み合わせて自動的に処理をするExcel VBAのとき、終了時に自分を終了すると、その時に開いていた別のExcelの変更を保存するかしないかきいてくる。そうすると、ユーザーは保存しようか保存しないか迷うし、このときのダイアログに[キャンセル]を選んでしまうと、自動的に実行していたExcel VBAがシートを無様に開けたまま停止していまう。

人物A「製作段階でも人物Bと検討したのですが、解決策が見当たらないのですよ」
人物A「実行中は他のExcelを使わない、っていう決まりが別のExcel操作でありましたよね」

な〜んて、会話がユーザーデモの会議で交わされたいた。




会議中に「?」と思ったが、黙っていた。
自分では別のExcel VBAで、他のExcelを閉じず自分のみ閉じる仕様を実現していたから。
でも、人物Aは出来ないって自信満々(?)にユーザーに説明していたし、作成した人物Bと検討したというし、それならそうなんだろう。人物BはExcel VBAに自信あるっていうし。前に自分が実現したのと実行条件が違うかもしれないし。




でも、一日経っても、自分のコーディングとどう違うのかが気になる。

お節介がしたくなる〜




誘惑に耐え切れず、問題のExcel VBAを開いてみた。





終了時のコーディングは…

Workbooks("sample.xls").Save


なるほど…




そこで、この1行を

Workbooks("sample.xls").Close SaveChanges:=False

と変更してみた。(自分自身は保存しなくても良いので。)



そして、他のExcelを開いておいて、実行。
結果は、コードのとおり自分自身のみ終了する…って、出来てるじゃん!?




人物Aに「他が開いていても自分自身だけ終了できますよ」って話したら、
「自分だけのときExcelが起動したままにならない?Excel自体も終了しないと。」

ホレミロ!感アリアリで返事をしてきた。
確かに、Excelは起動したままだが…



ホレミロ!感アリアリで
ソンナコトハ、人物Bト、ケントウズミダヨ〜
って気持ちが言葉の端に乗ってくる。




お節介しなければよかったという後悔のあと、フツフツとアドレナリンが沸いてきた!





絶対出来るハズ!超集中!!!





で、追加修正したコードが概ね次のとおり。


Dim wa As String

wa = "ほかに無い"

Dim wb As Workbook

For Each wb In Workbooks
    If wb.Name <> ThisWorkbook.Name Then
        wa = "ほかにあるよ"
    End If
Next

If wa = "ほかに無い" Then
    Application.DisplayAlerts = False
    Application.Quit                    '終了予定
End If

Workbooks("sample.xls").Close SaveChanges:=False


簡易テストでは良好だった。人物Bに戻して(説明して)しっかりテストしてもらおうっと。




(2019/05/05追記)
VBA 開いているファイルだけ終了
で検索して訪問される方がいらっしゃるようです。ありがとうございます。
この記事が参考になっているのならばよろしいのですが笑