Excel vba word колонтитул

Категория: Excel
Опубликовано: 30 октября 2021
Просмотров: 1928

Фрагмент кода для работы с верхним и нижним колонтитулами

'верхний колонтитул
With wdDoc
    For Each Section In .Sections
        For Each Header In Section.Headers
            With Header.Range.Find
                .Text = "&sn"
                .Replacement.Text = SN$
                .Wrap = wdFindContinue
                Call .Execute(Replace:=wdReplaceAll)
            End With
        Next
    Next Section
End With

'нижний колонтитул
With wdDoc
    For Each Section In .Sections
        For Each footer In Section.Footers
            With footer.Range.Find
                .Text = "&adress"
                .Replacement.Text = Adress$
                .Wrap = wdFindContinue
                Call .Execute(Replace:=wdReplaceAll)
            End With
        Next
    Next Section
End With

ZIP архив с проектом


Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

 С уважением, авторы сайта Компьютерапия

Понравилось? Поделись этим видео с друзьями!

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Опять проблема возникла. В первом разделе документа в колонтитуле замену сделал.
А вот как перейти в колонтитул следующего раздела не могу найти.
Кто-нибудь сможет подсказать?
Заранее благодарен.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

А что значит колонтитул раздела? Они могу быть изменены только для всех страниц сразу и для первой страницы может быть отдельный колонтитул. Что хотите сделать Вы?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#3

19.11.2017 16:41:53

Доброе время суток

Цитата
The_Prist написал:
А что значит колонтитул раздела?

Разделы — такие блоки документа, которые позволяют менять тип, ориентацию страницы, в том числе, иметь отличные от других разделов колонтитулы. В документе — это коллекция Sections, соответственно, объект раздела Section. В документе есть как минимум один раздел.
P. S. Честно говоря, факт того, что документом код управляет со стороны Excel, не повод задавать вопросы по объектной модели Word на форуме по Excel. Как управлять COM-объектами, в том числе и Word, у вас, Дмитрий, хорошо написано на сайте.

Прикрепленные файлы

  • sections.docx (14.9 КБ)

Изменено: Андрей VG19.11.2017 16:44:38

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#4

19.11.2017 17:54:23

Цитата
Андрей VG написал:
Разделы — такие блоки документа

Андрей, я знаю :) Наверное, не так выразился. Я хотел уточнить у ТС, что под разделом подразумевает именно он, т.к. часто видел вопросы вроде того, что на двух страницах нужен один колонтитул, на трех следующих другой и т.д. При этом такие блоки не были разделены на разделы в понимании Word-а, но авторы проблемы называли их именно так. Отсюда и мои вопросы.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#5

19.11.2017 19:49:20

Цитата
Esheron написал:
как перейти в колонтитул следующего раздела не могу найти

Если использовать обозначения из

предыдущей темы

, например так

Код
    Set h = objDocument.Sections(2).Headers(1) '1=wdHeaderFooterPrimary
    h.LinkToPrevious = False 'отвязать от предыдущего раздела, на всякий случай
    h.Range.Text = "Это верхний колонтитул 2 раздела"
 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#6

19.11.2017 23:32:10

Цитата
The_Prist написал:
я знаю

да, я так, на всякий случай. Вполне вас понимаю, что пользователи часто считают что, если у него написано слово раздел такой-то, то это и есть раздел Word документа.

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Что-то ругается VBA на данный код. Как-то и вариантов уже нет.
Выкладываю свой код, применительно уже к конкретной задачи и один доковский файл.
Как в нём можно активировать колонтитул на втором листе (хотя он активируется сразу при активации колонтитула на первом листе).
Не могу понять, в доковском файле я не вижу разрывов разделов, но колонтитулы разные — это как? Я с таким в первый раз сталкиваюсь.
Как достучаться до колонтитула на втором листе чтобы заменить часть текста (замена уже решена)?

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Уточнение — речь о верхних колонтитулах идёт.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Файлы удалены — превышен максимально допустимый размер. Ознакомьтесь с Правилами.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#10

20.11.2017 05:12:38

Цитата
Esheron написал:
но колонтитулы разные — это как?

