別の人から2回、同じこと質問されたから記事にしてみる。
1.お悩み
システムから生成されて起動したExcelを名前付けて保存したいけど、
Excel操作のライブラリはファイル名指定になってて新規ブックの保存ができません。
なるほど、確かにそーだね。
2.方法① エミュレーションしちゃいなよ。
前回は、この方法でアドバイスした。
そのウィンドウ、エミュレーションで「Ctrl + S」しちゃいなヨ。
新規ブックは、ウィンドウタイトルの数字がBook1とかBook2とか、変わったりするからウィンドウ識別ルールでタイトルの部分の指定を編集するといいですよ。って。
3.方法② スクリプト書いてみたよ。
これは、Excelでだけ使えるスクリプトだけどね。
エミュレーションで「Ctrl + S」だと、名前を付けて保存ダイアログ自分で操作しなきゃいけないしね。
18_Excel関連 - 新しいブックに名前を付けて保存
title_pattern = !新しいブック(正規表現)! SavePath = !保存ファイル名! opt = !保存後の処理|閉じる,そのまま! Set fso = CreateObject("Scripting.FileSystemObject") Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = title_pattern .IgnoreCase = False .Global = True End With ' workbookオブジェクトを取得する Set workbook = Nothing On Error Resume Next ' 既存のエクセルが起動されていれば警告を抑制する Set existingXlsApp = Nothing Set existingXlsApp = GetObject(, "Excel.Application") For Each bk In existingXlsApp.Workbooks If reg.Test(bk.Name) Then Set workbook = bk Exit For End If Next On Error Goto 0 If workbook Is Nothing Then ' ブックは開かれていなかった Err.Raise 1, "", "新しいブックが見つかりませんでした。" WScript.quit End If ' ====ハイライトを表示する======================================================== ' HwndプロパティはExcel2002以降のみ対応 On Error Resume Next ShowUMSHighlight(existingXlsApp.Hwnd) On Error Goto 0 ' ====ブックを閉じる============================================================== On Error Resume Next ' 保存確認を出さないようにしてブックを閉じる xlsApp.DisplayAlerts = False filePath = fso.GetAbsolutePathName(SavePath) workbook.SaveAs(filePath) If opt = "閉じる" Then workbook.Close xlsApp.DisplayAlerts = True On Error Goto 0 If existingXlsApp.Workbooks.Count = 0 Then existingXlsApp.Quit End If Set existingXlsApp = Nothing Set workbook = Nothing Set fso = Nothing Set reg = Nothing Set filePath = Nothing
備考
新規ブックのウィンドウをタイトルから探して名前を付けて保存します。
ブックタイトルのパターンは正規表現で指定します。例) Book1.xlsx で起動する場合は、「Book\d+」とか。
スクリプト実行ライブラリにも登録しときました。
お立ち寄りくださいませ~↓↓↓