Reemplazar texto en un archivo de texto usando VBA en Microsoft Excel

Anonim

Las macros siguientes se pueden utilizar para reemplazar texto en un archivo de texto,
p.ej. cuando desee cambiar un separador de columna en un archivo de texto
antes de importarlo a una hoja de cálculo de Excel o después de exportar una hoja de cálculo a un archivo de texto.

Sub ReplaceTextInFile (SourceFile como cadena, _ sText como cadena, rText como cadena) Dim TargetFile como cadena, tLine como cadena, tString como cadena Dim p como entero, i tan largo, F1 como entero, F2 como entero TargetFile = "RESULT.TMP "If Dir (SourceFile) =" "Entonces Salir de Sub If Dir (TargetFile)" "Luego en caso de error Continuar Siguiente Eliminar TargetFile en caso de error Ir a 0 Si Dir (TargetFile)" "Entonces MsgBox TargetFile & _" ya está abierto, cerrar y eliminar / cambie el nombre del archivo y vuelva a intentarlo. ", _ vbCritical Exit Sub End If End If F1 = FreeFile Abrir archivo de código fuente para la entrada como F1 F2 = FreeFile Abrir el archivo de destino para la salida como F2 i = 1 'contador de línea Application.StatusBar =" Leyendo datos de " & _ TargetFile & "…" mientras no es EOF (F1) If i Mod 100 = 0 Then Application.StatusBar = _ "Reading line #" & i & "in" & _ TargetFile & "…" Entrada de línea # F1, tLine If sText "" Luego ReplaceTextInString tLine, sText, rText End If Print # F2, tLine i = i + 1 Wend Application.StatusBar = "Cerrando archivos …" Cerrar F1 Cerrar F2 Kill SourceFile 'eliminar o Nombre del archivo original TargetFile As SourceFile 'renombrar el archivo temporal Application.StatusBar = False End Sub Private Sub ReplaceTextInString (SourceString como cadena, _ SearchString como cadena, ReplaceString como cadena) Dim p como entero, NewString como cadena Do p = InStr (p + 1 , UCase (SourceString), UCase (SearchString)) Si p> 0 Entonces 'reemplace SearchString con ReplaceString NewString = "" Si p> 1 Entonces NewString = Mid (SourceString, 1, p - 1) NewString = NewString + ReplaceString NewString = NewString + Mid (SourceString, _ p + Len (SearchString), Len (SourceString)) p = p + Len (ReplaceString) - 1 SourceString = NewString End If If p> = Len (NewString) Entonces p = 0 Bucle hasta p = 0 End Sub Sub TestReplaceTextInFile () ReplaceTextInFile ThisWorkbook.Path & _ "\ ReplaceInTextFile.txt", "|", ";" 'reemplaza todos los caracteres de barra vertical (|) con punto y coma (;) End Sub