2017-07-28 155 views
0

我从Excel中导出Excel到CSV,使用此命令可以专门从工作表中的数据命名文件,而这些数据不会构成CSV数据的一部分文件名:使用excel-vba将工作表范围导出到csv

Private Sub CommandButton1_Click() 
Dim Path As String 
Dim FileName1 As String 
Dim FileName2 As String 
Dim FileName3 As String 
Path = "T:\Richards Reports\MG Orders\" 
FileName1 = Range("A1") 
FileName2 = Range("O1") 
FileName3 = Range("M1") 
ActiveWorkbook.SaveAs FileName:=Path & FileName1 & "_" & FileName2 & "_" &  FileName3 & ".txt", FileFormat:=xlCSV 
End Sub 

不过,我需要能够输出限制在一个特定的范围,例如细胞I6到I60,我苦苦寻找实现这一点的一种方式,任何建议表示赞赏。 TIA 邓肯

回答

0

一种方法是在细胞中串连的值(与之间逗号)和手动保存:

Dim content As String 
Dim rng As Range 
Set rng = Range("A1:E2") 

For Each cell In rng 
    content = content & "," & cell.Value 
    'if we go to another row insert semicolon 
    If cell.Column = rng.Columns.Count Then 
     content = content & ";" 
    End If 
Next cell 

content = Right(content, Len(content) - 1) 'remove unnecessary comma at the beginning 

Set FSO = CreateObject("Scripting.FileSystemObject") 
'don't forget to insert your file path here 
Set wfile = FSO.CreateTextFile("YourPathHere", 2) 'connection for writing 

wfile.WriteLine content 
wfile.Close 

在这里,我使用逗号(,)作为字段分隔符和分号(;)作为线分隔符,您可以根据需要更改它。另外,将范围设置为您要保存的范围。

+0

我删除了我的意见,这是不恰当的,因为我喜欢的人,可读性,它不是强制性的 – avb

+0

CSV应该是由机器可读而不是人类,所以它可以以人类可读的方式显示:)当我清楚地看到一切时,我更喜欢它。 –

+0

非常感谢输入,它有帮助,但我试图导出到csv的单元格列保存像这样的单元格数据:00000018; 04072017; A04001-0; mg28848; PZ; 50; por3456; 28072017; IAA.01 ;包括整个分号。理想情况下,我需要每个单元格都是文本或csv文件中的一行,并维护文件命名元素。道歉,但这是一个完整的新手 – duncan297

0

下面是代码保存选定的范围为.csv

Sub saveSelection2csv() 
Dim range2save As Range 
Dim filename As Range 
Dim dataRow As Range 
Dim dataRowArr() As Variant 

    Set filename = Worksheets("Arkusz1").Range("A1") 

    Open ThisWorkbook.Path & "\" & filename.Value & ".csv" For Output As #1 

    For Each dataRow In Selection.Rows 
     dataRowArr = dataRow.Value 
     dataRowArr = Application.Transpose(Application.Transpose(dataRowArr)) 
     Print #1, Join(dataRowArr, ",") 
    Next 

    Close #1 
End Sub