如何使用VBA替换功能在PowerPoint中查找所有出现的字符串

时间:2017-10-31 04:32:00

标签: vba replace powerpoint

我试图用¶符号替换所有回车符,以便在PPT中显示回车符(只有word有一个按钮,PPT没有)。由于“替换”函数只找到第一次出现,我需要循环遍历每个字符串以查找下一次出现。

我正在使用MS“替换”函数中的示例代码,但代码只查找了一些回车符但不是所有回车符。我错过了什么? 谢谢!

VBA代码:

If .HasTextFrame Then
    If .TextFrame.HasText Then
        'MsgBox (.TextFrame.TextRange.Text)
        Set oTxtRng = oSh.TextFrame.TextRange

        'Set oTmpRng = oTxtRng
        Set oTmpRng = oTxtRng.Replace(FindWhat:=Chr$(13), _
        Replacewhat:=("¶"))

        Do While Not oTmpRng Is Nothing
            Set oTxtRng = oTxtRng.Characters(oTmpRng.Start + oTmpRng.Length + 1, _
            oTxtRng.Length)
            charCount = charCount + 1

            'MsgBox (oTxtRng.Text)

            Set oTmpRng = oTxtRng.Replace(FindWhat:=Chr$(13), Replacewhat:=("¶"))
        Loop

    End If
End If

3 个答案:

答案 0 :(得分:0)

使用替换功能,而不是文本范围替换方法,例如

dim sText = Replace(oTxtRng.Text, Chr$(13), "¶")

oTxtRng.Text = sText

替换功能一次性替换所有出现的事件。

答案 1 :(得分:0)

PPT使用不同的行结尾字符,具体取决于版本以及它在一个版本中的文本框类型;段落结尾也不同于换行符。我的PPTFAQ网站上的这个页面应该有所帮助:

段落结尾和换行符 http://www.pptfaq.com/FAQ00992_Paragraph_endings_and_line_breaks.htm

答案 2 :(得分:0)

我遇到了与Microsoft示例代码相同的问题。它似乎错过了某些事件(尽管始终如一)。无论如何,为了解决它,我没有重新定义oTxtRng,而是改为使用After:=参数。这似乎可以可靠地工作:

If .HasTextFrame Then
  If .TextFrame.HasText Then
    'MsgBox (.TextFrame.TextRange.Text)
    Set oTxtRng = oSh.TextFrame.TextRange

    'Set oTmpRng = oTxtRng
    Set oTmpRng = oTxtRng.Replace(FindWhat:=Chr$(13), _
    Replacewhat:=("¶"))

    Do While Not oTmpRng Is Nothing
        charCount = charCount + 1

        'MsgBox (oTxtRng.Text)

        Set oTmpRng = oTxtRng.Replace(FindWhat:=Chr$(13), Replacewhat:=("¶"), After:=oTmpRng.Start + oTmpRng.Length)
    Loop

  End If
End If