MSWord - ведущая кавычка не принимает шрифт через VBA - PullRequest
3 голосов
/ 05 июня 2019

Мне было поручено написать несколько VBA, чтобы объединить несколько документов MSWord в один документ и отформатировать его на основе определенных стилей в оригинале. Одним из изменений форматирования является другой шрифт. Владелец документа не может использовать стили в конечном документе.

Мой код работает не только для одной проблемы: если абзац является диалоговым, т.е. он начинается с кавычки, новый шрифт принимается отдельно от самой первой кавычки, которая имеет шрифт документа по умолчанию. Даже если я установлю свойство .Range.Font для символа, параграфа или всего документа, шрифт по умолчанию для этой кавычки не изменится. И все же это происходит, если я вручную выбираю текст и устанавливаю шрифт из раскрывающегося списка.

Кто-нибудь знает, что мне здесь не хватает? Как я могу убедиться, что начальные кавычки в абзаце принимают назначенный шрифт? Соответствующие части кода следующие:

Dim fd As FileDialog
Dim txDoc As Document, refDoc As Document
Dim rng As Range, chr As Range
Dim para As Paragraph
Dim pt(1) As Long
Dim i As Long, p As Long

'... some code to open the files and find the relevant parts.

'Transfer the text.

'-> refDoc is the new document to which the old documents are transferred.
'-> txDoc is one of the old documents.
'-> Both are opened from a FileDialog routine.
With refDoc
    .Range(.Content.End - 1, .Content.End - 1).InsertBreak wdPageBreak
    pt(0) = .Content.End - 1
    .Range.InsertAfter txDoc.Content.Text
    pt(1) = .Content.End - 1
End With

'Set the basic format.
With refDoc.Range(pt(0), pt(1))
    With .Font
        .Name = "Sabon LT"
        .Size = 12
    End With
    With .ParagraphFormat
        .LeftIndent = CentimetersToPoints(0)
        .RightIndent = CentimetersToPoints(0)
        .SpaceBefore = 0
        .SpaceBeforeAuto = False
        .SpaceAfter = 0
        .SpaceAfterAuto = False
        .LineSpacingRule = wdLineSpaceDouble
        .Alignment = wdAlignParagraphLeft
        .WidowControl = False
        .KeepWithNext = False
        .KeepTogether = False
        .PageBreakBefore = False
        .NoLineNumber = False
        .Hyphenation = False
        .FirstLineIndent = CentimetersToPoints(1)
        .OutlineLevel = wdOutlineLevelBodyText
        .CharacterUnitLeftIndent = 0
        .CharacterUnitRightIndent = 0
        .CharacterUnitFirstLineIndent = 0
        .LineUnitBefore = 0
        .LineUnitAfter = 0
        .MirrorIndents = False
        .TextboxTightWrap = wdTightNone
        .CollapsedByDefault = False
    End With
End With

'... some additional formatting code.
...