Excel VBA - 从单元格中删除单个字符而不会丢失其余单元格内容的格式

时间:2012-10-31 01:58:43

标签: string excel vba replace character

我正在尝试删除第一次出现的“<”和“>”在单元格中,不会丢失单元格内容的其余部分的格式。

我在这里和其他地方看过几个地方,但没有用。

这就是我想要做的事情:

说“A1”包含文字:

"This is <a> long string with several <occurrences> of a <special> character."

在任何情况下,我要做的是删除“&gt;”,并在完美的世界中使用“&lt;”,从包含它们的第一个单词开始,同时保持粗体格式以及“&lt; ;”和“&gt;”在包含它们的下一个单词上。

这只是在我遇到问题的代码之前执行的其他代码。

inTx = Range("A2").Value
outTx = Replace(inTx, "Init_Day", Range("A3").Value)
Range("A2").Value = outTx

<placeholder>文本替换为实际文本,在这种情况下为两位数。

以下代码对我不起作用:

SearchString = Range("A2").Value
Char1 = "<"
Char2 = ">"
For i = 1 To Len(SearchString)
    If Mid(SearchString, i, 1) = Char1 Then
        startPos = i
        Exit For
    End If
Next i
For i = 1 To Len(SearchString)
    If Mid(SearchString, i, 1) = Char2 Then
        endPos = i
        Exit For
    End If
Next i
Range("A2").Characters(startPos, endPos - startPos).Font.Bold = True
Range("A2").Characters(startPos - 1, 1).Delete

所有代码都正常工作,直到我到达最后一行:

Range("A2").Characters(startPos - 1, 1).Delete
然后没有任何反应。

我甚至尝试过:

Range("A2").Characters(startPos - 1, 20).Delete

仍然没有...

我知道这应该很容易,但我似乎无法弄明白。

提前致谢。

1 个答案:

答案 0 :(得分:1)

以下代码:

Sub Foo()
    Const Char1 As String = "<", Char2 As String = ">"
    Dim SearchString As String
    Dim i As Integer, startPos As Integer, endPos As Integer
    SearchString = Range("A2").Value
    startPos = InStr(SearchString, Char1)
    endPos = InStr(SearchString, Char2)
    Range("A2").Characters(startPos, endPos - startPos).Font.Bold = True
    Range("A2").Characters(startPos, 1).Delete
    Range("A2").Characters(endPos - 1, 1).Delete
End Sub

转过来:

Some <bold> text I just <made> up.

进入:

Some bold text I just <made> up.

这就是你要找的东西吗?