VB6Parse / Library / String / replace

VB6 Library Reference

Replace Function

Returns a string in which a specified substring has been replaced with another substring a specified number of times.

Syntax

Replace(expression, find, replace, [start], [count], [compare])

Parameters

Compare Values

Constant Value Description
vbBinaryCompare 0 Perform a binary comparison (case-sensitive)
vbTextCompare 1 Perform a textual comparison (case-insensitive)
vbDatabaseCompare 2 Perform a comparison based on database settings (Microsoft Access only)

Return Value

Returns a String with the replacements made. The return value depends on the parameters:

If Replace Returns
expression is zero-length Zero-length string ("")
expression is Null An error
find is zero-length Copy of expression
replace is zero-length Copy of expression with all find occurrences removed
start > Len(expression) Zero-length string ("")
count is 0 Copy of expression

Remarks

The Replace function returns a string with substitutions made. Unlike the Replace method of regular expressions, this function performs simple string substitution without pattern matching. The return value of the Replace function is a string that begins at the position specified by start, with substitutions made, and concludes at the end of the expression string. It is not a copy of the original string from start to finish. Important Notes: - If start is specified, the return value starts from that position, not from position 1 - The original string before start position is not included in the result - Use count parameter to limit the number of replacements - Binary comparison (default) is case-sensitive; textual comparison is case-insensitive - Empty find string returns the original expression unchanged - Empty replace string removes all occurrences of find

Typical Uses

  1. Text Sanitization: Remove or replace unwanted characters from user input
  2. Data Formatting: Replace delimiters or format characters in data
  3. Template Processing: Replace placeholders in template strings
  4. Path Manipulation: Replace path separators or modify file paths
  5. Case Normalization: Replace mixed-case text with standardized case
  6. String Cleaning: Remove multiple spaces, tabs, or other whitespace
  7. Data Import/Export: Convert between different data formats
  8. SQL String Building: Escape quotes and special characters

Basic Examples

Example 1: Simple Replacement

Dim result As String
result = Replace("Hello World", "World", "VB6")
' Returns: "Hello VB6"

Example 2: Case-Insensitive Replacement

Dim result As String
result = Replace("Hello WORLD", "world", "VB6", 1, -1, vbTextCompare)
' Returns: "Hello VB6"

Example 3: Remove Substring

Dim cleaned As String
cleaned = Replace("Remove   extra   spaces", "   ", " ")
' Returns: "Remove extra spaces"

Example 4: Limited Replacements

Dim result As String
result = Replace("one, two, three, four", ", ", " | ", 1, 2)
' Returns: "one | two | three, four" (only first 2 commas replaced)

Common Patterns

Pattern 1: RemoveAllSpaces

Function RemoveAllSpaces(text As String) As String
    RemoveAllSpaces = Replace(text, " ", "")
End Function

Pattern 2: NormalizeWhitespace

Function NormalizeWhitespace(text As String) As String
    Dim result As String
    result = text
    ' Replace tabs with spaces
    result = Replace(result, vbTab, " ")
    ' Replace multiple spaces with single space
    Do While InStr(result, "  ") > 0
        result = Replace(result, "  ", " ")
    Loop
    NormalizeWhitespace = Trim(result)
End Function

Pattern 3: EscapeSQLString

Function EscapeSQLString(text As String) As String
    ' Escape single quotes for SQL
    EscapeSQLString = Replace(text, "'", "''")
End Function

Pattern 4: ReplaceMultiple

Function ReplaceMultiple(text As String, findList() As String, _
                         replaceList() As String) As String
    Dim i As Integer
    Dim result As String
    result = text
    For i = LBound(findList) To UBound(findList)
        result = Replace(result, findList(i), replaceList(i))
    Next i
    ReplaceMultiple = result
End Function

Pattern 5: ReplaceCaseInsensitive

Function ReplaceCaseInsensitive(text As String, find As String, _
                               replaceWith As String) As String
    ReplaceCaseInsensitive = Replace(text, find, replaceWith, 1, -1, vbTextCompare)
End Function

Pattern 6: ReplaceSpecialChars