Вы не внимательны, The_Prist, в посте #2 вам писал, что для первой страницы раздела можно сделать отдельный колонтитул.

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

В режиме редактирования колонтитула (например, по двойному клику в зоне колонтитула) появляется вкладка ‘Конструктор’, на которой в группе ‘Параметры’ есть флажки:
— Особый колонтитул для первой страницы
— Разные колонтитулы для четных и нечетных страниц
Итого в разделе (см. корректировку Андрея ниже) документа могут быть 3 разных колонтитула.

Изменено: ZVI20.11.2017 05:36:15

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#12

20.11.2017 05:23:41

Цитата
ZVI написал:
Итого в документе могут быть 3 разных колонтитула

Подправлю, в разделе документа. И в каждом разделе документа можно сделать свои настройки.

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

Андрей, спасибо, исправил.

Изменено: ZVI20.11.2017 05:37:50

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

спасибо за информацию. так оно вероятно и есть.
Но как перейти из первого верхнего колонтитула во второй верхний?
Не могу никак нигде найти. Обыскался уже.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#15

20.11.2017 15:11:31

Цитата
Esheron написал:
Не могу никак нигде найти. Обыскался уже.

Уж показали бы, где искали? Смотрим коллекцию HeadersFooters объекта Section, члены которой индексируются по перечислению WdHeaderFooterIndex.

Изменено: Андрей VG20.11.2017 15:11:55

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Спасибо за подсказку. Но не очень спец в области работы с doc-документами. А можно поподробней?
В документе и правда разделов не оказалось. Как именно перейти можете подсказать?

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Тема закрыта, сам разобрался.
Все участвующим в моей проблеме огромное спасибо!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Не даёт прикрепить файл. Поэтому так.
Правильнее было бы при первом открытии применить  константу wdSeekFirstPageHeader
Так, моредатор недоволен форматированием. Я не знаю как правильно это сделать.
Поэтому кто успел, тот и скопировал. Код удалил.

Изменено: Esheron21.11.2017 23:39:01

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Esheron, посмотрите, как отформатирован код в #5. И Вы поступайте аналогично — ищите такую кнопку и исправьте своё сообщение.

 

Esheron

Пользователь

Сообщений: 32
Регистрация: 04.05.2016

Так рад бы, да отказывается прикреплять файл.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#22

21.11.2017 20:05:02

Причём здесь файл? Я говорю про форматирование сообщения.

Создание верхнего и нижнего колонтитулов из кода VBA Excel: присвоение текста и его выравнивание, назначение шрифта, его размера, цвета и начертания.

Создание колонтитулов

Верхний и нижний колонтитулы в Excel состоят из трех частей: левой, центральной и правой. Следующий код VBA заполняет все части верхнего и нижнего колонтитулов их наименованиями:

Sub Test1()

    With ActiveSheet.PageSetup

        .LeftHeader = «Левая часть верхнего»

        .CenterHeader = «Центральная часть верхнего»

        .RightHeader = «Правая часть верхнего»

        .LeftFooter = «Левая часть нижнего»

        .CenterFooter = «Центральная часть нижнего»

        .RightFooter = «Правая часть нижнего»

    End With

End Sub

Слово «колонтитула» пропущено, чтобы текст разных частей колонтитулов не наезжал друг на друга. Обратите внимание на выравнивание текста в разных частях верхнего и нижнего колонтитулов.

Если в колонтитуле нужна одна строка, можно использовать ту часть колонтитула, которая имеет необходимое выравнивание по умолчанию:

Sub Test2()

    With ActiveSheet.PageSetup

        .LeftHeader = «»

        .CenterHeader = «»

        .RightHeader = «Текст для правой части верхнего колонтитула с выравниванием по правому краю»

    End With

End Sub

Удаление колонтитулов

Чтобы удалить колонтитулы из печатной формы, необходимо присвоить всем частям верхнего и нижнего колонтитула пустые строки:

Sub Test3()

    With ActiveSheet.PageSetup

        .LeftHeader = «»

        .CenterHeader = «»

        .RightHeader = «»

        .LeftFooter = «»

        .CenterFooter = «»

        .RightFooter = «»

    End With

End Sub

Коды форматирования

Специальные коды VBA Excel для форматирования верхнего и нижнего колонтитулов:

