【问题标题】:how to find ALL occurrences of a string in PowerPoint with the VBA replace function如何使用 VBA 替换功能在 PowerPoint 中查找所有出现的字符串
【发布时间】:2018-09-09 09:41:09
【问题描述】:

我正在尝试用 ¶ 符号替换所有回车符,以使回车符在 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

【问题讨论】:

标签: vba replace powerpoint


【解决方案1】:

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

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

oTxtRng.Text = sText

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

【讨论】:

  • dim sText = Replace(oTxtRng.Text, Chr$(13), "¶") 不起作用。 PPT不喜欢这种表示法。我在 PPT 2013 上,我很乐意让它发挥作用。
  • 我仍然对这个问题的答案感兴趣。当我使用您的建议时,我得到一个编译错误:预期:语句结束(在替换之前的 = 上突出显示
  • 这应该是两行: Dim sText as String 然后 sText = Replace(oTxtRng.Text, Chr$(13), "¶")
【解决方案2】:

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

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

【讨论】:

  • 这并没有解决我的问题。我知道不同的角色。这里的问题是我正在使用“替换”功能,而 PPT 找到了一些换行符,但没有找到 OTHERS,而且它似乎有点随机,它找到了哪些换行符。
  • 您是否根据我链接到的页面上的内容修改了示例代码?如果是这样,请在上面进行编辑,这样我们都在谈论同一件事。谢谢。
【解决方案3】:

我在使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2011-02-23
    • 2015-07-03
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多