VBA ブック保存(セーブ)も色々!別名保存やPW保存・強制上書など様々な方法を紹介!

この記事は約8分で読めます。

 

ブック保存サムネイル

どうもマサヤです!

誰かにExcelブック編集されないようにパスワードを掛けたり、共有が主なブックなら読み取り推奨にしたり、マクロ有のブック(xlsm)をマクロ無のブックにして保存する等々、ブック保存するにも様々な方法があります。

皆さんも用途に応じて使い分けているかと思います。

私もブック保存のコード書くことがあるのですが、結構忘れているんですよね)笑

今回は忘れたとき用に、シーンに応じた保存コード一覧をまとめてみました!

忘れた時にサッと見るといった感じでご利用ください!

 

スポンサーリンク

ブック保存に使うメソッド

まずは、保存に使う3つのメソッドを押さえておきましょう。

  • Save
    指定ブックに対して保存。
  • SaveAs:
    指定ブックに対して様々な保存方法を設定して保存。
  • SaveCopyAs:
    指定ブックのコピーを作成。

 

※注意※
この3つのメソッドは、起動しているブックにしか利用できません。
未起動のブックに対して実行した場合、「実行時エラー”9″:インデックスが有効範囲にありません。」となりますので、注意しましょう。
では、3つのメソッドをシーンに応じた使い方を確認してきましょう!

Save:シンプルにファイルを保存

Saveメソッドは指定したブックを保存することができます。

 

Saveメソッドで上書き保存

主には、既に名前のついているブックの上書き保存として利用します。

一番多い利用例として下記のような、現在操作しているブックへの上書き保存が多いのではないでしょうか。

ActiveWorkbook.Save ’操作しているブックを上書き保存

 

新規保存としても使えるが、使い勝手は微妙

新規保存で利用した場合、Book●.~.xlsxというブック名で自動で保存されますが、ほぼ目的に応じた名前を付けるでしょうから、新規保存で利用するケースは少ないでしょう。

 

SaveAs:様々な保存方法を指定して保存

SaveAsメソッドは様々な保存方法が可能です。

  • 新規保存や別名保存
  • 拡張子(xlsm⇒xlsx)変更して保存
  • パスワードを掛けて保存

 

構文

SaveAsメソッドは様々な設定ができるため引数が多いです。

book.SaveAs(FileName、 FileFormat、 Password、 WriteResPassword、 ReadOnlyRecommended、 createbackup、 accessmode、 ConflictResolution、 addtomru、 textcodepage、 TextVisualLayout、 Local)
各種引数の説明は公式ドキュメントを参照ください。

では、よく使うシーン毎で確認していきましょう。

 

新規保存や別名保存

まずは基本的な使い方です。

新規ブックや既存ブックを別名で保存したい時は下記のように記述します。

ThisWorkbook.SaveAs ThisWorkbook.Path & "\copyBook.xlsm"

これは、現在操作しているブックと同じフォルダにcopyBook.xlsmという別名で保存しています。

 

強制上書き保存

保存する名前が既に存在していると、下図のように上書きしていいですか?と表示されます。

上書き警告

手動で「OK」を押すことで保存されるものの、やっぱり自動的に上書きして欲しいですよね。

こういう時は、Application.DisplayAlertsを下記のように使うことで、警告画面を表示させずに処理を実行できます。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs ThisWorkbook.Path & "\copyBook"
Application.DisplayAlerts = True

 

拡張子を変更して保存

前述した基本を踏まえた上で、拡張子を変更する保存方法を紹介します。

FileFormatで指定することで拡張子を変更でき、今回は2つの例をご紹介します。

※FileFormatに記述するコードはこちらで確認できます。

 

xlsx ⇒ xlsへの変更コード

クライアントのExcelバージョンが古いため、xlsに変更して保存する場合などに利用します。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook.xls", FileFormat:=xlWorkbookNormal

 

xlsm(マクロ有効ブック)⇒ xlsxコード

