使用しているのはエクセル2010です。
会社で使用しているソフトで右クリックメニューから
エクセルで出力するという項目があり
それを選択するとbook1、別のも出力するとbook2と
出力されていきます。
(上部に表示されている文字はbook1のみで拡張子はまだ付いていない?)
タスクバー上にはそれぞれが独立して表示されていて
エクセルを閉じようと右上の(チェック)ボタンを押しても
book1ならbook1、book2ならbook2のみのエクセルが終了します
(book1,2を出力して開いていたとしてbook1のエクセルを閉じてもbook2は閉じない)
毎回10個くらい一気に出力したあと、1つず保存して閉じているのですが
これを簡単にできる方法は何かありませんでしょうか?
見よう見まねでマクロを下記マクロを作ってみましたが
思うように行かず
Sub closeexcel()
Workbooks("Book1").Close SaveChanges:=True
Workbooks("Book2").Close SaveChanges:=True
End Sub
さらに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
ありがとうございます!
試してみたら出来ました!
ループに陥った場合の対処法まで
考えていただいていて
至れりつくせりです。
本当にありがとうございました!
No.1
- 回答日時:
下記のURLのVBA「'現在作業中のブック以外の、'他に開いている全てのブックを保存して閉じる。
」を参照http://www.nurs.or.jp/~ppoy/access/excel/xlA003. …
この回答への補足
職場に戻ったのでやってみましたが
閉じれませんでした・・・
ウィンドウが同じなら教えていただいた方法で
保存して閉じられたんですが
エクセルが別ウィンドウで複数起動していると閉じられなかったです・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
VBA レジストリの値の読み方に...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
COBOLのMOVEで桁数が異なる場合
-
printfとputcharの違いは
-
PS5をMacBookProに出力したいの...
-
標準出力の上書き
-
ブランキング期間
-
C#です。データの出力について
-
ACCESS クエリ→フォーム...
-
エクセルVBAにて アルファ...
-
テキストファイルから特定の文...
-
CRC16計算について
-
ActiveReportsで縦書きの帳票
-
エクセルで英字と数字を組み合...
-
printfですぐに出力
-
VHDLの記述で、わからない記述...
-
ルータのインターフェースの表...
-
【エクセル、並び替えについて】
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
MMDでavi出力が出来ない
-
プログラムについての質問です...
-
コンセントの電力は入力と出力...
-
AIに回答させるって
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
アクセスでエクセルに出力する...
-
printfとputcharの違いは
-
ACCESS クエリ→フォーム...
-
VBAのExecメソッドで画面を非表...
-
COBOLのMOVEで桁数が異なる場合
-
テキストファイルから特定の文...
-
VBAで有効数字の設定
-
coutで出力した文字を消去する...
-
Windows Formアプリからコンソ...
-
KEYENCEのシーケンスプログラム...
-
CRC16計算について
おすすめ情報