- ベストアンサー
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を利用してエクスポートデータを作りたいというのが目的です。
- みんなの回答 (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
その他の回答 (1)
こんばんは。 CSV形式テキストデータの書き出し http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_050.html 参考にどうぞ。
お礼
ありがとうございます。 ここのサイトは見つけていたのですが、すぐには理解きそうになくて。勉強してみます。
お礼
ありがとうございます。 完璧です! 「xlCSV」を知りませんでした。勉強になります。