【问题标题】:Powerpoint VBA Remove carriage return from formatted text boxPowerpoint VBA 从格式化的文本框中删除回车
【发布时间】:2018-05-20 06:08:09
【问题描述】:

我正在尝试从带有格式化文本的文本框中删除回车:

For i = ThisShape.TextFrame2.TextRange.Runs.Count To 1 Step -1
  ThisText = ThisShape.TextFrame2.TextRange.Runs(i).Text
  ThisText = Replace(ThisText, Chr(13), "")
  ThisShape.TextFrame2.TextRange.Runs(i).Text = ThisText
Next i

出于某种奇怪的原因,文本框仍然带有回车符。 任何帮助将不胜感激。

大卫

【问题讨论】:

  • 我怀疑它可能是换行符 Chr(10) - 尝试用常量 vbCrLf 替换您的 Chr(13)
  • 你能替换整个文本范围吗? With ThisShape.TextFrame2.TextRange .Text = Replace(.Text, vbCr, "") End With
  • 您可以尝试删除 Chr(11) 吗?自 2007 年以来,PP 似乎一直将其用作其他文本和标题的换行符
  • 米奇,读过关于 chr(11) 的帖子。已经试过了。没运气。您可以创建一个包含 2 行的文本框,每行 1 个单词。让每个单词都有不同的颜色。你会看到,没有办法在保留颜色的同时摆脱那个回车。奇数。
  • Goal> Line1Multicolour:Line2Grey -> 重复形状,水平分离,垂直对齐。 Leftshape:删除灰线,RightShape:删除非灰线。之后,2 个形状,都没有自动换行。我已经放弃了。我认为这是一个PowerPoint错误。只是想我会问同样的问题。

标签: vba powerpoint carriage-return textrange


【解决方案1】:

CLEAN 函数很少使用,因此经常被遗忘。

CLEAN 从给定文本中删除不可打印的字符(ASCII 0 到 31)。您可以在 VBA 中使用它:

myStr = Application.WorksheetFunction.Clean(myStr)

...或作为 Excel 工作表函数:

=CLEAN(A1)

示例:

Sub cleanDemo()

    Dim mystr As String

    'populate string with linefeeds and carriage returns.
    'note: vbLf = chr(10): vbCr = chr(13) : vbCrLf = vbCr+vbLf
    mystr = "A" & vbLf & "B" & vbCr & "C" & vbCrLf & "D"

    'display string and it's length
    MsgBox mystr, , "myStr is " & Len(mystr) & " char long."

    'remove ASCII 0 through 31
    mystr = Application.WorksheetFunction.Clean(mystr)

    'display string and it's length
    MsgBox mystr, , "myStr is " & Len(mystr) & " char long."

End Sub

...返回:


列出字符串中的所有字符:

该过程列出了在指定字符串中找到的字符及其代码:

Sub showAllChars(strIn as String)
'Lists all ASCII character codes used in the specified string.
'Adaptable to UNICODE by changing Asc to AscW and Chr to ChrW
Dim strIn As String, c As String, p As Long

For p = 1 To Len(strIn)
    c = Mid(strIn, p, 1)
    Debug.Print "Pos#" & p & ": Chr(" & Asc(c) & ") =[";
    Select Case Asc(c)
        Case 10
            Debug.Print "LF]", ;
        Case 13
            Debug.Print "CR]", ;
        Case Else
            Debug.Print c & "]", ;
    End Select
    If p / 5 = p \ 5 Then Debug.Print
Next p
Debug.Print "Done. (Length=" & Len(strIn) & ")"
End Sub

示例输出:

Pos#1: Chr(65) =[A]         Pos#2: Chr(66) =[B]         Pos#3: Chr(13) =[CR]        
Pos#4: Chr(67) =[C]         Pos#5: Chr(63) =[?]         Pos#6: Chr(68) =[D]         
Pos#7: Chr(17) =[]          Pos#8: Chr(69) =[E]         Pos#9: Chr(70) =[F]         
Pos#10: Chr(63) =[?]        Pos#11: Chr(71) =[G]        Pos#12: Chr(10) =[LF]       
Pos#13: Chr(72) =[H]        Pos#14: Chr(73) =[I]        Done. (Length=14)

更多信息:

【讨论】:

  • 我在 PowerPoint 中找不到“工作表”对象。与其说是清理字符串,不如说是删除“运行”和 PowerPoint 拒绝删除回车。请在顶部查看我的代码。我实际上是从字符串中删除回车,但它没有从“运行”中删除。删除“行”时也会发生同样的事情。即使删除了“行”,回车仍然存在:OriginalShape.TextFrame.TextRange.Lines(2).Delete NewShape.TextFrame.TextRange.Lines(1).Delete,留下烦人的回车。很奇怪,似乎是一个错误。
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多