Excel (VBA)

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

 
(指定なし)
名前を付けてブック保存後、Excelを終了しても空のブック(枠だけ)が残る
投稿日時: 22/01/19 16:30:10
投稿者: FANFAN

Excelバージョンですが、Office 365 を使用しています。
 
VBAでActiveなブック(自分自身)を名前を付けて別なフォルダに保存して、自分自身をCloseするようにしました。
それぞれのフォルダには正常に保存されますが、その後ブック最上段に表示されるブック名が Excel 、シートのないい空のブックが残ってしまい毎回、閉じるボタンをクリックしなければならず困っています。
念のために ActiveWorkbook.Close ActiveWindow.Close Application.Quit を2回指定しても結果は同じです。
 
ご教示お願いいたします。
 
下記は、実際のマクロです。
 
Sub 保存処理()
    このブック = ActiveWorkbook.Name
    Set ws日報 = Workbooks(このブック).Worksheets("作業日報")
    Set ws制御 = Workbooks(このブック).Worksheets("制御")
    ws日報.Activate
    ws日報.Unprotect 入力フォルダ = ws制御.Range("D4").Value 'このブックの保存先
'バックアップファイルの作成 (同名ブックが有れば上書き保存)
    対象日付 = ws日報.Range("C2") '例 2022/1/18
    日報日付 = Format(対象日付, "yyyy年mm月dd日")
    保存年月 = Format(対象日付, "yyyy年mm月")
    保存フォルダ = ws制御.Range("D5").Value & "\" & 保存年月 & "\"
    保存ブック名 = 日報日付 & "_作業日報_" & Range("EA3").Value & ".xlsm"
' Range("EA3").Valueには社員名が入力されています
     
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=入力フォルダ & "\" & このブック, _
             Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
             False, CreateBackup:=False
    ActiveWorkbook.SaveAs Filename:=保存フォルダ & "\" & 保存ブック名, _
             Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
             False, CreateBackup:=False
    Application.DisplayAlerts = False
    ActiveWindow.Close
       
    ActiveWorkbook.Close '閉じる
    ActiveWindow.Close
    Application.Quit 'Excelを終了する
     
    ActiveWorkbook.Close '閉じる
    ActiveWindow.Close
  Application.Quit 'Excelを終了する
 
End Sub
 
以上です。宜しくお願いいたします。
 

回答
投稿日時: 22/01/19 17:35:22
投稿者: taitani

Application.DisplayAlerts = False
ActiveWindow.Close
になっていますが、"Application.DisplayAlerts = True" ではないでしょうか。
※ なんか裏でエラーが発生しているかもしれません。

回答
投稿日時: 22/01/19 17:38:59
投稿者: taitani

あと、
Set ws日報 = Workbooks(このブック).Worksheets("作業日報")
Set ws制御 = Workbooks(このブック).Worksheets("制御")
 
を記載しているのであれば、
Set ws日報 = Nothing
Set ws制御 = Nothing
 
をしましょう。
※ 余計なメモリを解放など。
・参考資料
http://rucio.a.la9.jp/main/technique/teq_15.htm

回答
投稿日時: 22/01/19 17:45:15
投稿者: QooApp

Application.Quitって多重使用できましたっけ?
アクティブブックから閉じる処理を数回行う場合って、最後に1回だけApplication.Quit記述すればよいのでは?
間違ってたらごめんなさい。

回答
投稿日時: 22/01/19 17:47:29
投稿者: めんたん

ActiveWindow.Close
Application.Quit
 
の順番が逆なのでは?
 
Application.Quit
ActiveWindow.Close (実際にはThisWorkbook.Close が正しいかな)
 
自分自身をClosesするので、Closeの後のアクションが実行されません。
先にQuit を予約すればいいかと。

回答
投稿日時: 22/01/19 17:54:13
投稿者: めんたん

Sub Test1()
    ThisWorkbook.Close False
    MsgBox "Closeしました。次にQuitします"
    Application.Quit
End Sub

Sub Test2()
    Application.Quit
    MsgBox "Quit予約しました。次にCloseします"
    ThisWorkbook.Close False
End Sub

 
Test1 はメッセージが表示されずアプリケーションが終了もしません。
Test2 はメッセージが表示されてアプリケーションが終了します。

回答
投稿日時: 22/01/19 21:34:11
投稿者: 半平太

>Set ws日報 = Nothing
>Set ws制御 = Nothing

>をしましょう。
  
本題じゃないですけど、何故そんな無意味なことをする必要あるんですか?
  
引用されたサイトでは
「プロシージャ外」で宣言しているオブジェクトは必ずNothingを使って破棄する。
と書いてありますよ。

投稿日時: 22/01/20 09:44:45
投稿者: FANFAN

taitani さんの引用:

"Application.DisplayAlerts = True" ではないでしょうか。
あと、
Set ws日報 = Workbooks(このブック).Worksheets("作業日報")
Set ws制御 = Workbooks(このブック).Worksheets("制御")
 
を記載しているのであれば、
Set ws日報 = Nothing
Set ws制御 = Nothing
 
をしましょう。
※ 余計なメモリを解放など。
・参考資料
http://rucio.a.la9.jp/main/technique/teq_15.htm

 
taitani様
複数のご指摘ありがとうございました。
修正してみましたが変化はありませんでした。
 
他の方のご指摘の方法で解決しました。
    Application.Quit ・・・複数の実行をやめ1回のみにする
    ThisWorkbook.Close False ・・・Quitの後に実行する
 

投稿日時: 22/01/20 09:47:06
投稿者: FANFAN

QooApp さんの引用:
Application.Quitって多重使用できましたっけ?
アクティブブックから閉じる処理を数回行う場合って、最後に1回だけApplication.Quit記述すればよいのでは?
間違ってたらごめんなさい。

 
QooApp様
ご指摘ありがとうございました。
他の方のご指摘も含め下記の方法で修正しましたら解決しました。
    Application.Quit ・・・複数の実行をやめ1回のみにする
    ThisWorkbook.Close False ・・・Quitの後に実行する

投稿日時: 22/01/20 09:48:26
投稿者: FANFAN

めんたん さんの引用:
Sub Test1()
    ThisWorkbook.Close False
    MsgBox "Closeしました。次にQuitします"
    Application.Quit
End Sub

Sub Test2()
    Application.Quit
    MsgBox "Quit予約しました。次にCloseします"
    ThisWorkbook.Close False
End Sub

 
Test1 はメッセージが表示されずアプリケーションが終了もしません。
Test2 はメッセージが表示されてアプリケーションが終了します。

 
めんたん様
 
ご指摘のTest2の方法で解決しました。
本当に助かりました。ありがとうございました。