Мне было поручено написать несколько 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.