今回はファイルを開いたときに表示される「’【ファイル名】’のファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。」が表示される原因と対処法を紹介したいと思います。
メッセージが表示される原因
原因
結論から言うとマクロを使用してファイルを作成した時にフォーマットを指定していない可能性があります。
もっと言うとWorkbook.SaveAs
の引数であるFileFormat
を指定していない可能性があります。
以下のコードを使って説明します。
Sub makeActiveSheetToCsv()
Dim TgtSht As Worksheet
Dim TgtFilePath As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
TgtFilePath = "C:\ExcelVBA\CSV\test_Haribona.csv"
Set TgtSht = ActiveWorkbook.ActiveSheet
TgtSht.Copy
ActiveWorkbook.SaveAs TgtFilePath
ActiveWorkbook.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
コードについてざっくり説明すると、アクティブになっているシートをTgtFilePath
で指定した場所に保存する、という感じになっています。
実行すると指定した場所に保存できているのが分かるかと思います。
しかし作成したファイルを開いてみると冒頭で紹介したメッセージが表示されてしまいます。
特にマクロ実行中にエラーが起きてるわけでもないのになんで??
となる方も多いと思います。
これはSaveAs
を実行する際に引数であるFileFormat
を指定していない為です。
'保存先を指定する時にファイル形式をCSVにしている
TgtFilePath = "C:\ExcelVBA\CSV\test_Haribona.csv"
というのもファイルを保存する際に使用するSaveAsには、ファイルの形式を指定する引数であるFileFormat
というものがあります。
この引数は省略することが可能で、省略すると自動でExcel形式で指定されます。
保存したいファイルの拡張子が.xlsx
(拡張子とFileFormat
が一致している)であれば特に問題ないのですが、今回の例のように.csv
(拡張子とFileFormat
が一致していない)だとファイル形式に矛盾が生じエラーが発生してしまう、という訳です。
ざっくりまとめると、見かけ上は特に問題ないけど内部的には問題あるよ、といったイメージです。
対処法
対処法としてはシンプルにWorkbook.SaveAs
の引数にFileFormat
で任意のファイル形式を指定してあげればOKです(CSVなど形式が異なる場合は必ず!)。
引数についてはこちらをご覧ください!
'FileFormatを指定:CSV形式で保存したい場合
ActiveWorkbook.SaveAs TgtFilePath, xlCSV
まとめ
今回はファイルを開いたときに表示される「’【ファイル名】’のファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。」が表示される原因と対処法を紹介しました。
このメッセージが表示されてしまう場合は、SaveAsの引数FileFormat
で任意のファイル形式が指定されているか確認するようにしましょう!
また、このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント