VBA - 检查ContentControl文本是否包含格式?

时间:2010-11-12 12:51:54

标签: vba formatting word-vba

所以这就是我想做的,如果可能的话。 我在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

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

1 个答案:

答案 0 :(得分: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