プロが教えるわが家の防犯対策術!

プロシージャで、「名前を付けて保存」ダイアログを表示させて、[.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を利用してエクスポートデータを作りたいというのが目的です。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/20 03:34

こんばんは。



CSV形式テキストデータの書き出し
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
参考にどうぞ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/20 03:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!