| 
    
     |  | ▼kanabun さん: >▼お困りです さん:
 >
 >>ここでエラーが出たのですが、”パス名が無効です”
 >>構文は→Open CSVファイルパス For Output As #1のところです。
 >>ご迷惑掛けますがご指導お願いします。
 >
 >あれ、 CSVファイルパス という変数に CSVファイルパスを代入しないと
 >ダメですよ〜〜
 >
 >UserFormに CommandButtonを2つおいて、↓を実験してみてください。
 >
 >'------------------------------------------- UserForm
 >Option Explicit
 >
 >'範囲を新規BookにCopyして xlCSV形式で保存
 >Private Sub CommandButton1_Click()
 >  Dim Target As Range
 >
 >  Set Target = ActiveSheet.UsedRange.Resize(, 8)
 >  Target.Select
 >  If MsgBox("この範囲をCSV保存しますか?", vbOKCancel) _
 >                 = vbCancel Then Exit Sub
 >
 >  Dim SaveFile ' CSVファイルパス
 >  SaveFile = CreateObject("WScript.Shell"). _
 >       SpecialFolders("DeskTop") & "\T123.Csv"
 >  SaveFile = Application.GetSaveAsFilename(SaveFile, "CSV,*.csv")
 >  If VarType(SaveFile) = vbBoolean Then Exit Sub
 >
 >  '(1)新規Bookをシート枚数1枚で 追加する。
 >  Dim SaveCount&
 >  Dim NewBook As Workbook
 >  With Application
 >    SaveCount = .SheetsInNewWorkbook
 >    .SheetsInNewWorkbook = 1
 >    Set NewBook = Workbooks.Add
 >    .SheetsInNewWorkbook = SaveCount
 >  End With
 >
 >  '(2) 元のBookの指定シートのUsedRange.Resize(,8) の範囲を _
 >    Copyして、新規BookのSheets(1).Range("A1")に貼り付ける。
 >  Target.Copy NewBook.Sheets(1).Range("A1")
 >
 >  '(3)新規BookをCSV形式で保存する
 >  With NewBook
 >    .SaveAs SaveFile, xlCSV, Local:=True
 >    .Save
 >    .Close
 >  End With
 >  MsgBox "CSV形式で保存しました", , SaveFile
 >
 >  Set Target = Nothing
 >  Set NewBook = Nothing
 >End Sub
 >
 >
 >'範囲をクリップボード経由で CSV出力
 >Private Sub CommandButton2_Click()
 >  Dim Target As Range
 >
 >  Set Target = ActiveSheet.UsedRange.Resize(, 8)
 >  Target.Select
 >  If MsgBox("この範囲をCSV保存しますか?", vbOKCancel) _
 >                 = vbCancel Then Exit Sub
 >
 >  Dim CsvFile ' CSVファイルパス
 >  CsvFile = CreateObject("WScript.Shell"). _
 >       SpecialFolders("DeskTop") & "\TCB123.Csv"
 >  CsvFile = Application.GetSaveAsFilename(CsvFile, "CSV,*.csv")
 >  If VarType(CsvFile) = vbBoolean Then Exit Sub
 >
 >
 >  '指定範囲をClipboardにCopyして、 _
 >    TAB区切りをComma区切りに直して出力
 >  Dim io As Integer
 >  io = FreeFile()
 >  Open CsvFile For Output As io
 >  Target.Copy
 >  With New DataObject
 >    .GetFromClipboard
 >    Print #io, Replace(.GetText, vbTab, ",");
 >  End With
 >  Close io
 >  Application.CutCopyMode = True
 >  MsgBox "クリップボード経由で保存しました", , CsvFile
 >
 >  Set Target = Nothing
 >
 >End Sub
 >
 >※前述のとおり、
 > CommandButton2 のクリップボード経由の方は、セルの表示形式のまんま
 > 出力するものですから、セルの値が 数値データで
 > #,##0 のような書式設定がしてあると、 カンマ付きで出力されます。
 > CSVファイルは データの区切りがカンマなので、読み取り不能なファイル
 > になってしまいます。
 > カンマ付き表示のセルがあるときは
 >
 >>    Print #io, Replace(.GetText, vbTab, ",");
 >を
 >
 >    Print #io, Replace(Replace(.GetText, ",",""), vbTab, ",");
 >
 >としてください。
 
 すいません遅くなりました。
 ご指導ありがとうございます。
 少しやってみますので、もしうまくいかないようでしたらまた質問いたしますので
 よろしくお願いします。
 
 |  |