更新日:、 作成日:
VBA ワークブックを上書きや名前を付けて保存する
はじめに
Excel VBA マクロでワークブックを上書きや名前を付けて保存する方法を紹介します。
Workbook.Save メソッドから、ブックを上書き保存できます。
Workbook.SaveAs メソッドから、ブックを名前を付けて保存できます。
Workbook.SaveCopyAs メソッドから、ブックをコピーして保存できます。
ブックを上書き保存する
ブックを上書き保存するには Workbook.Save を入力します。
Dim wb As Workbook
Set wb = ThisWorkbook ' VBA を実行しているブックを取得
wb.Sheets(1).Range("A1").Value = "編集" ' ブックを編集
wb.Save ' 上書き保存
新規作成したブックを上書き
新規作成したブックを上書き保存したときのブック名は Book1.xlsx のように連番になります。
Dim wb As Workbook
Set wb = Workbooks.Add ' 新規作成したブックを取得
wb.Save ' 上書き保存
Debug.Print(wb.FullName)
保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。
ブックを名前を付けて保存する
ブックを名前を付けて保存するには Workbook.SaveAs("D:\Book2.xlsx") または Workbook.SaveAs("Book2.xlsx") のように入力します。
Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成
wb.Sheets(1).Range("A1").Value = "編集" ' 編集
Call wb.SaveAs("D:\Book2.xlsx") ' 名前を付けて保存
Call wb.SaveAs("Book2.xlsx") ' 名前を付けて保存
ファイル名だけ指定したときの保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。
保存したファイル名がブック名になります。
上書き
保存先に既にファイルが存在するとき、上書きするかメッセージが表示されます。
[はい] をクリックすると上書き保存されます。
[いいえ] か [キャンセル] をクリックすると「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。他のエラーと混同しないように、保存専用のメソッドを作成すると処理がわかりやすくなります。
Public Function SaveAsWorkbook(ByVal wb As Workbook, ByVal fullPath As String) As Boolean
On Error GoTo catch
Call wb.SaveAs(fullPath)
SaveAsWorkbook = True
Exit Function
catch:
SaveAsWorkbook = False
End Function
SaveAsWorkbook の戻り値が True なら保存、False ならキャンセルのように処理を分けられます。
Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成
If SaveAsWorkbook(wb, "D:\Book2.xlsx") = True Then
' 保存済み
Else
' キャンセル
End If
メッセージを表示しないで上書きするには Application.DisplayAlerts = False を入力します。保存したら True に戻します。
Application.DisplayAlerts = False ' メッセージを非表示
Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成
Call wb.SaveAs("D:\Book2.xlsx") ' 名前を付けて保存
Application.DisplayAlerts = True ' メッセージを表示
スポンサーリンク
ブックをコピーして保存する
ブックをコピーして保存するには Workbook.SaveCopyAs("D:\Copy.xlsx") または Workbook.SaveCopyAs("Copy.xlsx") のように入力します。
Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成
wb.Sheets(1).Range("A1").Value = "コピー" ' 編集
Call wb.SaveCopyAs("D:\Copy.xlsx") ' コピーを名前を付けて保存
Call wb.SaveCopyAs("Copy.xlsx") ' コピーを名前を付けて保存
ファイル名だけ指定したときの保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。
保存先に既にファイルが存在するときは上書きします。
名前を付けて保存ダイアログを表示する
名前を付けて保存ダイアログから選択したファイルのパスを取得できます。
名前を付けて保存ダイアログを表示するには Application.GetSaveAsFilename メソッドを使用します。
戻り値に選択したファイルの絶対パスを返します。キャンセルすると False を返します。
Dim filePath As Variant
filePath = Application.GetSaveAsFilename ' ダイアログを表示
If filePath = False Then
Exit Sub ' キャンセル
End If
' 保存
ActiveWorkbook.SaveAs(filePath) ' 名前を付けて保存
ダイアログは保存先のパスを取得するだけで保存はしていません。ダイアログを表示した後に保存処理をする必要があります。
ファイルを選択すると、カレントディレクトリがそのパスになります。
ブックのパスを取得する
ブックが保存されているパスを取得するには Workbook.FullName のように入力します。
Dim s As String
s = ActiveWorkbook.FullName ' D:\Book1.xlsx
s = ActiveWorkbook.Name ' Book1.xlsx
s = ActiveWorkbook.Path ' D:
Debug.Print(s)
スポンサーリンク