Function ReplaceSpecialChars(text As String, replacement As String) As String
    Dim result As String
    Dim specialChars As String
    Dim i As Integer
    result = text
    specialChars = "!@#$%^&*()[]{}|;:,.<>?/"
    For i = 1 To Len(specialChars)
        result = Replace(result, Mid(specialChars, i, 1), replacement)
    Next i
    ReplaceSpecialChars = result
End Function

Pattern 7: SanitizeFilename

Function SanitizeFilename(filename As String) As String
    Dim result As String
    Dim invalidChars As String
    Dim i As Integer
    result = filename
    invalidChars = "\/:*?""<>|"
    For i = 1 To Len(invalidChars)
        result = Replace(result, Mid(invalidChars, i, 1), "_")
    Next i
    SanitizeFilename = result
End Function

Pattern 8: ConvertLineEndings

Function ConvertLineEndings(text As String, newEnding As String) As String
    Dim result As String
    result = text
    ' Normalize to LF first
    result = Replace(result, vbCrLf, vbLf)
    result = Replace(result, vbCr, vbLf)
    ' Convert to desired ending
    If newEnding <> vbLf Then
        result = Replace(result, vbLf, newEnding)
    End If
    ConvertLineEndings = result
End Function

Pattern 9: ReplaceWithCounter

Function CountReplacements(text As String, find As String) As Long
    ' Count how many times find appears in text
    Dim original As String
    Dim replaced As String
    If Len(find) = 0 Then
        CountReplacements = 0
        Exit Function
    End If
    original = text
    replaced = Replace(original, find, "")
    CountReplacements = (Len(original) - Len(replaced)) / Len(find)
End Function

Pattern 10: TemplateReplace

Function ProcessTemplate(template As String, replacements As Collection) As String
    ' Replace {key} placeholders with values from collection
    Dim result As String
    Dim key As Variant
    Dim placeholder As String
    result = template
    For Each key In replacements
        placeholder = "{" & key & "}"
        result = Replace(result, placeholder, CStr(replacements(key)))
    Next key
    ProcessTemplate = result
End Function

Advanced Usage

Example 1: Text Sanitizer with Multiple Rules

' Advanced text sanitization with configurable rules
Class TextSanitizer
    Private Type ReplacementRule
        Find As String
        ReplaceWith As String
        CaseSensitive As Boolean
        MaxReplacements As Long
    End Type
    Private m_rules() As ReplacementRule
    Private m_ruleCount As Integer
    Public Sub Initialize()
        m_ruleCount = 0
        ReDim m_rules(0 To 9)
    End Sub
    Public Sub AddRule(find As String, replaceWith As String, _
                      Optional caseSensitive As Boolean = True, _
                      Optional maxReplacements As Long = -1)
        If m_ruleCount > UBound(m_rules) Then
            ReDim Preserve m_rules(0 To UBound(m_rules) + 10)
        End If
        With m_rules(m_ruleCount)
            .Find = find
            .ReplaceWith = replaceWith
            .CaseSensitive = caseSensitive
            .MaxReplacements = maxReplacements
        End With
        m_ruleCount = m_ruleCount + 1
    End Sub
    Public Function Sanitize(text As String) As String
        Dim result As String
        Dim i As Integer
        Dim compareMode As Integer
        result = text
        For i = 0 To m_ruleCount - 1
            With m_rules(i)
                If .CaseSensitive Then
                    compareMode = vbBinaryCompare
                Else
                    compareMode = vbTextCompare
                End If
                result = Replace(result, .Find, .ReplaceWith, 1, .MaxReplacements, compareMode)
            End With
        Next i
        Sanitize = result
    End Function
    Public Sub ClearRules()
        m_ruleCount = 0
    End Sub
    Public Function GetRuleCount() As Integer
        GetRuleCount = m_ruleCount
    End Function
End Class

Example 2: String Template Engine

