使用Excel-VBA将工作表范围导出为CSV

3
我正在使用宏从Excel导出到CSV,并使用以下内容来命名文件,该内容来自工作表中的单元格,这些单元格不会成为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单元格,我正在努力寻找实现这一目标的方法,欢迎任何建议。 谢谢! 邓肯

2个回答

2
这里是将选定范围保存为 .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

你为什么定义了range2save? - gimmegimme

1

一种方法是将单元格中的值连接起来(用逗号隔开),然后手动保存:

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

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

我删掉了我的评论,因为它不合适。既然我更喜欢易读性,那么没有强制要求。 - avb
CSV 应该是机器可读的,而不是人类可读的,因此它可以以人类可读的方式显示 :) 我也更喜欢当我能清楚地看到所有内容。 - Michał Turczyn
非常感谢您的输入,它确实有所帮助,但我正在尝试导出到CSV的单元格列包含像这样的单元格数据:00000018;04072017;A04001-0;mg28848;PZ;50;por3456;28072017;IAA.01;其中包含分号。理想情况下,我需要将每个单元格作为文本或CSV文件中的一行,并保持文件命名元素。抱歉,但我是一个完全的新手。 - duncan297
在代码中,只需将分号替换为您喜欢的字符即可。它甚至可以是特殊字符,例如vbNewLine或其他内容 :) - Michał Turczyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接