Как я могу надежно записать текстовый файл из Excel VBA?

Я пытаюсь использовать Excel VBA для записи в текстовый файл. Я делаю несколько из них:

MyFile1 = "C:\outputFromExcel1.txt"
fnum1 = FreeFile()
Open MyFile1 For Output As fnum1

а затем записывая их следующим образом:

Print #fnum1, text

Все переменные, указанные выше, объявляются только с помощью Dim. Я пишу сотни строк в файлы, и очень редко линии усекаются, т.е. Заканчиваются. Есть ли лучший способ записать файл в Excel VBA?

EDIT: Я только что понял, что всегда будут записаны последние строки, которые усекаются. Итак, мне кажется, мне нужно как-то закрыть или сбросить файлы?

Ответы

Ответ 1

Вы можете использовать Close #fnum1, чтобы закрыть дескриптор файла, и он должен очистить содержимое оставшегося буфера.

Ответ 2

Да, вы должны закрывать файлы с помощью метода Close. Я не уверен, что это вызывает проблемы, но вы должны делать это в любом случае.

Если вы делаете много операций с файлами в коде VBA, возможно, стоит посмотреть на использование FSO (FileSystemObject), я думаю, что это было изначально для того, чтобы позволить VBScript выполнять обработку файлов, но я предпочитаю его как для VB6, так и для VBA в обработке файлов. Подробнее см. здесь (и там есть большой пример, показывающий, как делать большинство вещей, которые вам нужны на одной из этих страниц).

Ответ 3

Рассматривали ли вы текст на другом листе (или другой книге), а затем используя:

ActiveWorkbook.SaveAs Filename:="C:\MyFile.txt", FileFormat:=xlText

Не уверен, что это даст вам лучшие результаты (с точки зрения производительности и/или форматирования), но, возможно, стоит попробовать.

Ответ 4

Просто решение некро: я нашел метод Close #1, чтобы оставить усеченный файл. Вместо этого, или в дополнение, используйте Application.Quit для Excel, чтобы закрыть Excel. Это очищает кеш и завершает запись в текстовый файл.