はじめに
VBAマクロ付きのxlsmファイルで編集し、xlsxファイルに書き出したいというケースがあります。
VBAマクロ付きのファイルがセキュリティー上、敬遠されるようなケースです。
マクロが使えるxlsmファイルで編集して、その機能を活かしつつ結果をマクロ無しのxlsxファイルに書き出せれば問題ないでしょう。
もちろんブックをコピーした後に拡張子をxlsxに書き換えれば済むのですが、この操作をVBAで書いてみます。
プログラムの組み方
xlsmファイルを、xlsxファイルで書き出すには、SaveAs メソッドを使います。
書き出したいファイル名とファイルフォーマットを指定します。
その前に、現在の状態を上書き保存しておきます。
結果的にどちらもシート情報は同じになります。
xlsxファイルに書き出したら、元のxlsmファイルを開きます。
次に、xlsxファイルを閉じる事で、元のxlsmファイルが残ることになります。
プログラムコード
Sub myXLSX_Backup()
Dim fname As String
Dim myPath As String
myPath = ThisWorkbook.FullName
ThisWorkbook.Save '元のファイルをセーブ
Application.DisplayAlerts = False 'アラート表示をキャンセル
'(同名のファイルは上書き)
'xlsxファイルで名前を付けて保存
fname = Replace(ThisWorkbook.Name, "xlsm", "xlsx")
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd") & fname, _
FileFormat:=xlOpenXMLWorkbook
Workbooks.Open myPath '元のxlsmファイルを開く
Workbooks(1).Close 'xlsxファイルを閉じる
Application.ScreenUpdating = True 'アラート表示を戻す
MsgBox "xlsxファイルで保存しました。"
End Sub
今回は書き出す際にファイル名に日付を付けるようにしてみました。
不要なら「 & Format(Now, “yyyymmdd”) 」部分を削除してください。
また、SaveAs メソッドをアラート表示をキャンセルして実行すると、同名のファイルが上書きされるようになります。
まとめ
今回のようにxlsmファイルからxlsxファイルに変換して保存するのは以外に厄介です。
名前を変更せずにxlsxファイルで保存しようとすると警告が出ますが、もしそのまま実行して上書きするとプログラム部分は全て消えてしまいますので注意してください。