使用 VBA 创建的 CSV 文件末尾有空白行,即使单元格为空

CSV file created with VBA has blank row(s) at the end even if cells are empty

我正在工作表的第一列中添加一些数据并使用此代码

Sub createCSVfile()

Dim xRg As Range
Dim xRow As Range
Dim xCell As Range
Dim xStr As String
Dim xTxt As String
Dim xName As Variant

ThisWorkbook.Worksheets("Tabelle1").Range("A1").Value = "XYZ"
ThisWorkbook.Worksheets("Tabelle1").Range("A2").Value = "XYZ"
ThisWorkbook.Worksheets("Tabelle1").Range("A3").Value = "XYZ"
ThisWorkbook.Worksheets("Tabelle1").Range("A4").Value = "XYZ"
ThisWorkbook.Worksheets("Tabelle1").Range("A5").Value = "XYZ"

Set xRg = ThisWorkbook.Worksheets("Tabelle1").Range("A1:A5")
xName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
Open xName For Output As #1
For Each xRow In xRg.Rows
    xStr = ""
    For Each xCell In xRow.Cells
        xStr = xStr & xCell.Value & Chr(9)
    Next
    While Right(xStr, 1) = Chr(9)
        xStr = Left(xStr, Len(xStr) - 1)
    Wend
    Print #1, xStr
Next
Close #1
If Err = 0 Then MsgBox "csv file saved"

End Sub

将其保存为csv并删除所有基于this tutorial的引号。

当我用记事本打开csv时,最后总是至少有一个空行:

如果我手动保存文件并没有什么区别 - 相同的空白行。我还尝试添加类似

的内容

ThisWorkbook.Worksheets("Tabelle1").Rows(6).Delete

但这没有什么区别,因为工作表的第 6 行中没有值。

有没有办法解决这个问题或至少通过记事本自动删除 csv 中的最后一行?

没有空行。您有 5 行,每行都以 CR/LF(回车 Return 和换行)结尾。文本编辑器给你一个空的第 6 行。

为避免这种情况,您必须从第 5 行删除 CR/LF,但通常不会这样做。

这样就好了。

正如评论中Wolfgang Jacques所建议的那样,我使用了这种方法而不是SaveWorkbookAs

Sub CreateAfile
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:\testfile.txt", True)
    a.WriteLine("This is a test.")
    a.Close
End Sub

最后一个条目我使用了 a.Write 而不是 a.WriteLine