当它应该被附加时,文本被覆盖

时间:2012-06-20 19:12:39

标签: vba file-io filesystemobject

这看起来真的很容易(我已经完成了一百万次并且从来没有遇到过问题),但这让我很难过。

我想根据Excel电子表格中的内容创建一些SQL脚本。为此,我创建了一个宏,使用下面的代码读取文本文件

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim stream As TextStream
Set stream = fso.OpenTextFile(filepath, 8, False)

这是假设打开文本文件以追加并插入我的新值。

不幸的是,它总是覆盖而不是追加,这让我疯狂。

有什么想法吗?

3 个答案:

答案 0 :(得分:10)

我刚刚建立了一个将字符串附加到文件的函数。我在几个星期/几个月前遇到过这个问题,发现如果使用实际的单词 ForAppending ,就像在Intellisense中显示的那样,输入数字 8 为我工作。

Const ForAppending = 8

Sub AppendStringToFile(ByVal strFile As String, ByVal strNewText As String, Optional intBlankLine As Integer = 1)

Dim fso as FileSystemObject, ts as TextStream

Set fso = New FileSystemObject
Set ts = fso.OpenTextFile(strFile, ForAppending, True)

With ts
    .WriteBlankLines intBlankLine
    .WriteLine (strNewText)
    .Close
End With

Set ts = Nothing
Set fso = Nothing

End Sub

答案 1 :(得分:7)

回归基础......
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

用于您的要求:

Dim FNum As Integer

FNum = FreeFile()
Open strFile For Append As FNum

'do your stuff here
Write #FNum, MyData

Close FNum

答案 2 :(得分:-3)

这很奇怪,在this documentation中,它提到与ForAppending对应的常量为8,但它在底部的示例中使用3

尝试:

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim stream As TextStream
Set stream = fso.OpenTextFile(filepath, 3, False)