使用VBA查找和替换文本

时间:2012-11-21 13:14:22

标签: vba replace

我使用Excel VBA和以下方法搜索html文件中的字符串,并在添加粗体标记后将其替换为相同的字符串。

FindAndReplace ("C:\xxx.htm", "hello world", "<b>hello world</b>")

Private Sub FindAndReplace(filePath As String, findWhat As String, replaceWith As String)

Dim nextFileNum As Long
Dim oldFileContents As String
Dim newFileContents As String
Dim textFileTypes() As String
Dim fileExtension As String

Dim sFileName As String
Dim iFileNum As Integer
Dim sBuf As String
Dim strFound As Integer

  If Len(Dir(filePath)) = 0 Then
    Exit Sub
  End If

  nextFileNum = FreeFile

  Open filePath For Input As #nextFileNum
  oldFileContents = Input$(LOF(nextFileNum), #nextFileNum)
  Close #nextFileNum

  newFileContents = Replace(oldFileContents, findWhat, replaceWith)

  nextFileNum = FreeFile

  Open filePath For Output As #nextFileNum
  Print #nextFileNum, newFileContents
  Close #nextFileNum
End Sub

我面临的问题是获胜的函数;如果因为html源代码换行而在它之间分裂,则找到字符串。

例如,如果代码为:

,则会找到该字符串
<p>hi hola hello world</p>

但是如果代码是:

则找不到
<p>hi hola hello 
world</p>

我是否可以使用任何其他VBA方法来搜索和替换文本,或者可以将某些功能添加到上面的代码中,以便忽略它们之间的换行符。

2 个答案:

答案 0 :(得分:0)

尝试使用以下变体:

Function RemoveCarriageReturns(SourceString As String) As String

    Dim s As String

    'strip out CR and LF characters together
    s = Replace(SourceString, vbCrLf, "")

    'just in case, remove them one at a time
    s = Replace(s, Chr(13), "")
    s = Replace(s, Chr(10), "")

    RemoveCarriageReturns = s

End Function

ASCII字符13和10是回车符和换行符。

答案 1 :(得分:0)

如果拆分仅包含换行/返回(Chr(10)Chr(13))和/或空格Chr(32),那么您可能首先搜索“hello”。

找到时查找那些字符(10,13和32)并跳过它们直到遇到其他问题(使用DO WHILE ... OR ... OR ... OR循环)。

现在检查是否有其他东西是“世界”并且遇到了至少一个字符

在这种情况下,您会将"hello"更改为"<b>hello",将"world"更改为"world</b>"