Код Описание
&L Выравнивает текст по левому краю
&C Выравнивает текст по центру
&R Выравнивает текст по правому краю
&E Включает или отключает двойное подчеркивание
&X Включает или отключает надстрочные символы
&Y Включает или отключает подстрочные символы
&B Включает или отключает полужирное начертание
&I Включает или отключает курсивное начертание
&U Включает или отключает одинарное подчеркивание
&S Включает или отключает зачеркнутое начертание
&»fontname» Указывает наименование шрифта
&nn Двузначное число, задающее размер шрифта
&color Цвет шрифта, задающийся шестнадцатеричным значением
&D Вставка текущей даты
&T Вставка текущего времени
&F Вставка имени файла (книги) Excel
&A Вставка имени рабочего листа
&P Вставка номера страницы
&P+number Вставка номера страницы плюс указанное число
&P-number Вставка номера страницы минус указанное число
&& Вставка одного амперсанда
&N Общее количество страниц на рабочем листе
&Z Вставка пути к файлу
&G Вставка изображения

Примеры форматирования

Примеры форматирования колонтитулов в VBA Excel с помощью специальных кодов.

Пример 1

Пример использования надстрочных и подстрочных символов:

Sub Primer1()

    With ActiveSheet.PageSetup

        .LeftHeader = «Левая часть « & «&X» & «верхнего» & «&X» & » колонтитула»

        .LeftFooter = «Левая часть « & «&Y» & «нижнего» & «&Y» & » колонтитула»

    End With

End Sub

В результате получаем: «Левая часть верхнего колонтитула» и «Левая часть нижнего колонтитула».

Пример 2

В этом примере задаем шрифт «Times New Roman» с размером 12 и двойным подчеркиванием для строки, вставляемой в левую часть верхнего колонтитула:

Sub Primer2_1()

    ActiveSheet.PageSetup.LeftHeader = «&»«Times New Roman»«&12&E» & «Шрифт Times New Roman, размер 12, двойное подчеркивание»

End Sub

‘или то же самое в более наглядном виде с использованием переменных

Sub Primer2_2()

Dim fnt As String, txt As String

fnt = «»«Times New Roman»«»

txt = «Шрифт Times New Roman, размер 12, двойное подчеркивание»

    ActiveSheet.PageSetup.LeftHeader = «&» & fnt & «&12&E» & txt

End Sub

Пример 3

Указываем полужирный курсив строке, состоящей из текущей даты, времени и имени листа, вставляемой в центральную часть верхнего колонтитула:

Sub Primer3()

    ActiveSheet.PageSetup.CenterHeader = «&B&I» & «&D  &T  &A»

End Sub

Пример 4

Вставка изображения в левую часть верхнего колонтитула:

Sub Primer4()

    With ActiveSheet.PageSetup

        .LeftHeaderPicture.Filename = «C:UsersEvgeniyDownloadsБезымянный1.png»

        .LeftHeader = «&G»

    End With

End Sub

Если изображение не большое, оно появится в колонтитуле, а большая картинка станет фоновым изображением печатных страниц.


сделать в Ворде макросом колонтитул нижний

Автор Ципихович Эндрю, 04 февраля 2017, 13:31

Ципихович Эндрю

  • гость
  • Записан

Здравствуйте, как сделать в Ворде макросом, чтобы в конце страницы последней строкой было, например
___________ А.А. Петров?

Эта вещь вроде колонтитулы нижние называется, но не сталкивался.



Администратор

  • Administrator
  • Сообщения: 2,251
  • Записан

Вставка текста в первый раздел, в нижний основной колонтитул:
Sub Макрос()
    ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Text = «___________ А.А. Петров»
End Sub

Примечания

  • Колонтитулы есть в каждом разделе файла. Поэтому, если у вас несколько разделов в файле, то может потребоваться вставлять колонтитулы не в один раздел, а в несколько.
  • Колонтитулы есть трёх видов:
    1) основной  — wdHeaderFooterPrimary
    2) колонтитул первой страницы раздела (именно раздела, а не всего файла) — wdHeaderFooterFirstPage
    3) колонтитул чётной страницы — wdHeaderFooterEvenPages
    Поэтому это нужно помнить. Например, если вы вставили колонтитул, а его не видно, значит в файле нет какого-то колонтитула.


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • сделать в Ворде макросом колонтитул нижний

