我试图用¶符号替换所有回车符,以便在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
答案 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