' Simple template engine with variable replacement
Module TemplateEngine
    Public Function ProcessTemplate(template As String, _
                                   variables As Scripting.Dictionary) As String
        Dim result As String
        Dim key As Variant
        Dim placeholder As String
        Dim value As String
        result = template
        ' Replace {variable} placeholders
        For Each key In variables.Keys
            placeholder = "{" & CStr(key) & "}"
            value = CStr(variables(key))
            result = Replace(result, placeholder, value)
        Next key
        ProcessTemplate = result
    End Function
    Public Function ProcessConditional(template As String, condition As Boolean, _
                                      trueValue As String, falseValue As String) As String
        Dim result As String
        result = template
        If condition Then
            result = Replace(result, "{if}", trueValue)
            result = Replace(result, "{else}", "")
        Else
            result = Replace(result, "{if}", "")
            result = Replace(result, "{else}", falseValue)
        End If
        ProcessConditional = result
    End Function
    Public Function ProcessLoop(template As String, items() As String) As String
        Dim result As String
        Dim itemText As String
        Dim i As Integer
        ' Extract the loop template
        Dim loopStart As Long
        Dim loopEnd As Long
        Dim loopTemplate As String
        loopStart = InStr(template, "{loop}")
        loopEnd = InStr(template, "{/loop}")
        If loopStart = 0 Or loopEnd = 0 Then
            ProcessLoop = template
            Exit Function
        End If
        loopTemplate = Mid(template, loopStart + 6, loopEnd - loopStart - 6)
        itemText = ""
        For i = LBound(items) To UBound(items)
            itemText = itemText & Replace(loopTemplate, "{item}", items(i))
        Next i
        result = Left(template, loopStart - 1) & itemText & Mid(template, loopEnd + 7)
        ProcessLoop = result
    End Function
End Module

Example 3: CSV/TSV Converter

