誰かにExcelブック編集されないようパスワードを掛けたり、共有が目的なら読み取り推奨にしたり、マクロ有りのブック(xlsm)をマクロ無し(xlsx)のブックにする等のコードを紹介します。
使用頻度が少ないため正直忘れるので、使いたい時にサッと見れるようシーンに応じた保存コード一覧をまとめてみました!
ブック保存に使うメソッド
まずは、保存に使う3つのメソッドを押さえておきましょう。
- Save:
指定ブックに対して保存。 - SaveAs:
指定ブックに対して様々な保存方法を設定して保存。 - SaveCopyAs:
指定ブックのコピーを作成。
Save:シンプルにファイルを保存
Saveメソッドは指定したブックを保存することができます。
Saveメソッドで上書き保存
現在操作しているブックへの上書き保存で利用します。
ActiveWorkbook.Save ’操作しているブックを上書き保存
新規保存としても使えるが、使い勝手は微妙
新規保存で利用した場合、Book●.~.xlsxというブック名で自動で保存されます。ただ、ファイル名は目的に応じた名前を付けるでしょうから、新規保存で利用するケースは少ないでしょう。
SaveAs:様々な保存方法を指定して保存
SaveAsメソッドは様々な保存方法が可能です。
- 新規保存や別名保存
- 拡張子(xlsm⇒xlsx)変更して保存
- パスワードを掛けて保存
構文
SaveAsメソッドは様々な設定ができるため引数が多いです。
新規保存や別名保存
まずは基本的な使い方です。新規保存や既存ブックを別名で保存したい時は下記のように記述します。
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でもファイルを開けるように、xlsxを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
読み取り専用を推奨で保存
「ファイルを共有したいけど、編集してほしくない」
そんな時は、ブック開くときに「読み取り専用を推奨」で保存しておけば問題が解決します。「読み取り専用を推奨」する保存方法は、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を設定すれば、ブックを開くときに下図のような画面が表示されるようになります。
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を使い、起動していないブックをコピーしています。
コピーするExcelが重く起動に時間が掛かる時も使うと便利ですね。
まとめ
ブックを保存方法を色々お伝えしました!
- 単純に上書き保存ならSaveメソッド
- 別名保存や拡張子変更等々、色々設定して保存するならSaveAsメソッド
- コピーしたいならSaveCopyAsメソッド
- 起動していないブックをコピーするならcopyFileメソッド
「あれどう書くんだっけ?」といった時にぜひご利用ください。
コメント