2012-05-03 10 views
5

Ecco pseudocodice per quello che sto sperando di fare:file di testo in VBA: Open/Trova Sostituire/Salva con nome/Chiudi file

Open text File 

Find "XXXXX" and Replace with "YYYY" 

Save text File As 

Close text file 

Questo è quello che ho finora

Private Sub CommandButton1_Click() 

Dim sBuf As String 
Dim sTemp As String 
Dim iFileNum As Integer 
Dim sFileName As String 

' Edit as needed 
sFileName = "C:\filelocation" 

iFileNum = FreeFile 
Open sFileName For Input As iFileNum 

Do Until EOF(iFileNum) 
Line Input #iFileNum, sBuf 
sTemp = sTemp & sBuf & vbCrLf 
Loop 
Close iFileNum 

sTemp = Replace(sTemp, "DIM A", "1.75") 
sTemp = Replace(sTemp, "DIM B", "2.00") 
sTemp = Replace(sTemp, "DIM C", "3.00") 
sTemp = Replace(sTemp, "DIM D", "4.00") 

'Save txt file as (if possible) 

iFileNum = FreeFile 
Open sFileName For Output As iFileNum 

Print #iFileNum, sTemp 

Close iFileNum 

'Close Userform 
Unload UserForm1 

End Sub 

Ma invece di sovrascrivere il file di testo originale, voglio "salvare come" in un nuovo file.

risposta

5

Basta aggiungere questa linea

sFileName = "C:\someotherfilelocation" 

a destra prima di questa linea

Open sFileName For Output As iFileNum 

L'idea è di aprire e scrivere in un altro file rispetto a quello che leggete in precedenza (C:\filelocation).

Se si desidera ottenere fantasia e mostrare un vero e proprio "Salva con nome" finestra di dialogo, si potrebbe fare questo, invece:

sFileName = Application.GetSaveAsFilename() 
8

Perché coinvolgere il Blocco note?

Sub ReplaceStringInFile() 

Dim sBuf As String 
Dim sTemp As String 
Dim iFileNum As Integer 
Dim sFileName As String 

' Edit as needed 
sFileName = "C:\Temp\test.txt" 

iFileNum = FreeFile 
Open sFileName For Input As iFileNum 

Do Until EOF(iFileNum) 
    Line Input #iFileNum, sBuf 
    sTemp = sTemp & sBuf & vbCrLf 
Loop 
Close iFileNum 

sTemp = Replace(sTemp, "THIS", "THAT") 

iFileNum = FreeFile 
Open sFileName For Output As iFileNum 
Print #iFileNum, sTemp 
Close iFileNum 

End Sub 
+0

Esiste comunque un salvataggio come in questo codice? –

+0

In che modo questo codice è diverso dal codice nella domanda ?! –

+2

Ora che l'OP lo ha copiato/incollato nella versione * modificata * della domanda originale ... non del tutto. ;-) Grazie per aver aggiunto la correzione Salva con nome (a nome file diverso). –

-1

Questo codice aprire e leggere righe del file di testo completo che "ReadedData variabile "Contiene la riga di testo in memoria

Open "C:\satheesh\myfile\Hello.txt" For Input As #1 

do until EOF(1) 

     Input #1, ReadedData 
loop** 
+0

Questo non risolve la domanda. – Smandoli

3

credo di essere troppo tardi ...

mi sono imbattuto lo stesso problema di oggi; ecco la mia soluzione con FileSystemObject:

Dim objFSO 
Const ForReading = 1 
Const ForWriting = 2 
Dim objTS 'define a TextStream object 
Dim strContents As String 
Dim fileSpec As String 

fileSpec = "C:\Temp\test.txt" 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading) 
strContents = objTS.ReadAll 
strContents = Replace(strContents, "XXXXX", "YYYY") 
objTS.Close 

Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting) 
objTS.Write strContents 
objTS.Close 
0

ho avuto lo stesso problema ed è venuto acrosse questo sito.

la soluzione appena settata altro "nome" nella

... per la produzione che ... comando era molto semplice e utile.

oltre (al di là del Application.GetSaveAsFilename() Dialog)

è molto semplice per impostare un nuovo nome ** ** usando solo

il sostituire comando, così si può cambia il nome file/l'estensione

es. (A partire dal primo post)

sFileName = "C:\filelocation" 
iFileNum = FreeFile 

Open sFileName For Input As iFileNum 
content = (...edit the content) 

Close iFileNum 

ora basta impostare:

NewFileName = sostituire (sFileName, ".txt",".csv ") per modificare l'estensione

o

NewFileName = replace (sFileName,". ", "_edit.") un nome di file differrent

e quindi come prima

iFileNum = FreeFile 
Open newFileName For Output As iFileNum 

Print #iFileNum, content 
Close iFileNum 

ho navigato più di un'ora per trovare il modo di rinominare un file in formato .txt,

con molte soluzioni diverse, ma potrebbe essere semplicissimo :)

Problemi correlati