VBA - Проверить, содержит ли текст ContentControl форматирование? - PullRequest
2 голосов
/ 12 ноября 2010

Так что это то, что я хочу сделать, если это возможно. У меня есть много текстовых полей в шаблоне 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 Ответ

1 голос
/ 16 ноября 2010

Используйте Characters и Font вместо 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
...