Как я могу надежно записать в текстовый файл из Excel VBA? - PullRequest
13 голосов
/ 21 июня 2010

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

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

и затем пишу им так:

Print #fnum1, text

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

РЕДАКТИРОВАТЬ: Я только что понял, что это всегда последние записываемые строки, которые усекаются.Итак, я думаю, мне нужно как-то закрыть или очистить файлы?

Ответы [ 4 ]

15 голосов
/ 21 июня 2010

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

4 голосов
/ 21 июня 2010

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

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

1 голос
/ 21 мая 2013

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

1 голос
/ 21 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...