删除换行符

时间:2013-07-01 12:09:02

标签: line-breaks powerpoint-vba

我想删除某个文本中的换行符。我在这个论坛上查看了如何做到这一点并且有几个答案,但至少在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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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值&lt; 32)显示为\xnn nn是控制字符的值(例如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 ...