2012-05-03 7 views
5

Aquí es pseudocódigo para lo que espero hacer:archivo de texto en VBA: Abrir/Buscar Reemplazar/Guardar como/Cerrar archivo

Open text File 

Find "XXXXX" and Replace with "YYYY" 

Save text File As 

Close text file 

Esto es lo que tengo hasta ahora

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 

Pero en lugar de sobrescribir el archivo de texto original, quiero "guardar como" en un nuevo archivo.

Respuesta

5

Sólo tiene que añadir esta línea

sFileName = "C:\someotherfilelocation" 

justo antes de esta línea

Open sFileName For Output As iFileNum 

La idea es abrir y escribir en un archivo diferente que la que se lee antes (C:\filelocation)

Si usted desea conseguir la suposición y mostrar un verdadero "Guardar como" cuadro de diálogo, se puede hacer esto en su lugar:

sFileName = Application.GetSaveAsFilename() 
8

¿Por qué utilizar el Bloc de notas?

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

¿De todos modos puedo hacer un Guardar como dentro de este código? –

+0

¿Cómo es este código diferente del código en la pregunta? –

+2

Ahora que el OP ha copiado/pegado en la versión * editada * de la pregunta original ... en absoluto. ;-) Gracias por agregar la corrección Guardar como (a un nombre de archivo diferente). –

-1

Este código se abrirá y leer las líneas de archivo de texto completa esa variable "ReadedData "Mantiene la línea de texto en la memoria

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

do until EOF(1) 

     Input #1, ReadedData 
loop** 
+0

Esto no resuelve la pregunta. – Smandoli

3

supongo que soy demasiado tarde ...

encontramos con el mismo problema hoy en día; aquí está mi solución utilizando 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

he tenido el mismo problema y llegó acrosse este sitio.

la solución a simplemente poner a otro "nombre de archivo" en el

... para la salida como ... mando era muy simple y útil.

además (más allá del Application.GetSaveAsFilename() diálogo)

es muy fácil de configurar un nuevo nombre de archivo ** ** simplemente usando

la reemplazar de comandos, por lo que puede cambie el nombre de archivo/extensión

por ejemplo. (A partir del primer mensaje)

sFileName = "C:\filelocation" 
iFileNum = FreeFile 

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

Close iFileNum 

ahora acaba de establecer:

newfilename = sustituir (sfilename, ".txt",".csv ") para cambiar la extensión

o

newfilename = sustituir (sfilename,". ", "_edit.") un nombre de archivo differrent

y luego simplemente como antes

iFileNum = FreeFile 
Open newFileName For Output As iFileNum 

Print #iFileNum, content 
Close iFileNum 

navegaba más de una hora para averiguar cómo cambiar el nombre de un archivo txt,

con muchas soluciones diferentes, pero podría ser tan fácil :)

Cuestiones relacionadas