|
▼お困りです さん:
>ここでエラーが出たのですが、”パス名が無効です”
>構文は→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, ",");
としてください。
|
|