どうもマサヤです!
誰かにExcelブック編集されないようにパスワードを掛けたり、共有が主なブックなら読み取り推奨にしたり、マクロ有のブック(xlsm)をマクロ無のブックにして保存する等々、ブック保存するにも様々な方法があります。
皆さんも用途に応じて使い分けているかと思います。
私もブック保存のコード書くことがあるのですが、結構忘れているんですよね)笑
今回は忘れたとき用に、シーンに応じた保存コード一覧をまとめてみました!
忘れた時にサッと見るといった感じでご利用ください!
ブック保存に使うメソッド
まずは、保存に使う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バージョンが古いため、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メソッド
「あれどう書くんだっけ?」といった時にぜひご利用ください。
コメント