2012-06-20 1 views
2

Это кажется очень легким (я сделал это миллион раз и никогда не испытывал проблем), но он убивает меня.Текст над написанным, когда он должен быть добавлен

Я хочу создать SQL-скрипты на основе содержимого в электронной таблице Excel. Для этого я создал макрос, который считывает текстовый файл, используя приведенный ниже код

Dim fso As FileSystemObject 
Set fso = New FileSystemObject 

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

Это предполагается открыть текстовый файл для добавления и подключить свои новые значения.

К сожалению, это всегда переписывание вместо добавления, и это заставляет меня гайки.

Любые идеи?

+1

Это выглядит может оштрафовать меня ...! – Stian

+0

Можете ли вы вставить код, где вы на самом деле пишете, а затем закрываете файл? –

+0

В коде нет ничего плохого. 'IF' файл существует, он добавится к нему, иначе он создаст файл' New'. Можете ли вы подтвердить, существует ли файл? «Просто выстрел в темноте»: - Что может случиться, так это то, что файл может не существовать, и у вас может сложиться впечатление, что оно переписывается, тогда как оно действительно воссоздает его? –

ответ

9

Я только недавно построили функцию Append строк в файл. Я наткнулся на эту проблему всего несколько недель/месяцев назад и обнаружил, что, если использовать фактическое слово ForAppending, так же, как оно появилось в Intellisense, insted из числа это сработало для меня.

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, он упоминает о том, что константа, соответствующая ForAppending является 8, но он использует 3 в примере на дне.

Try:

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/en-us/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. –

 Смежные вопросы

  • Нет связанных вопросов^_^