- ベストアンサー
Excelマクロで.xlsx形式で保存する方法とエラー対処法
- Excelマクロを使用してCSVファイルを加工し、名前を付けて保存する方法についてご説明します。また、.xlsx形式で保存する際に発生するエラー1004の対処法も解説します。
- マクロを実行すると、ファイル形式が.xlsxで保存されないエラーが発生する場合があります。エラーの内容は「この拡張子は、選択したファイル形式には使用できません。」です。
- エラーが発生した場合は、保存するファイルの拡張子を変更するか、別のファイル形式を選択する必要があります。マクロで使用する保存フォーマットを適切に指定することで、エラーを回避することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
・コードを読むと、保存しようとしているのはマクロが入っている自ブックになっていますが、「xlsなら保存できる」と言う事はこの処理自体は間違いでは無いんですよね? ・4行目がコメントアウトされていますが、変数saveFilePathには、ちゃんと保存ファイル名が拡張子のxlsxまで含め、フルパスで入っているという事で間違いないですね? ・xlsmとxlsxの違いを理解したうえでxlsxで保存しようとしていますね? で、あればコードを以下の様に変更してみてください。 ThisWorkbook.SaveAs saveFilePath '←ここでエラーが発生しています。 ↓ Application.DisplayAlerts = False ThisWorkbook.SaveAs saveFilePath, FileFormat:=xlOpenXMLWorkbook
その他の回答 (2)
- tsubu-yuki
- ベストアンサー率46% (179/386)
保存のタイミングで確実にフォーカスがあるのであれば ActiveWorkbookの方が良いかもしれませんね。 開くと同時に変数に格納してしまうのがベターではありますが。 SaveAs を使って拡張子を変えようとするには、 ファイルの形式も併せて指定してやりましょう。 簡単に言うと、csv形式で開いている状態を保持しているので、 拡張子に「xlsx」を指定しちゃダメですよ、ってことですね。 以下、2003以前だとコンパイルエラーになるかもしれませんが、 強制的に2007以降のブック(xlsx)で保存します。 initPath = "\\fileserver\ANT\IT\91_Users\700_SUBJECT\その他業務\Excel\" saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xlsx),*.xlsx") ActiveWorkbook.SaveAs FileName:=saveFilePath, _ FileFormat:=xlOpenXMLWorkbook xlWorkbookNormal でもおそらく大丈夫ですが、 これだと仮に2003以前をいまだにお使いなのであれば 2003以前のデフォルトファイル形式であるxls形式が選択されます。
お礼
早速のお返事有難うございます。参考になりました。感謝の気持ちでいっぱいです。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは マクロで開いたCSVファイルが、ThisWorkbookっておかしくないですか? マクロブックの拡張子は「xlsm」だとして、開いたCSVファイルを「xlsx」形式で 保存して閉じるなら、 Sub test() Dim csvF As Workbook Dim initPath As String Dim saveFilePath As Variant Set csvF = Workbooks.Open("C:\temp\test.csv") initPath = "C:\temp\" '"\\fileserver\ANT\IT\91_Users\700_SUBJECT\その他業務\Excel\" saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xlsx),*.xlsx") If Not (saveFilePath = "False") Then csvF.SaveAs saveFilePath, xlWorkbookDefault '←ここでエラーが発生しています。 csvF.Close Else MsgBox "キャンセルされました。" Exit Sub End If End Sub こんな感じです。
お礼
お手数をお掛け致しましたが、色々考えて出来る様になりました。大変に参考になりました。本当に有難うございました。感謝、感謝です。
補足
早速のお返事有難うございます。少し質問が有るのですが、「Set csvF = Workbooks.Open("C:\temp\test.csv")」とは何ですか? CSVファイルも\\fileserver・・・・・・・・・・の中にあり、たまにはCSVファイルでない場合もあるので何のファイルでも.xlsxに変換したいと思っております。 わがままばかり言って申し訳ございませんが、何卒ご指導の程、宜しくお願い致します。
お礼
早速のお返事有難うございます。すべてクリアーになりました。感謝、感謝です。本当に有難うございました。