【问题标题】:VBA - Check if ContentControl text contains formatting?VBA - 检查 ContentControl 文本是否包含格式?
【发布时间】:2011-05-09 01:34:12
【问题描述】:

如果可能的话,这就是我想做的。 我在 Word 模板中有很多丰富的文本框。我想创建一个宏,它基本上检查输入占位符的文本中是否有任何字符被格式化为上标、下标、粗体或下划线等。

所以,到目前为止我得到的是这个

Dim i As Long
Dim txtboxString as String
For i = 1 To ActiveDocument.ContentControls.Count

    If ActiveDocument.ContentControls(i).Title = "Repporttitle" Or ActiveDocument.ContentControls(i).Title = "Subtitle" Then
        If ActiveDocument.ContentControls(i).LockContentControl = True Then
            ActiveDocument.ContentControls(i).LockContentControl = False
        End If
        txtboxString = ActiveDocument.ContentControls(i).Range.Text

    End If
Next i

所以,现在,txtboxString 包含输入到占位符中的文本。但我想检查每个字母的格式。上面的方法只给了我一个简单的文本字符串。我已经看到我可以通过这种方式检查字符串的每个字母:

Dim counter as integer
Dim contentText as string '(this is passed on via the above txtboxString)
Dim letter as string

For counter = 1 To Len(contentText)
    letter = Mid(contentText, counter, 1)
Next

但是,这不会给我每个字母的格式。我该怎么做?

【问题讨论】:

    标签: vba formatting ms-word


    【解决方案1】:

    使用CharactersFont 而不是Text。像这样:

    Sub GetCharacterFormatting()
    Dim i As Long
    Dim txtboxString As Characters ''# <- this was changed from "String" to "Characters"
    Dim Bold As String
    Dim Italic As String
    Dim Subscript As String
    Dim CharacterFont As Font
    Dim ap As Document: Set ap = ActiveDocument
    For i = 1 To ap.ContentControls.Count
        If ap.ContentControls(i).Title = "Repporttitle" Or ap.ContentControls(i).Title = "Subtitle" Then
            If ap.ContentControls(i).LockContentControl = True Then
                ap.ContentControls(i).LockContentControl = False
            End If
            txtboxString = ap.ContentControls(i).Range.Characters ''# <- this was changed from "Text" to "Characters"
            Dim counter As Integer
            For counter = 1 To txtboxString.Count
                Index = counter
                CharacterText = txtboxString(i).Text
                CharacterFont = txtboxString(i).Font
                ''# You can just grab all the formatting for the character or use If/Then statements
                Bold = "Bold: " & CharacterFont.Bold & ", "
                Italic = "Italic: " & CharacterFont.Italic & ", "
                Subscript = "Subscript: " & CharacterFont.Subscript & " "
                ''#
            Next
            Debug.Print Index & " (" & CharacterText & ") : " & Bold; Italic; Subscript
        End If
    Next i
    End Sub
    

    【讨论】:

    • 顺便说一句,我在 'txtboxString = ap.ContentControls(i).Range.Characters' 行收到一条错误消息,说 Argument not optional。
    • 啊,对不起。上面有 2 处改动。将txtboxString = 更改为Set txtboxString = 并将CharacterFont = 更改为Set CharacterFont =。这应该适合你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多