Poniższe makra mogą służyć do zamiany tekstu w pliku tekstowym,
np. kiedy chcesz zmienić separator kolumn w pliku tekstowym
przed zaimportowaniem go do arkusza programu Excel lub po wyeksportowaniu arkusza do pliku tekstowego.
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 = "WYNIK.TMP " If Dir(SourceFile) = "" To wyjdź z Sub If Dir(TargetFile) "" To w przypadku błędu Wznów Następny Kill TargetFile w przypadku błędu GoTo 0 If Dir(TargetFile) "" Then MsgBox TargetFile & _ " już otwarty, zamknięty i usunięty / zmień nazwę pliku i spróbuj ponownie.", _ 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 ' licznik linii Application.StatusBar = "Odczyt danych z " & _ TargetFile & "… " While Not EOF(F1) If i Mod 100 = 0 Then Application.StatusBar = _ "Linia odczytu #" & i & " in " & _ TargetFile & "… " Line Input #F1, tLine If sText "" Then ReplaceTextInString tLine, sText, rText End If Print #F2, tLine i = i + 1 Wend Application.StatusBar = "Zamykanie plików… " Zamknij F1 Zamknij F2 Kill SourceFile ' usuń lub nazwa pliku pierwotnego TargetFile As SourceFile ' zmień nazwę pliku tymczasowego 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)) If p > 0 Then ' zamień SearchString na ReplaceString NewString = "" If p > 1 Then 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 Pętla do p = 0 End Sub TestReplaceTextInFile() ReplaceTextInFile ThisWorkbook.Path & _ "\ReplaceInTextFile.txt", "|", ";" ' zastępuje wszystkie znaki kreski pionowej (|) średnikami (;) End Sub