|
▼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, ",");
>
>としてください。
どうもありがとうございます。
無事に出来る様になりました。
また、よろしくお願いします。
|
|