Ответ 1
Вы можете использовать Close #fnum1
, чтобы закрыть дескриптор файла, и он должен очистить содержимое оставшегося буфера.
Я пытаюсь использовать Excel VBA для записи в текстовый файл. Я делаю несколько из них:
MyFile1 = "C:\outputFromExcel1.txt"
fnum1 = FreeFile()
Open MyFile1 For Output As fnum1
а затем записывая их следующим образом:
Print #fnum1, text
Все переменные, указанные выше, объявляются только с помощью Dim
. Я пишу сотни строк в файлы, и очень редко линии усекаются, т.е. Заканчиваются. Есть ли лучший способ записать файл в Excel VBA?
EDIT: Я только что понял, что всегда будут записаны последние строки, которые усекаются. Итак, мне кажется, мне нужно как-то закрыть или сбросить файлы?
Вы можете использовать Close #fnum1
, чтобы закрыть дескриптор файла, и он должен очистить содержимое оставшегося буфера.
Да, вы должны закрывать файлы с помощью метода Close
. Я не уверен, что это вызывает проблемы, но вы должны делать это в любом случае.
Если вы делаете много операций с файлами в коде VBA, возможно, стоит посмотреть на использование FSO (FileSystemObject), я думаю, что это было изначально для того, чтобы позволить VBScript выполнять обработку файлов, но я предпочитаю его как для VB6, так и для VBA в обработке файлов. Подробнее см. здесь (и там есть большой пример, показывающий, как делать большинство вещей, которые вам нужны на одной из этих страниц).
Рассматривали ли вы текст на другом листе (или другой книге), а затем используя:
ActiveWorkbook.SaveAs Filename:="C:\MyFile.txt", FileFormat:=xlText
Не уверен, что это даст вам лучшие результаты (с точки зрения производительности и/или форматирования), но, возможно, стоит попробовать.
Просто решение некро: я нашел метод Close #1
, чтобы оставить усеченный файл. Вместо этого, или в дополнение, используйте Application.Quit
для Excel, чтобы закрыть Excel. Это очищает кеш и завершает запись в текстовый файл.