将行追加到CSV文件(VBA)

时间:2019-10-21 17:42:59

标签: excel vba csv

我已经从TommyGun的MrExcel上借用了以下代码,但是遇到了以下困难:

  1. 在生成的文件的末尾,即使它们之间没有数据,它也会在下面的行中重复定界符;

  2. 根据我们所在的月份,必须动态生成文件名,但是'Const CSVFile As String'不接受Format(date,“ mmm-yy”)作为字符串元素,例如。

Sub Append2CSV()
Dim tmpCSV As String 'string to hold the CSV info
Dim f As Integer

Const CSVFile As String = "C:\VBA Code\test.csv" 'replace with your filename

f = FreeFile

Open CSVFile For Append As #f
tmpCSV = Range2CSV(Range("A2:H3"))
Print #f, tmpCSV
Close #f
End Sub

Function Range2CSV(list) As String
Dim tmp As String
Dim cr As Long
Dim r As Range

If TypeName(list) = "Range" Then
cr = 1

For Each r In list.Cells
    If r.Row = cr Then
        If tmp = vbNullString Then
            tmp = r.Value
        Else
            tmp = tmp & "," & r.Value
        End If
    Else
        cr = cr + 1
        If tmp = vbNullString Then
            tmp = r.Value
        Else
            tmp = tmp & Chr(10) & r.Value
        End If
    End If
Next
End If

Range2CSV = tmp
End Function

考虑以下几点: 如果文件不存在,请使用标题(第1行)创建文件。如果是这样,则附加(范围“ A2:S”和lastorw)

1 个答案:

答案 0 :(得分:1)

我无法复制第一个问题(输出CSV中的定界符尾随行)。为了使文件名具有动态性,应将其命名为Dim(而不是常量表达式Const),或者应将字符串Replace用于常量表达式。使用Dim变量,如下所示:

Option Explicit

Sub Append2CSV()
Dim tmpCSV As String 'string to hold the CSV info
Dim f As Integer

Dim CSVFile As String
CSVFile = "C:\VBA Code\" & Format(Date, "MMM-YY") & ".csv"

f = FreeFile

Open CSVFile For Append As #f
tmpCSV = Range2CSV(Range("A2:H3"))
Print #f, tmpCSV
Close #f
End Sub

输入数据:

enter image description here

输出:

enter image description here