2015-07-26 2 views
0

У меня есть презентация powerpoint с субтитрами в белом и желтом тексте в 1 текстовом поле на слайд (белый вверх, желтый - ниже). Я бы хотел заменить белый текст белой точкой («.»). Нужно ли мне делать переменную и подсчитывать белые символы и удалять их спереди?Как удалить часть текста текстового поля в VBA powerpoint?

Это мой сценарий до сих пор:

Sub RemoveWhiteText() 

    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 TextRange.Font.Color = vbWhite Then 
         oSh.TextFrame.Text 
        End If 
       End If 
      End If 
     End With 
    Next 
Next 

    End With 
End Sub 
+0

Да, вам нужно прокрутить коллекцию символов до тех пор, пока выделенный текст не станет белым. –

ответ

0

Пожалуйста, прочитайте мой комментарий к этому вопросу. Я предложил туда прокрутить коллекцию символов до тех пор, пока цвет шрифта не станет белым.

Попробуйте это:

Sub RemoveWhiteText() 

Dim oSl As Slide, oSh As Shape, oTr As TextRange, i As Long 

For Each oSl In ActivePresentation.Slides 
    For Each oSh In oSl.Shapes 
     If oSh.HasTextFrame Then 
      If oSh.TextFrame.HasText Then 
       Set oTr = oSh.TextFrame.TextRange 
       i = 1 
       Do While oTr.Characters(1, i).Font.Color = vbWhite 
        i = i + 1 
       Loop 
       'MsgBox oTr.Characters(1, i - 1).Text 
       If i > 1 Then oTr.Characters(1, i - 1).Text = "." 
       Set oTr = Nothing 
      End If 
     End If 
    Next 
Next 

End Sub 
+0

Спасибо Maciej Los! Работал! По какой-то причине он разбил мой ppt, но когда я выздоровел, белый текст пропал :) –

+0

Добро пожаловать, Michał;) Pozdrowienia z Biaegegostoku! Cheers, Maciej –

0

Каждый текстовый блок отчетливым форматирования является Run. В вашем случае первый пробег имеет цвет шрифта белый. Вы можете использовать эту информацию для запуска петли следующим образом:

Sub StripLeadingWhiteText() 
Dim sld As Slide 
Dim shp As Shape 
Dim rn As TextRange2 

For Each sld In ActivePresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasTextFrame Then 
      If shp.TextFrame2.HasText Then 
       Set rn = shp.TextFrame2.TextRange.Runs(1) 
       If rn.Font.Fill.ForeColor.RGB = vbWhite Then 
        rn.Text = "." 
       End If 
      End If 
     End If 
    Next 
Next 

End Sub` 
Смежные вопросы