Редактирование таблицы в колонтитуле Word из-под Excel

buchlotnik

Дата: Четверг, 04.08.2016, 23:25 |
Сообщение № 1

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Добрый вечер, коллеги.

Снова обращаюсь с тупым вопросом по выгрузке в Word. Суть проблемы — имеетеся рабочий код, который создаёт таблицу 3 на 4, после чего объединяет две ячейки
[vba]

Код

Sub export()
    With CreateObject(«Word.Application»)
        .Visible = True
        .Documents.Add
        .Documents(1).Tables.Add Range:=.Selection.Range, NumRows:=3, NumColumns:= _
                4, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
                wdAutoFitFixed
        .Documents(1).Range( _
        .Documents(1).Tables(1).Rows(2).Cells(2).Range.Start, _
        .Documents(1).Tables(1).Rows(2).Cells(3).Range.End).Select
        .Selection.Cells.Merge
        .Activate
    End With
End Sub

[/vba]
Задача состоит в том, чтобы эту таблицу поместить в верхний колонтитул.
Это я сделал, но не могу сделать объединение ячеек —
[vba]

Код

Sub export2()
    With CreateObject(«Word.Application»)
        .Visible = True
        .Documents.Add
        .Documents(1).Tables.Add Range:=.Documents(1).Sections(1).Headers(1).Range, NumRows:=3, NumColumns:= _
                4, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
                wdAutoFitFixed
‘на кусок кода дальше ругается — error 5941  запрашиваемый номер семейства не существует
        .Documents(1).Range( _
        .Documents(1).Tables(1).Rows(2).Cells(2).Range.Start, _
        .Documents(1).Tables(1).Rows(2).Cells(3).Range.End).Select
        .Selection.Cells.Merge
        .Activate
    End With
End Sub

[/vba]

Может кто-нибудь подсказать, как к таблице в колонтитуле обратиться?

Заранее признателен

К сообщению приложен файл:

5860712.xlsm
(16.7 Kb)

 

Ответить

Manyasha

Дата: Пятница, 05.08.2016, 00:35 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Михаил, здравствуйте, у меня вот так получилось:
[vba]

Код

Sub export2()
    With CreateObject(«Word.Application»)
        .Visible = True
        .Documents.Add
        .Documents(1).Tables.Add Range:=.Documents(1).Sections(1).Headers(1).Range, NumRows:=3, NumColumns:= _
                4, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
                wdAutoFitFixed
        .ActiveWindow.ActivePane.View.SeekView = 9
‘сразу диапазон выделить не получилось
        .Selection.Tables(1).Cell(2, 2).Select
        .Selection.MoveRight Unit:=1, Count:=1, Extend:=1
        .Selection.Cells.Merge
        .ActiveWindow.ActivePane.View.SeekView = 0
        .Activate
    End With
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

krosav4ig

Дата: Пятница, 05.08.2016, 01:00 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Здравствуйте, а у мну вот так
[vba]

Код

Sub export2()
    Dim rng
    With CreateObject(«Word.Application»)
        .Visible = True
        With .Documents.Add.Sections(1).Headers(1)
            With .Range.document.tables.Add(Range:=.Range, NumRows:=3, _
                NumColumns:=4, DefaultTableBehavior:=wdWord9TableBehavior, _
                AutoFitBehavior:=wdAutoFitFixed)
                Set rng = .Cell(2, 2).Range
                rng.End = .Cell(2, 3).Range.End
                rng.Cells.Merge
            End With
        End With
        .Activate
    End With
End Sub

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

buchlotnik

Дата: Пятница, 05.08.2016, 01:17 |
Сообщение № 4

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Ух ты! Спасибо девчата (и ребята) :)
Пашет и так, и так на ура — пошёл объектную модель Ворда штудировать (ведь крутил .ActivePane да недокрутил)
Спасибо!

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel vba with синтаксис
  • Excel vba table to range
  • Excel vba with внутри with
  • Excel vba table this row
  • Excel vba with worksheets range