• 締切済み

CSVファイルを任意のディレクトリに作成する方法につきまして

CSVファイルを任意のディレクトリに作成するマクロを 作成しております。抜粋は下記です。 '(1)ディレクトリを指定するダイアログ表示(初期ファイル名はwOutputFileName) Application.Dialogs(xlDialogSaveAs).Show wOutputFileName '(2)ディレクトリのパスを取得 Current_path = CurDir '(3)wOutputFileNameにパスを代入 wOutputFileName = Current_path & "\" & wOutputFileName その後、(3)のファイルをオープンし、CSVとするデータを登録します。 ところが、(1)での指定で、自分の元ファイル(マクロのエクセルファイル)が名前をwOutputFileNameに変えて保存されるため 「書き込みができません」 というエラーが発生します。 作成したCSVファイルをダイアログにてディレクトリを 指定して保存する方法を教えていただけませんか? よろしくお願いいたします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

GetSaveAsFilename を使えば良いのでは? Excel2000 でも大丈夫なはず。 Sub Sample()   ' // Dim は省略します   ' // 保存ファイル名問合せ   sDefFileName = "Test.csv" '<-- ファイル名初期値   Do     ' // GetSaveAsFilename を使う     wOutputFileName = Application.GetSaveAsFilename( _              InitialFileName:=sDefFileName, _              FileFilter:="CSVファイル (*.csv), *.csv")     ' // Cancel クリック時の処理     If VarType(wOutputFileName) = vbBoolean Then Exit Sub     ' // 同名ファイル上書き確認処理     If Len(Dir$(wOutputFileName)) = 0 Then       Exit Do     Else       iRes = MsgBox("Overwrite?", vbQuestion + vbYesNoCancel)       Select Case iRes         Case vbYes:  Exit Do         Case vbCancel: Exit Sub         Case Else:       End Select     End If   Loop      MsgBox wOutputFileName End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>作成したCSVファイルをダイアログにてディレクトリを 指定して保存する方法を教えていただけませんか Application.Dialogs(xlDialogSaveAs).Showを使うということは、 フォルダ名、ファイル名を指定するダイアロウグが出て、操作者が それらを指定し、「保存」ボタンをクリックすると、保存されるとことまで行ってしまって終わるのではないですか。 ダイアロウグ表示 ファイル指定を待ち 指定 保存 であって ダイアロウグ表示 ファイル指定を待ち 指定 ファルダ名、ファイル名を変数に取得 その変数の内容を使って、SaveAsのステップをVBAコードを作って 入れておいて実行 では無いはず。 ーー だから(2)(3)をなぜ考える必要があるか私には疑問。 私が質問の主旨を誤解していたらすみません。 ーー 保存するフォルダ名だけをダイアロウグで取るダイアロウグは Sub test01() Dim Shell As Object ' Set Shell = Application.FileDialog(msoFileDialogFilePicker) Set Shell = Application.FileDialog(msoFileDialogFolderPicker) Shell.Show With Shell fn = .SelectedItems(1) MsgBox fn End With End Sub のようなもので、保存するフォルダ名のfnに、保存ファイル名+拡張子を添えて、ファイルを自分でSaveしないと置けないと思うが。

shunpy0522
質問者

補足

丁寧なご回答、ありがとうございます。 (msoFileDialogFilePickerはエクセル2002以降対応で、 本マクロはエクセル2000で組んでおり、使用できないようです) 最終的に、取得したデータのCSVファイルを下記にて 作成しようと考えております。 *********************************** Open wOutputFileName For Output As #wFreeNum  wOutputData = CSV形式に編集したデータ  Print #wFreeNum, wOutputData Close #wFreeNum *********************************** 上記にて作成する場合、wOutputFileNameは パスの指定を含めてファイル名でなくてはならない ようなので、CurDirにて取得しております。 また、 Set shell =CreateObject("Shell.Application") _ .browserforfolder(0,"保存先を指定してください",0,"") などでも実施しましたが、これではファイル名を指定できず、 保存先もマクロと同じディレクトリにしか保存できません。 どのような対応がよろしいでしょうか。

回答No.1

まずはwOutputFileNameの値がどうなるかをMsgBox等で確認してみてください。 もしかしたら"\"ではなく"\\"もしくはChr(&H5C)でいけませんか?(やってみてないのでわかりませんが)

shunpy0522
質問者

補足

早速のご回答、ありがとうございます! ファイルの作成はできました。 2箇所に違うファイルが作成されてしまいます(?) (1)ダイアログで指定したディレクトリ  マクロのファイルが名前を変えて保存されてしまいます。 (2)マクロと同じディレクトリ  ここにCSVファイルが吐き出されてしまいます。 マクロはあくまでそのままで、CSVだけがダイアログで指定した ディレクトリに吐き出されるようにしたいのですが。 ちなみに続きのプログラムは以下です。 Open wOutputFileName For Output As #wFreeNum  wOutputData = CSV形式に編集したデータ  Print #wFreeNum, wOutputData Close #wFreeNum お知恵を授けてください!よろしくお願いします。

関連するQ&A

専門家に質問してみよう