0

我使用 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 方法可用于搜索和替换文本,或者可以将某些功能添加到上面的代码中,以便它忽略中间的换行符。

4

2 回答 2

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 是回车符和换行符。

于 2012-11-21T13:23:38.110 回答
0

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

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

现在检查其他东西是否是“世界”,并且至少遇到了这些字符中的 1 个。

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

于 2012-11-21T14:11:30.260 回答