• ベストアンサー

VBAで「名前を付けて保存」ダイアログ

プロシージャで、「名前を付けて保存」ダイアログを表示させて、[.csv]形式で保存するという記述をしたいのですが、うまくいきません。 望む手作業的プロセスは次のような感じです。 1.保存したいシートをアクティブにする 2.「ファイル」→「名前を付けて保存」 3.ファイル名を「サンプルエクスポート」と入力 4.ファイルの種類で「CSV(カンマ区切り)」を選択 こうすると、「選択した種類のファイルは複数の複数のシートを含むブックをサポートしていません。」注意メッセージがでるので、OKをして、次の注意メッセージもOKすると、数値データとしてのcsvファイルがアクティブシート分だけ出来ます。 これをVBAで再現したいのです。 以下、具体的な記述です。 ------------------------------ Sub エクスポートの実行() Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant 既定ファイル名 = "サンプルエクスポート.csv" 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "CSV(カンマ区切り)(*.csv),*.csv") If 保存ファイル名 = False Then MsgBox "保存は中止されました" Else ActiveWorkbook.SaveCopyAs 保存ファイル名 End If End Sub ------------------------------- ■上記の記述でうまくいかないのが、実際に保存された[.csv]ファイルに全てのシートが保存されていて、関数も入っているということです。実際に拡張子は[.csv]となって保存されていますが、中身は[.xls]となんらかわっていないように見えます。 構文が良くわかっていないのだと思うので、上記のプロシージャで具体的な修正方法を教えていただけると助かります。 要は、手作業ではなくVBAを利用してエクスポートデータを作りたいというのが目的です。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 簡単に書けば、以下のように修正すればよいと思います。 ActiveWorkbook.SaveCopyAs 保存ファイル名   ↓ ActiveWorkbook.SaveAs 保存ファイル名, xlCSV 'ActiveWorkbook.Close False しかし、もし、元のブックに戻るのでしたら、Else の以下を、以下のようにしてみたらどうでしょうか? Else  With ThisWorkbook.ActiveSheet   Workbooks.Add   .Cells.Copy ActiveSheet.Range("A1")   ActiveWorkbook.SaveAs 保存ファイル名, xlCSV   ActiveWorkbook.Close False  End With End If

shunshun-dash
質問者

お礼

ありがとうございます。 完璧です! 「xlCSV」を知りませんでした。勉強になります。

その他の回答 (1)

noname#187541
noname#187541
回答No.1

こんばんは。 CSV形式テキストデータの書き出し http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_050.html 参考にどうぞ。

shunshun-dash
質問者

お礼

ありがとうございます。 ここのサイトは見つけていたのですが、すぐには理解きそうになくて。勉強してみます。

関連するQ&A