我有以下vba代码,它使用TextStream将ArrayList中的项目写入文件。
Sub WriteListAsCSV(list As Object, filePath As String)
Dim fso As New FileSystemObject
Dim ts As TextStream
Set ts = fso.CreateTextFile(filePath, True)
Dim line As Variant
For Each line In list
ts.WriteLine (line)
Next line
ts.Close
End Sub
问题是我在文件末尾有额外的换行符。
我可以这样做,但我不想在每个循环检查该单一换行符。
Sub WriteListAsCSV(list As Object, filePath As String)
Dim fso As New FileSystemObject
Dim ts As TextStream
Set ts = fso.CreateTextFile(filePath, True)
Dim line As Variant
Dim i As Integer
For i = 0 To list.Count
line = list(i)
ts.Write (line)
'If not last line
If Not i = list.Count Then
'Write blankline
ts.WriteLine()
End If
Next
ts.Close
End Sub
有没有办法在VBA中删除一个字符,如 Backspace 按钮?还是另外一个巧妙的技巧呢?
答案 0 :(得分:3)
我的想法是使用文件长度删除与换行符相对应的最后一个字符集,Chr(10)
或Chr(13)
,有时两者都是。
当我检查如何使用某个功能时,我发现了这个: Remove last carriage return file ,这完全涵盖了我的想法......
也许看看它很清楚。
编辑(cf @ Siddharth Rout评论)
修改和评论版本的代码(如果链接死亡。我不相信此代码)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("path\to\file", 1) ' -- 1:read
strFile = objFile.ReadAll
objFile.Close
' We check if the two last characters correspond to a linebreak:
If Right(strFile, 2) = vbCrLf Then
' If so, we remove those charaters:
strFile = Left(strFile, Len(strFile)- 2)
Set objFile = objFSO.OpenTextFile("path\to\file", 2) ' -- 2:write
objFile.Write strFile
objFile.Close
End If
我不确定这是更优雅的方式,但它似乎是一个非常有效的方法。希望这对你有用。