みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのブックを閉じるマクロについて

エクセルのブックAとブックBが開いている状態で、
ブックAのボタンに登録して実行すると、ブックAのみ閉じる、
というマクロを作りました。(下部にコードを記載します)

このマクロは、2つのブックが開いていると正常に稼働するのですが、
ブックが1つしかない場合、実行時エラーが出てしまいます。

(ブックAのみ開いた状態でこのボタンを押してもエラーなく閉じたい)

実行時エラーが出ないようにするにはどうすれば良いか、
おわかりの方がいらっしゃいましたら教えて下さい。

どうぞよろしくお願い致します。


Sub このブックのみ閉じる()
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

Range("D2").Select
Selection.ClearContents

ThisWorkbook.Close SaveChanges:=False
End Sub

投稿日時 - 2019-03-27 06:06:09

QNo.9600931

困ってます

質問者が選んだベストアンサー

私はこんな風に書いています。

'//------------------------------------------------------------------------------------------------
'// 自身を保存して閉じ、他にエクセルが動作していないなら、エクセルを終了する
'//------------------------------------------------------------------------------------------------
Sub EndJob()
 'ThisWorkbook.Activate
 ThisWorkbook.Save
 Application.WindowState = xlNormal
 If Application.Workbooks.Count = 1 Then
  'Application.DisplayAlerts = False
  'ThisWorkbook.Saved = True
  Application.Quit
 Else
  'Application.DisplayAlerts = False
  'Thisworkbook.Close (False)
  ThisWorkbook.Close
 End If
End Sub

投稿日時 - 2019-03-27 09:07:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こちらの環境だと動作自体はするけどメッセージが出てる、という感じなので下の形にしてエラーだけ無視するのが手っ取り早いですね。

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

あとわざわざFor Eachしなくても、Workbooks.Countでいいような。

投稿日時 - 2019-03-27 06:55:52

あなたにオススメの質問