方法一:
Public Function FastReplace(SSrch$, SFind$, SRepl$) As String
Dim Src() As Byte, Dst() As Byte, R() As Byte, F() As Byte
Dim LenF&, LenR&, LenDst&, i&, j&, OutPos&
Const ChunkSize& = 4096
If SSrch = "" Or SFind = "" Then Exit Function
Src = SSrch: F = SFind: R = SRepl
LenF = UBound(F): LenR = UBound(R)
LenDst = ChunkSize: ReDim Dst(0 To LenDst - 1)
For i = 0 To UBound(Src) Step 2
For j = 0 To LenF Step 2
If Src(i + j) <> F(j) Then Exit For
Next j
If j > LenF Then 'Found
For j = 0 To LenR Step 2
If OutPos >= LenDst Then
LenDst = LenDst + ChunkSize
ReDim Preserve Dst(0 To LenDst)
End If
Dst(OutPos) = R(j): OutPos = OutPos + 2
Next j
i = i + LenF - 1
Else
If OutPos >= LenDst Then
LenDst = LenDst + ChunkSize
ReDim Preserve Dst(0 To LenDst)
End If
Dst(OutPos) = Src(i): OutPos = OutPos + 2
End If
Next i
ReDim Preserve Dst(0 To OutPos - 2): SSrch = Dst
FastReplace = SSrch$
End Function
方法二:
' SearchLine is input, SearchFor is what to search for, ReplaceWith is the replacement
Function sReplace(SearchLine As String, SearchFor As String, ReplaceWith As String)
Dim vSearchLine As String, found As Integer
found = InStr(SearchLine, SearchFor): vSearchLine = SearchLine
If found <> 0 Then
vSearchLine = ""
If found > 1 Then vSearchLine = Left(SearchLine, found - 1)
vSearchLine = vSearchLine + ReplaceWith
If found + Len(SearchFor) - 1 < Len(SearchLine) Then _
vSearchLine = vSearchLine + Right$(SearchLine, Len(SearchLine) - found - Len(SearchFor) + 1)
End If
sReplace = vSearchLine
End Function