Vervang tekst in een tekstbestand met VBA in Microsoft Excel

Anonim

De onderstaande macro's kunnen worden gebruikt om tekst in een tekstbestand te vervangen,
bijv. wanneer u een kolomscheidingsteken in een tekstbestand wilt wijzigen
voordat u het in een Excel-werkblad importeert of nadat u een werkblad naar een tekstbestand exporteert.

Sub ReplaceTextInFile(SourceFile As String, _ sText As String, rText As String) Dim TargetFile As String, tLine As String, tString As String Dim p As Integer, i As Long, F1 As Integer, F2 As Integer TargetFile = "RESULT.TMP " If Dir(SourceFile) = "" Dan Sub afsluiten If Dir(TargetFile) "" Dan bij fout Hervatten Volgende Kill TargetFile Bij fout GoTo 0 If Dir(TargetFile) "" Dan MsgBox TargetFile & _ " al geopend, sluiten en verwijderen / hernoem het bestand en probeer het opnieuw.", _ vbCritical Exit Sub End If End If F1 = FreeFile Open SourceFile For Input As F1 F2 = FreeFile Open TargetFile For Output As F2 i = 1 ' line counter Application.StatusBar = "Gegevens lezen van " & _ TargetFile & "… " While Not EOF(F1) If i Mod 100 = 0 Then Application.StatusBar = _ "Reading line #" & i & " in " & _ TargetFile & "… " Line Input #F1, tLine If sText "" Dan ReplaceTextInString tLine, sText, rText End If Print #F2, tLine i = i + 1 Wend Application.StatusBar = "Bestanden sluiten… " Sluit F1 Sluit F2 Kill SourceFile ' delete of oorspronkelijke bestandsnaam TargetFile As SourceFile ' hernoem tijdelijk bestand Application.StatusBar = False End Sub Private Sub ReplaceTextInString(SourceString As String, _ SearchString As String, ReplaceString As String) Dim p As Integer, NewString As String Do p = InStr(p + 1 , UCase(SourceString), UCase(SearchString)) Als p > 0 Dan ' vervang SearchString door ReplaceString NewString = "" Als p > 1 Dan 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) Then p = 0 Loop Tot p = 0 End Sub Sub TestReplaceTextInFile() ReplaceTextInFile ThisWorkbook.Path & _ "\ReplaceInTextFile.txt", "|", ";" ' vervangt alle pipe-tekens (|) door puntkomma's (;) End Sub