2015-08-08 2 views
0

Я видел this post, но я не мог изменить свой скрипт VBA для презентации PPT. Почти каждый слайд имеет текст в текстовом поле. Однако в конце некоторых текстовых полей есть несколько разрывов строк в конце (Enter hits), около 1-3 в некоторых местах. Я хотел бы иметь макрос, чтобы удалить эти незавершенные разрывы строк. Скажи мне, что я делаю неправильно здесь (2 скриптов):Удалить разрыв строки в Powerpoint VBA

Sub RemoveSpaces(osh As Shape) 

Dim oSl As Slide 
    Dim osh As Shape 


    With ActivePresentation 

For Each oSl In .Slides 
    For Each osh In oSl.Shapes 
     With osh 
      If .HasTextFrame Then 
       If .TextFrame.HasText Then 
        If Right$(osh.TextFrame.TextRange.Characters(osh.TextFrame.TextRange.Length, 2)) = vbCrLf Then 
        osh.TextFrame.TextRange.Text = Left$(osh.TextFrame.TextRange.Text, Len(osh.TextFrame.TextRange.Text) - 2) 
        End If 
       End If 
      End If 
     End With 
    Next 
Next 

    End With 
End Sub 

и

Sub RemoveSpaces() 

Dim oSl As Slide 
    Dim osh As Shape 


    With ActivePresentation 

For Each oSl In .Slides 
    For Each osh In oSl.Shapes 
     With osh 
      If .HasTextFrame Then 
       If .TextFrame.HasText Then 
        If osh.TextFrame.TextRange.Characters(osh.TextFrame.TextRange.Length - 2, 2).Text = vbCrLf Then 
        osh.TextFrame.TextRange.Characters(osh.TextFrame.TextRange.Length - 2, 2).Delete 
        End If 
       End If 
      End If 
     End With 
    Next 
Next 

    End With 
End Sub 

ответ

0

Когда я нажимаю войти в PowerPoint, он, очевидно, добавляет Vertical Tab, который является ASCII код 11. Try следующее:

Sub RemoveSpaces() 

Dim oSl As Slide 
    Dim osh As Shape 


    With ActivePresentation 

For Each oSl In .Slides 
    For Each osh In oSl.Shapes 
     With osh 
      If .HasTextFrame Then 
       If .TextFrame.HasText Then 
        Do While osh.TextFrame.TextRange.Characters(osh.TextFrame.TextRange.Length - 1, 1).Text = Chr(11) 
         osh.TextFrame.TextRange.Characters(osh.TextFrame.TextRange.Length - 1, 1).Delete 
        Loop 
       End If 
      End If 
     End With 
    Next 
Next 

    End With 
End Sub 
+0

По какой-то причине этот скрипт работает только частично. В некоторых местах он удаляет все лишние пробелы, а в других - нет. Когда я копирую текст в ближайшее окно, я вижу, что эти пробелы подписаны с «мужским знаком». Может быть, какое-то условие вроде «является буквенно-цифровым» или TRIM (characters.length -1,1) .text = «» будет работать? –

1

Powerpoint является немного странным таким образом; конец строки и абзаца могут различаться в зависимости от версии PPT, которую вы имеете, и от того, является ли форма заглавием заголовка или каким-либо другим типом формы.

У меня есть страница на PowerPoint FAQ я утверждаю, что объясняет более подробно:

Пункт окончаний и разрывы строк http://www.pptfaq.com/FAQ00992_Paragraph_endings_and_line_breaks.htm

+0

Я использую PowerPoint 2013. Не уверен, что эта информация по-прежнему действительна. При вставке в ближайшее окно я вижу «мужской знак». Как здесь: http://stackoverflow.com/questions/4091345/what-is-this-strange-character-and-how-can-i-get-rid-of-it –

+0

Информация по-прежнему действительна. Мужской знак - Chr $ (11). Я обновил страницу часто задаваемых вопросов, чтобы отразить, что информация относится к PPT 2007 * и за ее пределами *. Спасибо за толчок. –

Смежные вопросы