【问题标题】:Append Rows to CSV File (VBA)将行追加到 CSV 文件 (VBA)
【发布时间】:2019-10-22 02:54:26
【问题描述】:

我在 MrExcel 上从 TommyGun 借用了以下代码,但遇到了以下困难:

  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 行)创建它。如果是,则追加 (range"A2:S" & lastorw)

【问题讨论】:

  • 不能用动态表达式定义常量,所以试试Dim CsvFile As String,然后赋值CsvFile = Format(Now, "mmm-yy")

标签: excel vba csv


【解决方案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

输入数据:

输出:

【讨论】:

  • 嗨!原因可能是因为原始数据的单元格中有公式......?
  • 是的,如果公式结果为“空”字符串值,可能就是这种情况。
  • 您好!我添加了一个额外的情况,看看你们是否可以帮助我......
  • 如果您有“其他情况”,您应该提出一个新的/单独的问题。这个答案能解决问题吗?如果不是,请在最初提出的问题范围内进行澄清。您可能需要提供一些minimal reproducible example,包括示例输入和输出,以便每个人都可以了解您正在使用的内容。
  • 不,没有直接关系。它仅与您的特定用例有关。此外,这里有几十个问题可以帮助您确定文件是否不存在。您可以尝试打开读取模式并捕获错误,您可以使用 FileSystemObject 方法,或者您可以use Dir function。您可以尝试实现它以及其他逻辑吗?
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 2011-01-22
  • 2019-07-25
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多