1

Тема: макрос для разных колонтитулов на листе

В экспресс блоках шаблона хранятся  нижние колонтитулы.

Цель: при выполнении макроса в документе на текущей странице добавлять соответствующий макросу нижний колонтитул. (несколько макросов для нескольких колонтитулов).

Пробовал записывать макрос, создавая разделы и отжимая кнопку "как в предыдущем", не получалось. При выполнении записанного макроса вылетала ошибка на месте отжать "как в предыдущем".

Подскажите что делать.



ПС: пользуюсь word 2010, в  нём не нашёл вид "колонтитул" как word 2003, его пофиксили?

2

Re: макрос для разных колонтитулов на листе

Записанный макрос.

вставляю раздел с новой страницы
вставляю колонтитул
отменяю как в предыдущем разделе


Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Selection.InsertBreak Type:=wdSectionBreakNextPage
    Application.Templates( _
        "C:\Documents and Settings\Userblack\Application Data\Microsoft\Document Building Blocks\1049\14\Built-In Building Blocks.dotx" _
        ).BuildingBlockEntries("Алфавит").Insert Where:=Selection.Range, RichText _
        :=True
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

При выполнении ругается на отмену как в предыдущем разделе.

Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious

3

Re: макрос для разных колонтитулов на листе

из Шаблона ГОСТ для MS Word http://wordexpert.ru/page/shablon-gost-dlya-ms-word

взял код для добавления разделов и отключения флага "Как в предыдущем "

Sub P1()
'
' Макрос разделов
'
'
 

'Добавление нового раздела с выбором формата листа и ориентации страницы
Dim SectionNumber As Integer
Set CurrentDoc = ActiveDocument ' присвоение переменной имени текущего документа
'Если номер текущей страницы больше 3
'или
'номер текущей страницы равен 2 и свойство "Второй лист титульного" равно false
'или
'номер текущей страницы раввен 1 и свойство "Титульный лист" равно false

    With Selection
        .InsertBreak Type:=wdSectionBreakNextPage ' Вставка разрыва со следующей страницы
        SelectionSectionNumber = .Information(wdActiveEndSectionNumber) 'запоминание номера раздела
        .InsertBreak Type:=wdSectionBreakNextPage ' Вставка разрыва со следующей страницы
    End With
    For SectionNumber = SelectionSectionNumber To (SelectionSectionNumber + 1)
    ' Запомненный раздел и раздел, следующий за ним
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToAbsolute, Count:=SectionNumber
        With CurrentDoc.Sections(SectionNumber)
            .Headers(wdHeaderFooterFirstPage).LinkToPrevious = False
            .Footers(wdHeaderFooterFirstPage).LinkToPrevious = False
            .Headers(wdHeaderFooterPrimary).LinkToPrevious = False
            .Footers(wdHeaderFooterPrimary).LinkToPrevious = False
            .Headers(wdHeaderFooterEvenPages).LinkToPrevious = False
            .Footers(wdHeaderFooterEvenPages).LinkToPrevious = False
        End With
        ' Снятие флага "Как в предыдущем" для всех возможных видов колонтитулов
    With CurrentDoc.Sections(SectionNumber)
        .Headers(wdHeaderFooterFirstPage).Range.Delete ' Удалить верхний колонтитул первой страницы раздела
        .Footers(wdHeaderFooterFirstPage).Range.Delete ' удалить нижний колонтитул первой страницы раздела
        .Headers(wdHeaderFooterPrimary).Range.Delete ' Удалить верхний колонтитул нечетной страницы
        .Footers(wdHeaderFooterPrimary).Range.Delete ' Удалить нижний колонтитул нечетной страницы
        .Headers(wdHeaderFooterEvenPages).Range.Delete ' Удалить верхний колонтитул четной страницы
        .Footers(wdHeaderFooterEvenPages).Range.Delete ' Удалить нижний колонтитул нечетной страницы
        With .PageSetup
            .DifferentFirstPageHeaderFooter = False ' Не различать колонтитул первой страницы
            .OddAndEvenPagesHeaderFooter = False 'Не различать колонтитулы четных и нечетных страниц
            .TopMargin = CentimetersToPoints(1 + PrintTop) ' Отступ от верхнего края страницы
            .BottomMargin = CentimetersToPoints(2.5 + PrintBottom) ' Отступ от верхнего края страницы
            .LeftMargin = CentimetersToPoints(2.5) 'Отступ от левого края страницы
            .RightMargin = CentimetersToPoints(0.5 + PrintRight) ' Отступ от правого края страницы
            .HeaderDistance = CentimetersToPoints(0.5) 'От края до вернего колонтитула
            .FooterDistance = CentimetersToPoints(0.5) 'От края до нижнего колонтитула
        End With
    End With
  
        
    Application.ScreenRefresh 'Обновление экрана

    
    i = SelectionSectionNumber
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter 'Вход в нижний колонтитул первого раздела
      DoEvents
        Application.ScreenUpdating = False
   
        Application.ScreenUpdating = True
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument 'Возвращение к основному режиму
          
    Next SectionNumber

     
End

End Sub

После выполнения макроса курсор переходит на последнюю страницу.
(При выполнении макроса, он вставляет два разрыва со следующие страницы)

Не понимаю как поместить курсор на страницу выполнения макроса sad