ForAppending不使用CreateTextFile - VBA

时间:2016-01-14 16:06:42

标签: vba logging

我有这个:

On Error GoTo ErrorHappened
Const ForAppending = 8
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile(ThisWorkbook.path & Application.PathSeparator & "Log.txt", ForAppending, True)
oFile.WriteLine eLogMessage
oFile.Close
Set fso = Nothing
Set oFile = Nothing

追加不起作用。有谁知道为什么这总是覆盖原始文件中的什么?

2 个答案:

答案 0 :(得分:1)

您的代码每次运行时都会创建一个新文件。那是因为你正在使用“.CreateTextFile”。 Hense,不附加当前存在的文件。因此,我们需要检查文件是否存在。如果它不存在,我们将创建一个新文件。如果它已经存在,我们将附加现有文件。

此示例假定“C:”驱动器根目录中的文件夹名为“test”。以下代码有效,可以根据您的需要进行修改。第一次运行代码时,它会创建一个新文件并写入它。创建文件后,它将附加现有文件。

Sub WriteSample()
Dim fso As Object
Dim f As Object
Const ForAppending = 8
Const TristateFalse = 0

Set fso = CreateObject("Scripting.FileSystemObject")

If Not (fso.FileExists("C:\test\testfile.txt")) Then
    Set f = fso.CreateTextFile("C:\test\testfile.txt", ForAppending, TristateFalse)
    f.Write "Hello World!" & vbCrLf
    f.Close

Else
    Set f = fso.OpenTextFile("c:\test\testfile.txt", ForAppending, TristateFalse)
    f.Write "Hello World Again!" & vbCrLf
    f.Close

End If
Set fso = Nothing
Set oFile = Nothing

End Sub

答案 1 :(得分:0)

您可以使用CreateTextFile(..., ForAppending, True)代替OpenTextFile(..., ForAppending, True),其中True的意思是“如果不存在则创建”。参见opentextfile-method