ブックを会社内で共有する際に、VBAコードを誤って実行されないようにxlsxに変更する際に利用したりします。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook.xlsx", FileFormat:=xlWorkbookDefault
Application.DisplayAlerts = True

 

※補足※
xlsmをxlsxといった違うExcel形式に変換する際に、Application.DisplayAlerts = Falseを使用しなかった
場合は下図が表示されます。
「はい」を選択することで保存されますが、手作業が発生するのはVBA化の意味が薄れるので、理由がなければApplication.DisplayAlerts = Falseの利用がおすすめです。

 

読み取り専用を推奨で保存

「ファイルを編集して保存したいけど、別の誰かが開いて保存できない」

そんな時は、ブック開くときに「読み取り専用を推奨」で保存しておけば問題が解決します。

また、下手にファイルを保存されたくない時にも使えますよ。

「読み取り専用を推奨」する保存方法は、ReadOnlyRecommendedをTrueで指定します。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", ReadOnlyRecommended:=True

 

パスワード設定して保存

パスワード設定(パスワード保護)して保存する方法は下記の2種類あります。

  • ブックを開く時に必要なパスワード
  • ブックを編集・保存するときに必要なパスワード

 

ブックを展開時に必要なパスワードを設定

パスワードを知っている人だけ見れるようにしたい場合に利用します。

パスワードを設定するには下記のように、Passwordにパスワードを指定することで可能となります。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", Password:="mmm"

上記コードが正しく実行されると、次回ブック起動時に下記画面が表示されます。

 

ブックを更新するときだけパスワードが必要

開くだけならPW要らないけど、編集するときはPW必要にしたい時に使います。

ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\copyBook", WriteResPassword:="mmm"

上記、WriteResPasswordにPWを設定すれば、ブックを開くときに下図のような画面が表示されるようになります。

編集時PW用のブック

 

SaveCopyAs:コピーを作成

SaveCopyAsは指定ブックをコピーすることができます。

ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\copyBook.xlsm"

SaveAsとは違い、パスワード掛けたり、読み取り専用したり等はできません。

 

SaveAsとSaveCopyAsの使い分け

SaveAsと一緒かな~と思いがちですが、SaveAsは指定ファイルの別名保存、SaveCopyAsは複製(コピー)ですので、コード実行時にブックが置き換わるといったことは発生しません。

例えば、A.xlsmブックに対してSaveAsでB.xlsmに別名保存すると、ブックはB.xlsmに置き換わります。

実際には、A.xlsmが閉じられてB.xlsmが開かれている状態になります。

SaveCopyAsでは、ブック展開されることなくコピーされるだけになります。

 

スポンサーリンク

起動して(開いて)いないブックをコピーする方法

「起動していないブックをコピーしたい!」

保存とは違いますが、この悩みの解決方法もご紹介しますよ~

特定ブックをコピーしたい場合、上記で紹介したSaveCopyでは一度ブックを起動する必要があります。

 

CopyFileを使ってファイルをコピーするコード

Sub CopyBook()

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set wb = ThisWorkbook

copyFromName = "C:\Users\masay\VBA\個別\copyBook.xlsm"
copyToName = "C:\Users\masay\Desktop\copyBook.xlsm"

'ファイルコピー 
objFSO.copyFile copyFromName, copyToName

End Sub

FileSystemObjectのobjFSO.copyFileを使い、起動していないブックをコピーしています。

objFSO.copyFile コピー元, コピー先

コピーするExcelが重く起動に時間が掛かる時も使うと便利ですね。

 

まとめ

ブックを保存方法を色々お伝えしました!

  1. 単純に上書き保存ならSaveメソッド
  2. 別名保存や拡張子変更等々、色々設定して保存するならSaveAsメソッド
  3. コピーしたいならSaveCopyAsメソッド
  4. 起動していないブックをコピーするならcopyFileメソッド 

「あれどう書くんだっけ?」といった時にぜひご利用ください。

 

コメント