こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel マクロで.xlsx形式で保存したい

マクロでCSVファイルを開き加工を行った後、名前を付けて保存しようとしていますが(.xls)
では保存できるのですが、(.xlsx)ではエラー1004が出て保存できません。内容としては「この拡張子は、選択したファイル形式には使用できません。[ファイル名]ボックスでファイル拡張子を変更するか、[ファイルの種類]ボックスで別のファイル形式を選択してください」と記述されています。
ご助言の程、宜しくお願い致します。

Dim initPath As String
Dim saveFilePath As Variant
initPath = "\\fileserver\ANT\IT\91_Users\700_SUBJECT\その他業務\Excel\"
'saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xlsx),*.xlsx")

MsgBox saveFilePath

If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath   '←ここでエラーが発生しています。
Else
MsgBox "キャンセルされました。"
Exit Sub
End If

投稿日時 - 2017-01-24 16:31:19

QNo.9285282

すぐに回答ほしいです

質問者が選んだベストアンサー

・コードを読むと、保存しようとしているのはマクロが入っている自ブックになっていますが、「xlsなら保存できる」と言う事はこの処理自体は間違いでは無いんですよね?
・4行目がコメントアウトされていますが、変数saveFilePathには、ちゃんと保存ファイル名が拡張子のxlsxまで含め、フルパスで入っているという事で間違いないですね?
・xlsmとxlsxの違いを理解したうえでxlsxで保存しようとしていますね?

で、あればコードを以下の様に変更してみてください。

ThisWorkbook.SaveAs saveFilePath   '←ここでエラーが発生しています。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs saveFilePath, FileFormat:=xlOpenXMLWorkbook

投稿日時 - 2017-01-24 17:48:08

お礼

早速のお返事有難うございます。すべてクリアーになりました。感謝、感謝です。本当に有難うございました。

投稿日時 - 2017-01-24 18:29:13

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

保存のタイミングで確実にフォーカスがあるのであれば
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形式が選択されます。

投稿日時 - 2017-01-24 18:06:43

お礼

早速のお返事有難うございます。参考になりました。感謝の気持ちでいっぱいです。

投稿日時 - 2017-01-24 18:26:41

ANo.1

こんにちは
マクロで開いた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
こんな感じです。

投稿日時 - 2017-01-24 16:55:48

補足

早速のお返事有難うございます。少し質問が有るのですが、「Set csvF = Workbooks.Open("C:\temp\test.csv")」とは何ですか?
CSVファイルも\\fileserver・・・・・・・・・・の中にあり、たまにはCSVファイルでない場合もあるので何のファイルでも.xlsxに変換したいと思っております。
わがままばかり言って申し訳ございませんが、何卒ご指導の程、宜しくお願い致します。

投稿日時 - 2017-01-24 18:01:13

お礼

お手数をお掛け致しましたが、色々考えて出来る様になりました。大変に参考になりました。本当に有難うございました。感謝、感謝です。

投稿日時 - 2017-01-24 21:27:17

あなたにオススメの質問