エクセルのバージョンは2021です。目的は、以下マクロVBAを実行するたびに、セルA1で指定する「test.xlsm」の予備をセルA2で指定するフォルダに「予備_text.xlsm」として上書きで保存することです。どのように修正すれば、実現するかご教示頂けませんでしょうか。よろしく、お願いいたします。Sub 別ファイルで保存()Application.DisplayAlerts = False 'メッセージを非表示に設定Dim FileNamer As StringDim SavePath As StringFileNamer = Range(\u0026quot;A1\u0026quot;).ValueSavePath = Range(\u0026quot;A2\u0026quot;).ValueActiveWorkbook.SaveAs Filename:=SavePath \u0026amp; \u0026quot;\\\u0026quot; \u0026amp; \u0026quot;予備_\u0026quot; \u0026amp; FileNamerMsgBox \u0026quot;ファイルが保存されました: \u0026quot; \u0026amp; SavePath \u0026amp; \u0026quot;\\\u0026quot; \u0026amp; FileNamer \u0026amp; \u0026quot;.xlsx\u0026quot;, vbInformationApplication.DisplayAlerts = True 'メッセージを表示に設定End Sub

1件の回答

回答を書く

1239879

2026-01-29 02:00

+ フォロー

ThisWorkbook と ActiveWorkbook は別物です。
まず、そこを認識するべきかと思います。あなたの「別ファイルで保存」というマクロを実行した瞬間は、ThisWorkbookがActiveな状態で実行している(場合に限り)ThisWorkbook=ActiveWorkbookとなりますが、本質的には全く別物となります。

ThisWorkbook を予備として保存するだけなら、わざわざRange(\u0026quot;A1\u0026quot;).Valueでの指定は不要なのでは?なお、SavePathにおいても、同じディレクトリに保存するだけなら、指定は不要です。

また、シートを指定せずにRangeを指定しているので、自動的にActiveSheetのRangeを指定していることと同義になります。本来であれば、「シート名」もしくは「シートインデックス」で指定することが推奨されます。※下記の回答では、1枚目のシートと仮定しています。

・ThisWorkbookの1枚目のシートのA2で指定したディレクトリに、ThisWorkbookの予備を保存する

という最小構成なら、下記になります。

Sub sample()
With ThisWorkbook
.SaveCopyAs .Sheets(1).Range(\u0026quot;A2\u0026quot;).Value \u0026amp;\u0026quot;\\予備_\u0026quot;\u0026amp;.Name
End With
End Sub

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有