2012-06-20 54 views
2

這看起來很簡單(我已經完成了一百萬次,從來沒有遇到過任何問題),但是這會讓我失望。當它應該被追加時,文本正在被覆蓋

我想根據Excel電子表格中的內容創建一些SQL腳本。要做到這一點我創建了一個宏讀取使用下面的代碼

Dim fso As FileSystemObject 
Set fso = New FileSystemObject 

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

一個文本文件,這是應該打開文本文件進行追加,並插入我的新的價值觀。

不幸的是,它總是覆蓋而不是追加,它是讓我瘋了。

任何想法?

+1

這看起來可能沒什麼問題...! – Stian

+0

您可以將代碼粘貼到實際正在寫入的位置,然後關閉該文件? –

+0

你的代碼沒有問題。如果文件存在,它會附加到它,否則它會創建一個New文件。你能確認文件是否存在? 「只是在黑暗中拍攝」: - 可能發生的情況是該文件可能不存在,您可能會覺得它是覆蓋,而實際上是重新創建它? –

回答

9

我剛剛建立了一個功能字符串追加到文件中。我在短短几周/幾個月前遇到過這個問題,發現如果使用實際的字ForEppending,就像在Intellisense中顯示的一樣,它的編號爲它對我很有用。

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 
+2

Const ForReading = 1,ForWriting = 2,ForAppending = 8 – Stian

+1

@Stian - 如果我沒有記錯的話,我嘗試過使用它,但它與我一起玩,這就是爲什麼我最終使用了文本版本。前一段時間,我解決了它,但我認爲那是我的過程,因爲我記得感受到OP的痛苦! –

+2

你應該考慮把它編輯成一個Sub並聲明你的變量和常量。 – JimmyPena

-3

這是非常奇怪,在this documentation,它提到,常數對應於ForAppending8,但它在本例中在底部使用3

嘗試:

Dim fso As FileSystemObject 
Set fso = New FileSystemObject 

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

爲什麼猜測?張貼之前自己嘗試一下。如果你這樣做了,你會發現它不會以3作爲參數進行編譯。在那個舊文檔的例子中有一個錯誤;應該查閱[較新的FileSystemObject文檔](http://msdn.microsoft.com/zh-cn/library/314cz14s%28v=vs.85%29.aspx)。 –

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 
+0

這些基礎知識對於ASCII文本很適用,但如果你正在使用例如中文/日文/等等,將會損壞結果。爲此,您需要寫入一個Unicode文件。爲此,請將True作爲第四個參數添加到OpenTextFile。 –