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

问题描述

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

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时,最后总是至少有一个空行:

enter image description here

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

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

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

是否可以解决此问题,或者至少可以通过记事本自动删除csv中的最后一行?

解决方法

没有空白行。您有5行,每行以CR / LF(回车和换行)结尾。文本编辑器为您提供第六行空白。

为避免这种情况,您必须从第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