Archivo de texto en VBA: Abrir/Buscar Reemplazar/Guardar como/Cerrar archivo
Frecuentes
Visto 158,893 veces
10
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.
5 Respuestas
13
¿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
12
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
8
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
0
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
-1
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 vba text-files or haz tu propia pregunta.
¿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