- 締切済み
CSVファイルを任意のディレクトリに作成する方法につきまして
CSVファイルを任意のディレクトリに作成するマクロを 作成しております。抜粋は下記です。 '(1)ディレクトリを指定するダイアログ表示(初期ファイル名はwOutputFileName) Application.Dialogs(xlDialogSaveAs).Show wOutputFileName '(2)ディレクトリのパスを取得 Current_path = CurDir '(3)wOutputFileNameにパスを代入 wOutputFileName = Current_path & "\" & wOutputFileName その後、(3)のファイルをオープンし、CSVとするデータを登録します。 ところが、(1)での指定で、自分の元ファイル(マクロのエクセルファイル)が名前をwOutputFileNameに変えて保存されるため 「書き込みができません」 というエラーが発生します。 作成したCSVファイルをダイアログにてディレクトリを 指定して保存する方法を教えていただけませんか? よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
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)
>作成した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しないと置けないと思うが。
- maronii_now
- ベストアンサー率0% (0/8)
まずはwOutputFileNameの値がどうなるかをMsgBox等で確認してみてください。 もしかしたら"\"ではなく"\\"もしくはChr(&H5C)でいけませんか?(やってみてないのでわかりませんが)
補足
早速のご回答、ありがとうございます! ファイルの作成はできました。 2箇所に違うファイルが作成されてしまいます(?) (1)ダイアログで指定したディレクトリ マクロのファイルが名前を変えて保存されてしまいます。 (2)マクロと同じディレクトリ ここにCSVファイルが吐き出されてしまいます。 マクロはあくまでそのままで、CSVだけがダイアログで指定した ディレクトリに吐き出されるようにしたいのですが。 ちなみに続きのプログラムは以下です。 Open wOutputFileName For Output As #wFreeNum wOutputData = CSV形式に編集したデータ Print #wFreeNum, wOutputData Close #wFreeNum お知恵を授けてください!よろしくお願いします。
補足
丁寧なご回答、ありがとうございます。 (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,"") などでも実施しましたが、これではファイル名を指定できず、 保存先もマクロと同じディレクトリにしか保存できません。 どのような対応がよろしいでしょうか。