Search code examples
vbareplacefind

Find and Replace text with tabs and line breaks in VBA


I am trying to replace part of the code in my Python script using VBA.

I need to replace two lines of code with nothing. The VBA is not able to "find" these two lines in the code, which I think is because of the spaces, tabs in the Python script.

strContents = Replace(strContents, "if time == 12:" & vbNewLine & vbTab & "Freq = 1", "")
' *** THIS IS THE MOST CRUCIAL LINE - WHICH IS FAILING RIGHT NOW***

I am not adding the rest of the code of finding and replacing as it works, and the issue is finding this particular expression.

The Python script I am trying to delete (or replace with nothing):

            if time == 12:
                Freq = 1
            else:
                Freq = 12

In another attempt, I tried counting the number of spaces, and asking the VBA to find the text in the Python script with the number of spaces I could count in the script.


Solution

  • Thanks @Aldert for responding, here is the entire code :

     Sub FindReplaceTrials()
    
    Dim objFSO
    Const ForReading = 1
    Const ForWriting = 2
    Dim objTS 'define a TextStream object
    Dim strContents As String
    Dim path As String
    Dim fileSpec As String
    Dim filename As String
    
    path = Application.ActiveWorkbook.path
    
    For m = 4 To 11 ' we need to make this dynamic too
        filename = Worksheets("ScriptName").Cells(m, 1).Value
        fileSpec = path & "\" & filename & ".py"
        'MsgBox (vbCrLf & vbTab & "else:")
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objTS = objFSO.OpenTextFile(fileSpec, ForReading)
        If Worksheets(4).Range("B" & 7).Value = 1 Then
            If filename = "econ" Then
                strContents = objTS.ReadAll
                strContents = Replace(strContents, "if time == 12:" & vbCrLf & Space(20) & "freq = 1" & vbCrLf & Space(16) & "else:" & vbCrLf & Space(20) & "freq = 12", "freq = 12")
            Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting)
            objTS.Write strContents
            objTS.Close
                End If
        End If
        objTS.Close
        Next
    
    End Sub
    

    The vbCrLf & Space() objects worked to find the right sentences in the script.