2010-06-21 20 views
13

Sto cercando di utilizzare Excel VBA per scrivere su un file di testo. Sto facendo alcuni di questi:Come posso scrivere in un file di testo in modo affidabile da Excel VBA?

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

e quindi scrivendo a loro in questo modo:

Print #fnum1, text 

tutte le variabili di cui sopra sono dichiarati solo con Dim. Scrivo centinaia di righe nei file e, molto raramente, le linee vengono troncate, cioè le estremità vengono tagliate. C'è un modo migliore per scrivere su un file in Excel VBA?

MODIFICA: Mi sono appena reso conto che sono sempre troncate le ultime righe da scrivere. Quindi penso che ho bisogno di chiudere o svuotare i file in qualche modo?

+0

Stai chiudendo il file dopo aver finito di scriverci? La chiusura dovrebbe scaricare le ultime righe sul disco. –

risposta

15

È possibile utilizzare Close #fnum1 per chiudere l'handle del file e svuotare il contenuto del buffer rimanente.

1

avete considerato la scrittura del testo a un altro foglio (o di una cartella di lavoro diverso) e quindi utilizzando:

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

Non sono sicuro se questo darebbe risultati migliori (in termini di prestazioni e/o la formattazione) , ma forse vale la pena provare.

4

Sì, dovresti chiudere i file con il metodo Close. Non sono sicuro se questo è ciò che causa i problemi, ma dovresti farlo in ogni caso.

Se si sta eseguendo molto filehandling nel codice VBA, potrebbe essere utile utilizzare FSO (FileSystemObject), penso che originariamente fosse per consentire a VBScript di eseguire l'elaborazione dei file, ma lo preferisco sia a VB6 che a VBA costruito nella gestione dei file. Vedere here per ulteriori dettagli (e c'è un grande campione che mostra come fare la maggior parte delle cose che ti servono in una di quelle pagine pure).

1

Solo una soluzione necro: ho trovato il metodo Close #1 per lasciare ancora un file troncato. Invece, o in aggiunta a, utilizzare Application.Quit per Excel per chiudere Excel. Questo svuota la cache e completa la scrittura nel file di testo.

Problemi correlati