2010-06-21 35 views
13

Tôi đang cố gắng sử dụng Excel VBA để ghi vào một tệp văn bản. Tôi đang làm một vài trong số những:Làm thế nào tôi có thể ghi vào một tập tin văn bản đáng tin cậy từ Excel VBA?

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

và sau đó viết cho họ như thế này:

Print #fnum1, text 

Tất cả các biến ở trên được khai báo chỉ với Dim. Tôi đang viết hàng trăm dòng cho các tệp và, rất hiếm khi, các dòng đang được cắt ngắn - tức là các đầu đang được cắt nhỏ. Có cách nào tốt hơn để ghi vào một tập tin trong Excel VBA?

CHỈNH SỬA: Tôi vừa nhận ra rằng đó luôn là dòng cuối cùng được viết bị cắt bớt. Vì vậy, tôi đoán tôi cần phải đóng hoặc tuôn ra các tập tin bằng cách nào đó?

+0

Bạn có đóng tệp sau khi bạn đã hoàn tất việc ghi tệp không? Việc đóng nên tuôn ra dòng cuối cùng vào đĩa. –

Trả lời

15

Bạn có thể sử dụng Close #fnum1 để đóng bộ xử lý tệp và cần xóa nội dung bộ đệm còn lại.

1

Bạn đã xem văn bản cho văn bản để một tờ khác (hoặc một bảng tính khác nhau) và sau đó sử dụng:

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

Không chắc chắn nếu điều này sẽ cung cấp cho bạn kết quả tốt hơn (về mặt hiệu suất và/hoặc định dạng) , nhưng có lẽ đáng để thử.

4

Có, bạn nên đóng các tệp bằng phương pháp Close. Tôi không chắc đó có phải là nguyên nhân gây ra vấn đề hay không nhưng bạn cũng nên làm điều đó.

Nếu bạn đang thực hiện nhiều thao tác trong mã VBA, bạn có thể xem xét việc sử dụng FSO (FileSystemObject), tôi nghĩ ban đầu nó cho phép VBScript xử lý tệp, nhưng tôi thích nó cho cả VB6 và VBA được xây dựng trong xử lý tệp. Xem here để biết thêm chi tiết (và có một mẫu lớn cho thấy cách thực hiện hầu hết những thứ bạn cần ở một trong các trang đó).

1

Chỉ cần một giải pháp necro: Tôi đã tìm thấy phương pháp Close #1 để vẫn để lại tệp bị cắt ngắn. Thay vào đó, hoặc ngoài việc sử dụng Application.Quit để Excel đóng Excel. Thao tác này sẽ xóa bộ đệm và hoàn tất ghi vào tệp văn bản.

Các vấn đề liên quan