2010-06-21 80 views
13

我正在尝试使用Excel VBA写入文本文件。我在做其中的几个:如何从Excel VBA可靠地写入文本文件?

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

,然后像这样写对他们说:

Print #fnum1, text 

在上述所有变量的声明只是Dim。我正在写几百行文件,而且很少会有线被截断 - 即结束被截断。有没有更好的方法在Excel VBA中写入文件?

编辑:我刚刚意识到,它总是被写入被截断的最后一行。所以我想我需要关闭或刷新文件?

+0

在写完文件后是否关闭了文件?关闭应该将最后一行刷新到磁盘。 – 2010-06-21 14:48:35

回答

15

您可以使用Close #fnum1来关闭文件句柄,它应该清空剩余的缓冲区内容。

1

你有没有考虑写作文到不同的表(或不同的工作簿),然后使用:

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

不知道这是否会带来更好的效果(在性能和/或格式条款) ,但也许值得一试。

4

是的,你应该用Close方法关闭文件。我不确定这是什么原因导致的问题,但你应该这样做。

如果你在VBA代码中做了很多文件处理,可能值得使用FSO(FileSystemObject),我认为它最初是为了让VBScript做文件处理,但我更喜欢VB6和VBA内置文件处理。 有关更多详细信息,请参阅here(并且还有一个大样本展示了如何在其中一个页面中完成所需的大部分工作)。

1

只是一个necro解决方案:我发现Close #1方法仍然留下一个截断的文件。相反或除此之外,使用Excel的Application.Quit关闭Excel。这会刷新缓存并完成对文本文件的写入。