• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数起動してるエクセルを一括で保存して閉じたい)

エクセル複数起動を一括保存して閉じる方法について

このQ&Aのポイント
  • エクセル複数起動の一括保存と閉じる方法を模索しています。会社で使用しているソフトでエクセルで出力する機能を使用している際、複数のエクセルファイルが起動し、それらを一気に保存して閉じたいと思っています。現在は手動で一つずつ保存して閉じているのですが、より簡単で効率の良い方法があれば教えていただきたいです。
  • マクロやUWSCというソフトを使用して試みましたが、うまくいきませんでした。マクロでは複数のエクセルファイルを指定して閉じることができなかったため、一つずつ閉じるしかありませんでした。UWSCではマウスとキーボードの動きを記録して実行することができますが、同様にうまくいきませんでした。もし効果的な方法があれば、アドバイスをお願いします。

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

  • ベストアンサー
回答No.2

下に続くコードをテキストエディタにコピペして 拡張子はvbsで保存してダブルクリックなどで実行してみてください。 新規未保存はbook & 連番 のファイル名で保存し 既存変更有ファイルは全て上書き保存します。 複数のExcelインスタンス中のBookを順次保存し終了して行きます。 Windows7 64bit & Excel2010 32bit で 検証していますが十分でない場合があります。 もし、 >会社で使用しているソフトで右クリックメニューから >エクセルで出力するという項目があり >それを選択するとbook1、別のも出力するとbook2と >出力されていきます。 が出力のやり直しが出来ないのなら止めてください! ■責任は持てません■ 出力されるファイルの大きさによっては Wscript.Sleep (二か所あり)の数値を大きくする必要があるかも しれません。 一分ほど経っても「終了しました」のメッセージが出ない場合は 無限ループに陥っている可能性がありますので タスクマネージャのプロセスタブの中にある wscript.exe を右クリックし「プロセスの終了」してください。 それにしてもGetObjectは不思議な振る舞いをする。。。 Dim FS Dim XL, BK Dim DFname, DF, F Dim BookCount, Books(), v Set XL = CreateObject("Excel.application") DFname = XL.DefaultfilePath '既定の保存先 Set XL = Nothing Set FS = CreateObject("Scripting.FilesystemObject") Set DF = FS.getfolder(DFname) 'book & n(nは数字)のファイル名をスキャン BookCount = 0 For Each F In DF.files If StrComp(Left(FS.getbasename(F), 4), "book", vbTextCompare) = 0 Then If IsNumeric(Mid(FS.getbasename(F), 5)) Then ReDim Preserve Books(BookCount) Books(BookCount) = Mid(FS.getbasename(F), 5) BookCount = BookCount + 1 End If End If Next 'book & n のnの最大値を取得 If BookCount <> 0 Then For Each v In Books If CInt(v) > CInt(BookCount) Then BookCount = v End If Next End If Do Until saveXL(BookCount) = True Wscript.Sleep 500 Loop MsgBox "終了しました" Private Function saveXL(ByRef BookCount) Dim XL, BK On Error Resume Next Set XL = GetObject(, "Excel.Application") Select Case Err.Number Case 429 saveXL = True Exit Function Case 0 'エラーではない Case Else saveXL = True MsgBox "失敗しました" & vbCrLf & Err.Number & vbCrLf & Err.Description End Select XL.UserControl = False For Each BK In XL.workbooks If BK.Path = "" Then BookCount = BookCount + 1 BK.saveas XL.DefaultfilePath & "\book" & BookCount BK.Close Else BK.Close True End If Next Do Until XL.workbooks.Count = 0 Wscript.Sleep 200 Loop XL.Quit Set XL = Nothing saveXL = False End Function

oyn39742
質問者

お礼

ありがとうございます! 試してみたら出来ました! ループに陥った場合の対処法まで 考えていただいていて 至れりつくせりです。 本当にありがとうございました!

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

下記のURLのVBA「'現在作業中のブック以外の、'他に開いている全てのブックを保存して閉じる。」を参照 http://www.nurs.or.jp/~ppoy/access/excel/xlA003.html

oyn39742
質問者

お礼

ありがとうございます! いま手元にソフトがないので 後で出来るかどうか試してみます。

oyn39742
質問者

補足

職場に戻ったのでやってみましたが 閉じれませんでした・・・ ウィンドウが同じなら教えていただいた方法で 保存して閉じられたんですが エクセルが別ウィンドウで複数起動していると閉じられなかったです・・

関連するQ&A