0

我想删除我在某个文本中的换行符。我在这个论坛上查看了如何做到这一点,并且有几个答案,但至少在 powerpoint 中没有一个对我有用。

我看到了一个左方法的例子:

    If Len(myString) <> 0 Then
        If Right$(myString, 2) = vbCrLf Or Right$(myString, 2) = vbNewLine Then 
            myString = Left$(myString, Len(myString) - 2)
        End If
    End If

text = Left (text, number)给我类型不匹配错误

text = Left$ (text, number)给我compile error: Type-declaration character does not match declared data type.

我也尝试用“”替换换行符,但它什么也没做。它没有给我一个错误,但换行符仍然存在。

我正在使用的换行符是vbCrLf

4

2 回答 2

1

您的问题可能是自 2007 年以来的 PPT 版本不使用 VBCrLf 作为段落结尾字符。这解释了哪些版本使用哪些字符作为行或段落结尾:

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

它来自我维护的 PPT FAQ 网站。

于 2013-07-01T14:43:15.853 回答
0

对于要删除的对象,请vbCrLf尝试使用

myObj.TextFrame.TextRange.Replace vbCrLf, ""

如果您想对字符串(而不是对象)执行此操作,可以尝试以下操作:

Sub stripStrings()
Dim longString As String
Dim stringCopy As String

longString = "first paragraph" & vbCrLf & "second paragraph" & vbCrLf & "third paragraph" & vbCrLf
stringCopy = Replace(longString, vbCrLf, "")
MsgBox "longstring is now:" & vbCrLf & longString
MsgBox "stringcopy is:" & vbCrLf & stringCopy
End Sub

正如您将看到的,这将删除换行符。适应你的目的...

编辑正如 Steve Rindsberg 指出的那样,可能是您的 Powerpoint 版本使用的不是vbCrLf段落分隔符。这里有一些代码可以帮助您解决这个问题 - 对于其中包含文本的每个形状,它将提取文本,显示所有“控制字符”(ASCII 值 < 32)作为控制字符\xnnnn值(这样vbCR将显示\x13例如):

Sub displayControlCharacters()
Dim sh As Shape
Dim t As String

For Each sh In ActivePresentation.Slides(1).Shapes
  If sh.TextFrame.HasText Then
    sh.Select
    t = sh.TextFrame.TextRange.Text        
    MsgBox "The shape contains: " & vbCrLf & escapeString(t)
  End If
Next sh
End Sub

Function escapeString(t As String)
Dim ii As Integer
Dim r As String
For ii = 1 To Len(t)
  If Asc(Mid(t, ii, 1)) > 31 Then
    r = r + Mid(t, ii, 1)
  Else
    r = r + "\x" + Format(Asc(Mid(t, ii, 1)), "0")
  End If
Next
escapeString = r
End Function

一个简单的测试表明,在 PowerPoint 2010 中,您确实\x13在段落末尾...

于 2013-07-01T12:15:02.337 回答