Добавить строки в файл CSV (VBA) - PullRequest
0 голосов
/ 21 октября 2019

Я позаимствовал приведенный ниже код у TommyGun на MrExcel, но у меня возникли следующие трудности:

  1. В конце сгенерированного файла он повторяет разделители в строках нижедаже если между ними нет данных;

  2. Имя файла должно генерироваться динамически, в зависимости от месяца, в котором мы находимся, но Const CSVFile As String не показываетНапример, не принимайте формат (дата, «ммм-гг») в качестве строкового элемента.

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 Ответ

1 голос
/ 21 октября 2019

Я не могу повторить первую проблему (конечная строка (и) разделителей в выходном 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...