2017-02-22 38 views
0

В моем документе Word имеется около 260 разделов с уникальными заголовками в каждом разделе. Каждый заголовок должен иметь левую сторону в одном тексте/шрифте, а справа - в другом. Это для серии двуязычных книг, которые я делаю на разных языках. Вот код, который я попытался сделать, но он не меняет шрифт для второй половины заголовка. Первые 4 строки кода успешно изменяют текст заголовка, но следующая часть кода не изменяет шрифт. В качестве FYI часть, которая гласит «Корейская глава 1», будет на корейском языке и будет использовать корейские шрифты.Два шрифта в заголовке с использованием VBA

Dim text1 As String 
Dim text2 As String 

With ActiveDocument.Sections(1) 
'Changing the text 
text1 = "English Chapter 1" 
text2 = "Korean Chapter 1" 
.Headers(wdHeaderFooterPrimary).Range.Text = text1 & vbTab & text2 
'Changing the font 
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 
Selection.MoveRight Unit:=wdCharacter, Count:=Len(text1) 
Selection.EndKey Unit:=wdStory, Extend:=wdExtend 
Selection.Font.Name = "Batang" 
End With 

With ActiveDocument.Sections(2) 
'Changing the text 
text1 = "English Chapter 2" 
text2 = "Korean Chapter 2" 
.Headers(wdHeaderFooterPrimary).Range.Text = text1 & vbTab & text2 
'Changing the font 
SeekView = wdSeekCurrentPageHeader 
Selection.MoveRight Unit:=wdCharacter, Count:=Len(text1) 
Selection.EndKey Unit:=wdStory, Extend:=wdExtend 
Selection.Font.Name = "Batang" 
End With 

With ActiveDocument.Sections(3)... continuing until the last section 

ответ

0

Расширяя выделение до конца заголовка, вы включаете метку абзаца. Затем установка шрифта изменяет шрифт для всего абзаца.

При кодировании в Word вы должны избегать использования объекта Selection, насколько это возможно, особенно при работе с верхними и нижними колонтитулами. Код ниже должен работать на вас.

Sub SetHeaderText() 
    Dim text1 As String 
    Dim text2 As String 
    Dim rng As Range 

    With ActiveDocument.Sections(1) 
     'Changing the text 
     text1 = "English Chapter 1" 
     text2 = "Korean Chapter 1" 
     Set rng = .Headers(wdHeaderFooterPrimary).Range 
     rng.Text = text1 & vbTab & text2 
     rng.MoveStart Unit:=wdCharacter, Count:=Len(text1) + 1 
     rng.Font.Name = "Batang" 
    End With 
End Sub 

Если текст, который вы добавляете в заголовок действительно только номер главы, то вы могли бы упростить код и реально ускорить процесс, делая что-то вроде этого:

Sub SetHeaderText() 
    Dim text1 As String 
    Dim text2 As String 
    Dim rng As Range 
    Dim sec As Section 
    Dim num As Integer 

    num = 1 
    For Each sec In ActiveDocument.Sections 
     'Changing the text 
     text1 = "English Chapter " & num 
     text2 = "Korean Chapter " & num 
     Set rng = .Headers(wdHeaderFooterPrimary).Range 
     rng.Text = text1 & vbTab & text2 
     rng.MoveStart Unit:=wdCharacter, Count:=Len(text1) + 1 
     rng.Font.Name = "AR Julian" 
     num = num + 1 
    Next 
End Sub 
+0

Это было прекрасно. Благодаря! Я использовал оба, потому что у меня были книги в книге. – Joe

Смежные вопросы