Archivo de texto en VBA: Abrir/Buscar Reemplazar/Guardar como/Cerrar archivo

Aquí está el pseudocódigo de lo que espero hacer:

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.

preguntado el 03 de mayo de 12 a las 16:05

5 Respuestas

¿Por qué involucrar 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

contestado el 03 de mayo de 12 a las 16:05

¿En qué se diferencia este código del código de la pregunta? - Jean-François Corbett

Ahora que el OP lo ha copiado/pegado en el editado versión de la pregunta original... para nada. ;-) Gracias por agregar la solución Guardar como (a un nombre de archivo diferente). - steve rindsberg

Supongo que llego demasiado tarde...

Encontré el mismo problema hoy; aquí está mi solución usando 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

Respondido 22 Abr '17, 19:04

Agradable y probablemente más rápido que las otras propuestas - patricio honorez

Lo mejor de mi elección. - Chandan B

Solo agrega 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 una experiencia diferente archivo que el que leyó antes (C:\filelocation).

Si desea ser elegante y mostrar un cuadro de diálogo real "Guardar como", puede hacer esto en su lugar:

sFileName = Application.GetSaveAsFilename()

Respondido 06 Jul 16, 11:07

He tenido el mismo problema y encontré este sitio.

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

... para salida como ... comando fue muy simple y útil.

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

es muy simple establecer un ** nuevo nombre de archivo ** simplemente usando

La reemplazar comando, por lo que puede cambiar el nombre de archivo/extensión

p.ej. (a partir del primer mensaje)

sFileName = "C:\filelocation"
iFileNum = FreeFile

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

Close iFileNum

ahora solo configura:

newFilename = replace(sFilename, ".txt", ".csv") para cambiar la extensión

or

newFilename = replace(sFilename, ".", "_edit.") para un nombre de archivo diferente

y luego como antes

iFileNum = FreeFile
Open newFileName For Output As iFileNum

Print #iFileNum, content
Close iFileNum 

Navegué más de una hora para descubrir cómo cambiar el nombre de un archivo txt,

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

Respondido el 05 de enero de 18 a las 15:01

Este código abrirá y leerá líneas de un archivo de texto completo. Esa variable "ReadedData" contiene 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**

Respondido 17 Jul 13, 16:07

Esto no resuelve la pregunta. - Smandoli

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.