Замена строки в строке в VBA очень проста, если используется Replace()
. В любом случае, если пропустить Replace()
, это становится более интересным. Теоретически, строку всегда можно разбить на 3 части:
Первая часть - строка для замены - Последняя часть
Даже когда FirstPart
или / и LastPart
с длиной 0, деление должно быть сделано. Затем, удалив StringToReplace
из строки полностью и в ее положении, запишите новую строку. Позиция определяется с помощью IsStr
. Его можно использовать как функцию, используя обработчики ошибок для возврата исходного выражения, если find
не является частью строки:
Function Replace2(expression As String, find As String, replace As String) As String
On Error GoTo replace2_Error
Replace2 = expression
Dim position As Long: position = InStr(1, expression, find)
Replace2 = Left(expression, position - 1)
Replace2 = Replace2 & Mid(expression, position + Len(find))
Replace2 = Left(Replace2, position - 1) & _
replace & _
Right(Replace2, Len(Replace2) - position + 1)
Exit Function
replace2_Error:
Replace2 = expression
End Function
И тесты функции:
Sub TestMe()
Debug.Print Replace2("1", "", "")
Debug.Print Replace2("1", "", "2")
Debug.Print Replace2("", "3", "")
Debug.Print Replace2("32", "a", "")
Debug.Print Replace2("My Very Interesting Long Starting Text", "Starting", "Ending")
Debug.Print Replace2("My Very Interesting Long Text Starting", "Starting", "Ending")
Debug.Print Replace2("Starting My Very Interesting Long Text", "Starting", "Ending")
End Sub