Power Point VBA,想要提取所有幻灯片中的所有单词

时间:2014-08-29 16:21:10

标签: vba powerpoint powerpoint-vba

我想改变以特定字符开头和结尾的特定单词的样式(说!)

例如,其中一张幻灯片如下:


安静的地方

  • No1 Eating
  • No2 Talking
  • !NO3!睡

我有一个特定的角色!,表示要修改(将颜色变为红色)

所以,我认为我需要VBA中的功能:

strtok

读取所有字符串(可能在每张幻灯片中以空格分隔)

输出:“安静”“地方”“No1”“吃”“No2”“说话”“!No3!” “睡眠”

strfind (strcmp)

对于每个单词,确定第一个和最后一个字符是否包含'!'

输出:“!No3!”

myfunc

对于以'!'开头和结尾的单词,将其修改为例如'bold'

这样的例子的结果将是:


安静的地方

  • No1 Eating
  • No2 Talking
  • No3 睡觉

我找到了来自sberry

的代码
Sub StrModify()
    Dim p As Presentation: Set p = ActivePresentation
    Dim s As Slide
    Dim sh As Shape
    For Each s In p.Slides
        For Each sh In s.Shapes
            If sh.HasTextFrame Then
                If sh.TextFrame.HasText Then
                    Debug.Print sh.TextFrame.TextRange.Text
                End If
            End If
        Next
    Next
End Sub

此功能的输出为:

安静的地方

No1 Eating

No2 Talking

!NO3!睡

这不是空格''

的标记

是否有“strtok”式的功能将“安静的地方”分为“安静”和“地方”?

2 个答案:

答案 0 :(得分:0)

每个TextRange对象都有单词,行,段落和其他可以迭代的集合:

Dim oRng As TextRange
Dim oSh As Shape
Dim oSl As Slide
Dim x As Long

For Each oSl In ActivePresentation.Slides
    For Each oSh In oSl.Shapes
        If oSh.HasTextFrame Then
            If oSh.TextFrame.HasText Then
                For Each oRng In oSh.TextFrame.TextRange.Words
                    Debug.Print oRng.Text
                Next
            End If
        End If
    Next
Next

答案 1 :(得分:0)

如果您打算使用史蒂夫(好)的建议来迭代DONT使用的话!作为标记.Punctuation不被视为单词的一部分。