Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
Application.DisplayAlerts について
投稿日時: 20/06/29 20:40:18
投稿者: shimoichimabu

以前、自宅のPC(Windows7、Excel2010)で作成したA.xls、B.xls、C.xlsを
会社のPCにコピーし、各ファイルのワークシートに「閉じる」ボタンを配置し、このボタンを押せば、下記プログラムが実行するようにしています。
各ファイルはあくまでも、ひな形であり、少し編集して印刷が終われば、ファイルはメッセージ無しで保存せずに終了したいです。
また、最後の1ファイルを閉じる時はExcel自体も終了したいです。
  
Private Sub 閉じるButton_Click()
 
 Application.DisplayAlerts = False
 
     If Workbooks.Count = 1 Then '自ファイルのみが開いている時
         Application.Quit
     Else '別のExcelファイルも開いている時
         ActiveWorkbook.Close
     End If
    
 Application.DisplayAlerts = True
 
End Sub
 
A.xls、B.xlsが開いていて、A.xlsを閉じ→B.xlsを閉じようとすると、
B.xlsの変更内容を保存しますか?
とメッセージが出ます。
なぜか、Application.DisplayAlerts = False が効いていない??
ただし、B.xlsで下記のようにStopをかけ、ステップマクロを実行すると、メッセージが出ず、Excel自体も希望通り、終了します。
 
Application.DisplayAlerts = False
 
    If Workbooks.Count = 1 Then '自ファイルのみが開いている時
        Stop
        Application.Quit
・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・
 
しかし、自宅のPC(Windows7、Excel2010)だと、B.xlsの変更内容を保存しますか?というメッセージはでないです。希望通りの動作をします。
謎です。

回答
投稿日時: 20/06/30 07:20:26
投稿者: WinArrow
投稿者のウェブサイトに移動

Application.DisplayAlerts = False
ではなく
次のようにすれば、「保存しますか?」メッセージは出なくなります。
  
Dim wbk as Workbook
   
 For Each wbk in Workbooks
     If wbk.Name <> ThisWorkbook.Name Then
          '強制的に上書き保存をせずに閉じます。
          wbk.Saved = True
          wbk.Close False
     End If
 Next
 ThisWorkbook.Saved = True
 Application.Quit
 
※自ブック以外、上書き保存吸うならば、
  wbk.Saved = True を wbk.Save に変更すればよいです。
 

投稿日時: 20/06/30 22:38:46
投稿者: shimoichimabu

WinArrowさん回答ありがとうございます。
 
.Saved = True を使えば、Application.DisplayAlerts なのですね。
 
提言されたコードで希望通り、実行できました。
 
ありがとうございました。