' Convert between CSV and TSV formats
Class DelimiterConverter
    Private m_sourceDelimiter As String
    Private m_targetDelimiter As String
    Private m_textQualifier As String
    Public Sub Initialize(sourceDelim As String, targetDelim As String, _
                         Optional textQual As String = """")
        m_sourceDelimiter = sourceDelim
        m_targetDelimiter = targetDelim
        m_textQualifier = textQual
    End Sub
    Public Function Convert(data As String) As String
        Dim result As String
        Dim inQuotes As Boolean
        Dim i As Long
        Dim ch As String
        result = ""
        inQuotes = False
        For i = 1 To Len(data)
            ch = Mid(data, i, 1)
            If ch = m_textQualifier Then
                inQuotes = Not inQuotes
                result = result & ch
            ElseIf ch = m_sourceDelimiter And Not inQuotes Then
                result = result & m_targetDelimiter
            Else
                result = result & ch
            End If
        Next i
        Convert = result
    End Function
    Public Function ConvertSimple(data As String) As String
        ' Simple conversion without quote handling
        ConvertSimple = Replace(data, m_sourceDelimiter, m_targetDelimiter)
    End Function
    Public Function EscapeField(field As String) As String
        ' Escape field for CSV/TSV
        Dim needsQuotes As Boolean
        Dim result As String
        result = field
        ' Check if field needs quoting
        needsQuotes = (InStr(field, m_sourceDelimiter) > 0) Or _
                     (InStr(field, m_textQualifier) > 0) Or _
                     (InStr(field, vbCrLf) > 0)
        If needsQuotes Then
            ' Escape existing quotes
            result = Replace(result, m_textQualifier, m_textQualifier & m_textQualifier)
            result = m_textQualifier & result & m_textQualifier
        End If
        EscapeField = result
    End Function
End Class

Example 4: Smart String Replacer

' Advanced string replacement with history and undo
Class SmartReplacer
    Private m_originalText As String
    Private m_currentText As String
    Private m_history() As String
    Private m_historyCount As Integer
    Public Sub Initialize(text As String)
        m_originalText = text
        m_currentText = text
        m_historyCount = 0
        ReDim m_history(0 To 99)
        AddToHistory text
    End Sub
    Public Function ReplaceText(find As String, replaceWith As String, _
                               Optional caseSensitive As Boolean = True, _
                               Optional maxCount As Long = -1) As String
        Dim compareMode As Integer
        If caseSensitive Then
            compareMode = vbBinaryCompare
        Else
            compareMode = vbTextCompare
        End If
        m_currentText = Replace(m_currentText, find, replaceWith, 1, maxCount, compareMode)
        AddToHistory m_currentText
        ReplaceText = m_currentText
    End Function
    Public Function ReplaceFromStart(find As String, replaceWith As String, _
                                    startPos As Long) As String
        ' Replace starting from a specific position
        Dim beforeStart As String
        Dim afterStart As String
        If startPos < 1 Then startPos = 1
        If startPos > Len(m_currentText) Then
            ReplaceFromStart = m_currentText
            Exit Function
        End If
        beforeStart = Left(m_currentText, startPos - 1)
        afterStart = Replace(Mid(m_currentText, startPos), find, replaceWith)
        m_currentText = beforeStart & afterStart
        AddToHistory m_currentText
        ReplaceFromStart = m_currentText
    End Function
    Public Function GetCurrent() As String
        GetCurrent = m_currentText
    End Function
    Public Function Undo() As String
        If m_historyCount > 1 Then
            m_historyCount = m_historyCount - 1
            m_currentText = m_history(m_historyCount - 1)
        End If
        Undo = m_currentText
    End Function
    Public Function Reset() As String
        m_currentText = m_originalText
        m_historyCount = 0
        ReDim m_history(0 To 99)
        AddToHistory m_currentText
        Reset = m_currentText
    End Function
    Public Function GetReplacementCount(find As String) As Long
        Dim withFind As Long
        Dim withoutFind As Long
        If Len(find) = 0 Then
            GetReplacementCount = 0
            Exit Function
        End If
        withFind = Len(m_currentText)
        withoutFind = Len(Replace(m_currentText, find, ""))
        GetReplacementCount = (withFind - withoutFind) / Len(find)
    End Function
    Private Sub AddToHistory(text As String)
        If m_historyCount > UBound(m_history) Then
            ' Shift history
            Dim i As Integer
            For i = 0 To UBound(m_history) - 1
                m_history(i) = m_history(i + 1)
            Next i
            m_history(UBound(m_history)) = text
        Else
            m_history(m_historyCount) = text
            m_historyCount = m_historyCount + 1
        End If
    End Sub
End Class

Error Handling

The Replace function can raise errors in the following situations: - Invalid Procedure Call (Error 5): When: - start parameter is less than 1 - count parameter is less than -1 - Type Mismatch (Error 13): When parameters cannot be converted to appropriate types - Invalid Use of Null (Error 94): When expression is Null Always validate inputs when necessary:

Function SafeReplace(text As String, find As String, replaceWith As String) As String
    On Error Resume Next
    SafeReplace = Replace(text, find, replaceWith)
    If Err.Number <> 0 Then
        SafeReplace = text  ' Return original on error
        Err.Clear
    End If
    On Error GoTo 0
End Function

Performance Considerations

Best Practices

  1. Use Meaningful Names: Name variables clearly (find, replaceWith, not f, r)
  2. Check Empty Strings: Validate find parameter is not empty when expected
  3. Consider Case Sensitivity: Choose appropriate compare parameter
  4. Limit Replacements: Use count parameter when you know the limit
  5. Chain Carefully: Be aware that multiple Replace calls compound
  6. Escape Special Characters: Properly escape quotes and special chars
  7. Validate Start Position: Ensure start is within string bounds
  8. Test Edge Cases: Test with empty strings, no matches, all matches
  9. Document Assumptions: Comment why specific replacements are made
  10. Use Constants: Define commonly replaced strings as constants
Function Purpose Returns Use Case
Replace Replace substring String (modified) Simple string substitution
InStr Find substring position Long (position) Locate substring, check existence
Mid Extract substring String (portion) Get part of string
Left/Right Extract from ends String (portion) Get start/end of string
Trim/LTrim/RTrim Remove whitespace String (trimmed) Clean string edges
UCase/LCase Change case String (case changed) Normalize case

Platform and Version Notes

Limitations

← Back to String | View all functions