Создание верхнего и нижнего колонтитулов из кода 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 |
Если изображение не большое, оно появится в колонтитуле, а большая картинка станет фоновым изображением печатных страниц.
0 / 0 / 0 Регистрация: 30.05.2010 Сообщений: 13 |
|
1 |
|
10.06.2010, 09:18. Показов 22416. Ответов 6
при переходе в режим предпросмотра и после выхода из него можно (так же при задании областей) можно видеть, что в фоновом изображении Excel отображает номера страниц. подскажите, пожалуйста, где этот номер хранится и можно ли определить к какому номеру страницы принадлежит выбранная ячейка
0 |
petr-sev 496 / 130 / 19 Регистрация: 30.03.2010 Сообщений: 224 |
||||
10.06.2010, 14:54 |
2 |
|||
как решить эту задачу в лоб — не знаю
2 |
0 / 0 / 0 Регистрация: 30.05.2010 Сообщений: 13 |
|
10.06.2010, 17:54 [ТС] |
3 |
очень интересная идея, огромное спасибо
0 |
EducatedFool 0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
||||||||||||
11.06.2010, 01:10 |
4 |
|||||||||||
Воспользовался поиском — нашел такие варианты:
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||
11.06.2010, 03:12 |
5 |
|||
вопрос, конечно, решенный, но раз наваял, то выложу
1 |
0 / 0 / 0 Регистрация: 30.05.2010 Сообщений: 13 |
|
11.06.2010, 08:09 [ТС] |
6 |
благодарствую. *пошёл разбираться*
0 |
1 / 1 / 0 Регистрация: 17.11.2010 Сообщений: 40 |
|
17.11.2010, 14:20 |
7 |
Доброго времени суток Хотел спросить совета. Итак есть табличка (некая форма док-та). Ее нужно в 4-х экземплярах на печать выдавать (данные в экземлярах разные, но форма одна). Так вот вопрос — как можно определить границу печатного листа при копировании-вставки этой формы? ActiveSheet.HPageBreaks.Count пока я не вылезу за диапазон 1-го листа, значение = 0. Соответственно и границу (последнюю строку листа) неполучается вычислить… Можно конечно сделать по простому — сначала копировать, потом определять границы и добивать до нужного пустыми строками, но м.б. есть более красивый выход?
0 |
Как вставить номер страницы в ячейку / верхний / нижний колонтитул в Excel?
При печати файла Excel вам может потребоваться вставить номера страниц в страницы, чтобы напечатанный файл был аккуратным и читабельным. В этой статье я расскажу о некоторых быстрых приемах, как вставить номера страниц в ячейку, верхний или нижний колонтитул.
Вставить номер страницы в верхний / нижний колонтитул на одном листе
Вставить номер страницы в верхний / нижний колонтитул на нескольких листах
Вставить номер страницы в ячейку с кодом VBA
Удалить сразу все номера страниц в Excel
Вставить номер страницы в верхний / нижний колонтитул на одном листе
Обычно мы можем быстро вставить номера страниц в верхний или нижний колонтитул, используя Верхний и нижний колонтитулы функции, сделайте следующее:
1. Перейдите к листу, номера страниц которого вы хотите вставить в верхний или нижний колонтитул.
2. Затем нажмите Вставить > Верхний и нижний колонтитулы, и ваш рабочий лист будет в Макет страницы просмотреть, см. снимок экрана:
3. Щелкните верхний или нижний колонтитул, куда вы хотите вставить номер страницы, а затем Дизайн вкладка с Инструменты для верхних и нижних колонтитулов отображается на ленте, затем щелкните Дизайн > Номер страницы, см. снимок экрана:
4. И вы можете увидеть заполнитель & [Страница] отображаются в выбранном разделе, затем щелкните в любом месте за пределами области верхнего или нижнего колонтитула, чтобы отобразить номера страниц. Смотрите скриншот:
5. Теперь вы можете вернуться к нормальному виду, нажав Вид > нормальная, и когда вы распечатаете этот рабочий лист, вы увидите, что номера страниц были вставлены в выбранный вами верхний или нижний колонтитул.
Внимание: Если вы хотите, чтобы номера страниц отображались в формате 1 из 15, 2 из 15, вам просто нужно напрямую ввести это & [Страница] из & [Страниц] в поле верхнего или нижнего колонтитула, см. снимок экрана:
Вставить номер страницы в верхний / нижний колонтитул на нескольких листах
Вышеуказанный метод может помочь вам вставить номера страниц в один рабочий лист. Если вы хотите вставить номера страниц во все рабочие листы книги, чтобы все страницы были пронумерованы в последовательном порядке, сделайте следующее:
1. Выберите все вкладки листа, затем перейдите к Макет страницы вкладку и щелкните Кнопка запуска диалогового окна значок в Параметры страницы группа, см. снимок экрана:
2. В Параметры страницы диалоговое окно, щелкните Верхний / нижний колонтитул Вкладка, а затем нажмите кнопку Пользовательский заголовок or Пользовательские Подвал чтобы установить нужный верхний или нижний колонтитул, см. снимок экрана:
3. И в заголовок or нижний колонтитул диалоговое окно, укажите место, куда вставляются номера страниц, щелкнув внутри Левая часть:, Центральная секция: или Правый раздел: поле, как вам нужно, а затем щелкните Вставить номер страницы значок и заполнитель & [Страница] появляется. Смотрите скриншот:
Примечание: Введите это & [Страница] из & [Страниц] в поле верхнего или нижнего колонтитула, если вы хотите, чтобы номера страниц отображались как 1 из 45, 2 из 45…
4. Затем нажмите OK > OK Чтобы закрыть диалоговые окна, при печати этой книги в предварительном просмотре печати вы можете видеть, что все номера страниц вставлены в верхний или нижний колонтитул в последовательном порядке.
Вставить номер страницы в ячейку с кодом VBA
Вам легко вставить номера страниц в верхний или нижний колонтитул, но, если вам нужно вставить номера страниц в ячейку листа, у вас нет прямого способа сделать это. Следующий код VBA может помочь вам решить эту проблему.
1. Щелкните ячейку, в которой вы хотите отобразить номер страницы этой ячейки.
2. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
3. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: вставить номер текущей страницы в ячейку:
Sub pagenumber()
'updateby Extendoffice 20160506
Dim xVPC As Integer
Dim xHPC As Integer
Dim xVPB As VPageBreak
Dim xHPB As HPageBreak
Dim xNumPage As Integer
xHPC = 1
xVPC = 1
If ActiveSheet.PageSetup.Order = xlDownThenOver Then
xHPC = ActiveSheet.HPageBreaks.Count + 1
Else
xVPC = ActiveSheet.VPageBreaks.Count + 1
End If
xNumPage = 1
For Each xVPB In ActiveSheet.VPageBreaks
If xVPB.Location.Column > ActiveCell.Column Then Exit For
xNumPage = xNumPage + xHPC
Next
For Each xHPB In ActiveSheet.HPageBreaks
If xHPB.Location.Row > ActiveCell.Row Then Exit For
xNumPage = xNumPage + xVPC
Next
ActiveCell = "Page " & xNumPage & " of " & Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
End Sub
4, Затем нажмите F5 ключ для запуска этого кода, и номер страницы этой ячейки отображается в выбранной ячейке, см. снимок экрана:
Удалить сразу все номера страниц в Excel
Чтобы удалить все номера страниц, вы можете выполнить следующие действия:
1. Выберите все вкладки листа и перейдите к Макет страницы вкладку на ленте, затем щелкните Кнопка запуска диалогового окна значок в Параметры страницы группа, см. снимок экрана:
2. В Параметры страницы диалоговое окно, нажмите Верхний / нижний колонтитул вкладку, а затем выберите (Нет) из заголовок or нижний колонтитул выпадающий список, см. снимок экрана:
3. Затем нажмите OK Кнопка, все номера страниц удаляются из книги сразу.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Андрей_26 Пользователь Сообщений: 647 |
Добрый день! Попробуйте запустить макрос и сохранить файл (сохранится в той же папке) . Откройте файл pdf и посмотрите на колонтитулы со второго листа и далее. И что хотелось бы в сообщении #1 Прикрепленные файлы
Изменено: Андрей_26 — 16.01.2020 19:20:46 |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток. |
Андрей_26 Пользователь Сообщений: 647 |
Номера страниц формируются автоматически. В файле примере: Лист «Титул» — занимает 1 страницу, Лист «Протокол-1» — занимает 2 страницы, Лист «Протокол-4» — занимает 11 страниц). Итого имеет 14 страниц. 2) Параметры страницы — страница — номер первой страницы — 1 тогда результат будет таким (постраничная нумерация каждого листа excel) А мне нужно сделать так: Возможно ли это в принципе стандартными средствами Excel ? |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Андрей, в вашем конкретном случае, когда есть только два значения Страница протокола 1 и Страница протокола 2 — можно решить настройкой отдельных колонтитулов для чётных и нечётных страниц. Прикрепленные файлы
|
Андрей_26 Пользователь Сообщений: 647 |
Андрей VG
я понял принцип который вы предложили. Но к сожалению если посмотреть файл pdf с шестой страницы то получается: Еще раз попробую объяснить. Смотрите, есть сквозная нумерация внизу справа — она работает правильно. Всего листов в создаваемом отчете — 14. В книге есть листы такие как «Протокол-1» на данном листе 2 печатные страницы, т.е. нумерация по середине должна идти Страница протокола 1, Страница протокола 2. Следующий лист книги «Протокол-4» в нем 11 листов, нумерация по середине должна идти Страница протокола 1, Страница протокола 2……Страница протокола 11. Изменено: Андрей_26 — 16.01.2020 19:03:12 |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#6 16.01.2020 19:49:36
А вот этого в стартовом сообщении было ничего. Прикрепленные файлы
|
||
Андрей_26 Пользователь Сообщений: 647 |
#7 16.01.2020 20:55:12
Да, я исправил, что бы было более понятно сразу тем кто читает в первый раз. Изменено: Андрей_26 — 16.01.2020 21:02:55 |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#8 16.01.2020 22:17:47
Скорее всего так, настраивая колонтитул для каждой страницы и сохраняя либо каждую в отдельный pdf, а потом слияние в один, либо использовать что-нибудь типа Pdf Creator, что позволяют «печатать» в один и тот же pdf-файл, а потом сохранять. |
||
#excel #vba
#превосходить #vba
Вопрос:
Я могу пронумеровать страницы просто отлично, используя .Объект Pagesetup. Я могу использовать .DifferentFirstPageHeaderFooter, чтобы пропустить нумерацию первой страницы, но у меня также есть индекс, который я не хочу нумеровать, как мне начать нумерацию на 3-й странице?
Dim ws As Worksheet Application.ScreenUpdating = False For Each ws In Worksheets ws.PageSetup.DifferentFirstPageHeaderFooter = True ws.PageSetup.RightFooter = "Page " amp; "amp;P" amp; " of " "amp;N" Next ws Set ws = Nothing Application.ScreenUpdating = True
Комментарии:
1.
ws.PageSetup.FirstPageNumber = 3
2. @cybernetic.nomad ws.Набор страниц. FirstPageNumber = 3 просто устанавливает 2-ю страницу на «страницу 3 из x» вместо»страница 2 из x».
3. Я также заметил, что как только нумерация страниц задана в VBA, она устанавливается для всей книги. Другими словами, он отображается в пользовательском интерфейсе после однократного запуска в VBA, поэтому изменение VBA может быть переопределено настройками в пользовательском интерфейсе.