【Excel VBA】「ファイルが破損しているか、安全ではない可能性があります。」が出る原因と対処法

Excel
スポンサーリンク

今回はファイルを開いたときに表示される「’【ファイル名】’のファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。」が表示される原因と対処法を紹介したいと思います。

「’【ファイル名】’のファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。」
スポンサーリンク

メッセージが表示される原因

原因

結論から言うとマクロを使用してファイルを作成した時にフォーマットを指定していない可能性があります
もっと言うと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で指定した場所に保存する、という感じになっています。

実行すると指定した場所に保存できているのが分かるかと思います。

メッセージが表示される原因_原因_1

しかし作成したファイルを開いてみると冒頭で紹介したメッセージが表示されてしまいます。

メッセージが表示される原因_原因_2

特にマクロ実行中にエラーが起きてるわけでもないのになんで??

となる方も多いと思います。

これは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
メッセージが表示される原因_対処法_1
問題なくファイルが開かれる
スポンサーリンク

まとめ

今回はファイルを開いたときに表示される「’【ファイル名】’のファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。」が表示される原因と対処法を紹介しました。

このメッセージが表示されてしまう場合は、SaveAsの引数FileFormatで任意のファイル形式が指定されているか確認するようにしましょう!

また、このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました