Макрос для колонтитула excel

Создание верхнего и нижнего колонтитулов из кода 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

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


 

rumpelshtitchen

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

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

#1

13.07.2022 09:14:23

Доброго времени суток. Подскажите решение след. задачи.
Необходимо сделать колонтитул на определенные (выбранные) листы книги.
То есть, что бы при сохранении выбранных листов в PDF отображался колонтитул. На просторах интернета нашел код для написания макроса. Но не могу решить проблему отображения колонтитула на НЕСКОЛЬКИХ (определенных/ выбранных листах). Листы, на данный момент выбираются вруную, впоследствии, листы будут выбираться автоматически с помощью макроса. Подскажите, что добавить в код, что бы отображение происходило на всех необходимых листах.
Код изначально был вот такой:

Код
Sub Signature()                             'Для колонтитула
   With ActiveSheet.PageSetup
       .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
       .CenterFooter = ""
       .RightFooter = "Лист  &P" & "     Листов &N  "
   End With
End Sub

«Поковырявшись», нашел вот такой вариант…..но он выкидывает ошибку…

Код
Sub Signature()                           
Dim xSh As Worksheet
    Application.ScreenUpdating = False
    For Each xSh In Worksheets
        xSh.Select
        Call CodSignature
    Next
    Application.ScreenUpdating = True
End Sub
Sub CodSignature()                             
       .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
       .CenterFooter = ""
       .RightFooter = "Лист  &P" & "     Листов &N  "
   End With
End Sub
 

И тут же, возник еще один вопрос касаемо колонтитула, объясните пожалуйста, где дописать код (условия) для текста (жирный, курсив и т.д.)

Изменено: rumpelshtitchen13.07.2022 09:19:21

 

Ігор Гончаренко

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

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

#3

13.07.2022 09:40:58

Код
Sub Signature()                           
Dim xSh As Worksheet
    For Each xSh In Worksheets
        CodSignature xSh
    Next
End Sub

Sub CodSignature(ws as worksheet)        
  with ws                     
    .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "
  End With
End Sub

задайте нужный формат вручную, запишите действия макрорекордером, используйте полученный макрос

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ігор Гончаренко, Благодарю за ответ. Но вопрос про форматирование текста остается интересным исключительно для собственного понимания, то есть, не просто скопировать макрос что бы он работал, а понять, как правильно написать код, куда вставить необходимые строки, что бы можно было изменить форматирование.

 

rumpelshtitchen

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

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

#5

13.07.2022 09:56:41

Цитата
написал:
Sub CodSignature(ws as worksheet)  

Выдает ошибку, в данном месте…что при выборе одного листа, что при выборе нескольких.

Изменено: rumpelshtitchen13.07.2022 09:57:42

 

Ігор Гончаренко

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

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

#6

13.07.2022 10:01:42

Цитата
rumpelshtitchen написал:
задайте нужный формат вручную, запишите действия макрорекордером, используйте полученный макрос

я предлагал не использовать макрос полностью, а посмотреть как там были пременены нужные вам форматы и использовать это в своем коде
это как раз очень полезно «для собственного понимания» не использовать макрос целиком, а использовать нужные фрагменты кода из него
собственное понимание возникнет, когда сможете самостоятельно получить нужный результат

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ігор Гончаренко, Благодарю, буду пробовать.

 

rumpelshtitchen

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

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

#8

13.07.2022 10:56:46

Цитата
написал:
Sub Signature()                           Dim xSh As Worksheet    For Each xSh In Worksheets        CodSignature xSh    NextEnd Sub Sub CodSignature(ws as worksheet)          with ws                         .LeftFooter = »               Шифр: » & [‘Ввод общих данных’!H19]     .CenterFooter = «»    .RightFooter = «Лист  &P» & »     Листов &N  »  End WithEnd Sub

Вот, я совсем запутался…вопрос, для понимания:
что такое xSh?
если я правильно понял, та даннаое выражение «ws as worksheet» это сокращение, то есть мы присваиваем значению «ws» условие «worksheet»?
куда, а главное почему мы избавились от «PageSetup»?

 

rumpelshtitchen

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

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

#9

13.07.2022 11:02:14

Ігор Гончаренко, задал необходимый формат вручную, как Вы и советовали, получил необходимую строчку .Font.Italic = True….данную строку переставлял и до и после…

Код
with ws                         .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "

ни чего не получается. Где я ошибаюсь, подскажите, направьте пожалуйста.

 

Ігор Гончаренко

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

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

#10

13.07.2022 11:12:16

Цитата
rumpelshtitchen написал:
ws as worksheet

обьявлена переменная названного типа

Цитата
rumpelshtitchen написал:
почему мы избавились от «PageSetup»?

не мы а вы, почему я не знаю
файла нет пишу что попало, не проверяя и не особо вникая
видимо это
with ws
следовало написать так:
with ws.PageSetup

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

А вот еще вопрос назрел. А как будет выглядеть строчка для конкретно выбранных листов. Select ?  я втак понял что «worksheet» это рабочие листы, если я правильно понял это все листы в книге.

 

забудьте о Селектах, не нужны они практически НИКОГДА
а с worksheet ничего вы не поняли

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ігор Гончаренко, проблема заключается в следующем. В книге около 150 листов. и я так понимаю при условии «worksheet», макрос применяет их, ко всем 150 листам, книжка повисает….и…..все. А по условию, необходимо отобразить колонтитул на 15,,,20 листах, которые выбираются вручную (впоследствии через макрос). Именно по этому и задаю вопрос про СЕЛЕКТ да и про ВОРКШИТ, что бы понять как это все работает.

 

Дмитрий(The_Prist) Щербаков

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

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

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

#14

13.07.2022 11:51:49

Цитата
rumpelshtitchen написал:
что бы понять как это все работает

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

Цитата
rumpelshtitchen написал:
еобходимо отобразить колонтитул на 15,,,20 листах, которые выбираются вручную (впоследствии через макрос).

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

Код
For Each ws In ActiveWindow.SelectedSheets
CodSignature xSh
next

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

 

Ігор Гончаренко

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

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

#15

13.07.2022 12:00:18

Цитата
rumpelshtitchen написал:
я так понимаю при условии «worksheet»,

вы второй раз называете это условием, а это никакое не условие, это тип одного из обьектов обьектной модели Excel
Select вам все равно не нужен
в теме как отметить несколько заданных листов имена нужных листов уже были затолканы в массив, от туда их и нужно брать (из этого массива) и не нужно их отмечать (особенно все вместе)
читайте «VBA для чайников» постепенно информация начнет укладываться в голове начнете понимать что это такое и как этим пользоваться

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

rumpelshtitchen

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

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

#16

13.07.2022 12:22:19

Дмитрий(The_Prist) Щербаков, Вы верно объяснили задачу, которую я не смог в должной степени донести, необходимо пройтись по всем выделенным листам и на них проставить колонтитул. Выбор листов произвольный, то есть сам оператор, ручками, выбирает необходимые ему листы, на которых и должен отображаться колонтитул.
Взяв за основу Ваш кусоче кода написал вот такой код

Код
Sub Signature()Dim xSh As Worksheet
    For Each ws In ActiveWindow.SelectedSheets
    CodSignature xSh
    Next
End Sub
 Sub CodSignature(ws As Worksheet)
    With ws.PageSetup
    .LeftFooter = "               Øèôð: " & ['Ââîä îáùèõ äàííûõ'!H19] & " ¹ " & ['Ââîä îáùèõ äàííûõ'!M7] & " " & ['Ââîä îáùèõ äàííûõ'!H9] & " - " & ['Ââîä îáùèõ äàííûõ'!H15]
    .CenterFooter = ""
    .RightFooter = "Ëèñò  &P" & "     Ëèñòîâ &N  "
  End With
End Sub

при выполнении выдает ошибку, понимаю, что где то не верно указан параметр «листов» и предположу что в данном месте:

Код
 Sub CodSignature(ws As Worksheet)

но в чем ошибка….не могу понять, хоть убей..

Изменено: rumpelshtitchen13.07.2022 12:23:07

 

Дмитрий(The_Prist) Щербаков

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

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

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

#17

13.07.2022 12:27:55

Цитата
rumpelshtitchen написал:
выдает ошибку

возможно

Цитата
rumpelshtitchen написал:
но в чем ошибка

основная — в том, что не пишите ни на какой строке, ни какая ошибка.
Предположу, что опять же — от незнания полного — Вы просто скопировали мой код и так же просто вставили его, даже не пытаясь понять что и зачем. И поэтому у Вас везде в Ваших кодах ранее используется переменная xSh, а мой код скопировали как есть, в котором используется не xSh, а ws. В итоге передаете в функцию не перебираемый лист, а Nothing.

Код
Sub Signature()
    Dim xSh As Worksheet
    For Each xSh In ActiveWindow.SelectedSheets
    CodSignature xSh
    Next
End Sub

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

 

Дмитрий(The_Prist) Щербаков, к большому сожалению, должен признать, что не ясны мне переменные…и листы. Скопировать и просто вставить было бы просто, в оправдание могу сказать, я бы не раздувал такую большую тему. А пошел в неправильном направлении и искал зависимость в листах….а не в переменной. Трудно понять, как это все работает, по этому и нет понимания, к сожалению. Огромное спасибо за помощь и объяснение.

 

Ігор Гончаренко

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

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

#19

13.07.2022 12:47:00

Цитата
rumpelshtitchen написал:
Трудно понять, как это все работает

трудно понять что вы пишете

Цитата
rumpelshtitchen написал:
и искал зависимость в листах….а не в переменной.

с вашего на человеческий это как переводится? и что значит?
и вообще, файл у вас есть, на котором вы все это выполняете
выкладываете его сюда, обьясняете что хотите получить в итоге и на каком шаге возникла проблема

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ігор Гончаренко, Имеется книга. На листе7 вводятся данные, номер и дата.
На листе «Тит_лист» имеется кнопка 1, которая запускает выполнение макроса, применяемое к 5ти оставшимся листам, в том числе и созданию колонтитула.
Вопрос, как сделать так, что бы колонтитул, отображался на выбранных листах (выбор осуществляется оператором, то есть их может быть 2, а могут быть и все 5) так же как на листе «Тит_лист».
В дополнение ко всему: это только часть файла. В оригинальном файле около 150 листов (какие то скрыты, какие то нет.) На печать в ПДФ идут 15,,,,20 листов выбранные оператором. При нажатии конпки1 в основном фале, на выполнение макроса уходит около 1…1,5 минут, и это при условии, что макрос на автоматический выбор листов и создание ПДФ еще не написан.

Изменено: rumpelshtitchen13.07.2022 17:17:50

 

Ігор Гончаренко

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

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

#21

14.07.2022 14:49:26

Цитата
rumpelshtitchen написал:
Имеется книга. На листе7 вводятся данные, номер и дата

в ячейку А1 и ниже вводятся имена листов

дальше все тоже самое что делали вы

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

  • Пример (Колонтитул) (1).xlsm (95.06 КБ)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

rumpelshtitchen

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

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

#22

26.09.2022 09:10:19

Друзья, доброго времени суток, в продолжении данной темы, подскажите, как деактивировать данный макрос. То есть сделать так, что бы уже созданный колонтитул исчез при печати.
Сам код:

Код
Sub Signature2()            ' Макрос для проставления колонтитула (меняет колонтитул на всех листа)
Dim xSh As Worksheet
    For Each xSh In Worksheets
        CodSignature2 xSh
    Next
End Sub
 Sub CodSignature2(ws As Worksheet)
  With ws.PageSetup
    .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] & " № " & ['Ввод общих данных'!M7] & " " & ['Ввод общих данных'!H9] & " - " & ['Ввод общих данных'!H15]
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "
  End With
End Sub
 

RAN

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

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

#23

26.09.2022 10:54:42

Код
.LeftFooter = ""
.CenterFooter = ""
.RightFooter =""
 

rumpelshtitchen

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

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

#24

26.09.2022 14:15:36

RAN, спасибо…я так и сделал, просто подумал что это не совсем верно…еще раз огромное спасибо за ответ.

Запись установки колонтитулов в макрос

kotenok-vamp

Дата: Понедельник, 17.11.2014, 14:28 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

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


Excel 2010

Добрый день!
Excel 2010
Никак не получается записать макрос, который бы устанавливал колонтитулы в файле. Ранее, в Excel 2007 проблем с этим не было.
Подскажите,как их записать.

 

Ответить

Pelena

Дата: Понедельник, 17.11.2014, 14:47 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Макрорекодер не помогает?
Прикладывайте файл с объяснением что куда надо записать


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

kotenok-vamp

Дата: Понедельник, 17.11.2014, 15:21 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

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


Excel 2010

Pelena, что есть макрорекодер?..(
А записать…надо вот так

 

Ответить

RAN

Дата: Понедельник, 17.11.2014, 15:24 |
Сообщение № 4

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

Ранг: Экселист

Сообщений: 5645

Никак не получается записать макрос, который бы устанавливал колонтитулы в файле. Ранее, в Excel 2007 проблем с этим не было.

Pelena, что есть макрорекодер?..(

:o :o :o


Быть или не быть, вот в чем загвоздка!

 

Ответить

kotenok-vamp

Дата: Понедельник, 17.11.2014, 15:26 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

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


Excel 2010

RAN, я просто не знала,что конкретно так называется..увы,не все гении в терминалогии. Для меня это просто запись макроса.

 

Ответить

Pelena

Дата: Понедельник, 17.11.2014, 15:34 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

kotenok-vamp, а какие проблемы в 2010? Всё то же самое: включаете запись макроса, выполняете действия, останавливаете запись. Что не получается?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

kotenok-vamp

Дата: Понедельник, 17.11.2014, 15:41 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

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


Excel 2010

Pelena,
Действия не сохраняются…все остальные :настройка полей,сквозных строк — сохраняется. А колонтитулы — нет.
Вот пример кода,который записался.Здесь сквозные строки, колонтитулы, настройка полей.

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

vfrhjc.txt
(4.3 Kb)

 

Ответить

RAN

Дата: Понедельник, 17.11.2014, 15:44 |
Сообщение № 8

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

Ранг: Экселист

Сообщений: 5645


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANПонедельник, 17.11.2014, 15:51

 

Ответить

Pelena

Дата: Понедельник, 17.11.2014, 15:54 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

те действия, которые на скринах
[vba]

Код

Sub Макрос2()

‘ Макрос2 Макрос

     With ActiveSheet.PageSetup
         .LeftHeader = «&Z&F»
         .RightFooter = «&P»

     End With
End Sub

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

kotenok-vamp

Дата: Понедельник, 17.11.2014, 15:59 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

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


Excel 2010

Pelena, Спасибо!!!

 

Ответить

RAN

Дата: Понедельник, 17.11.2014, 15:59 |
Сообщение № 11

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

Ранг: Экселист

Сообщений: 5645

Не очень разобрался, но при включенном
[vba]

Код

‘    Application.PrintCommunication = False

[/vba]
записанный макрос работать не хочет.
Может потому, что у меня принтера нет?

Цитата

Version Added: Excel 2010


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANПонедельник, 17.11.2014, 16:00

 

Ответить

Автор Russs, 13 февраля 2017, 12:02

Как с помощью макроса вставить данные из ячейки в верхний колонтитул?
При этом для первого листа не нужно делать колонтитул.
Схематично колонтитул должен выглядеть так:
centerheader стр. P из N, rightheader по состоянию на «ссылка на ячейку на первом листе».



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

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

По поводу первого листа. В данном случае нужно использовать термин «страница», а не лист. Т.к. лист — это то, что имеет внизу ярлык — юзер щёлкает по ярлыку и отображается лист. А сам лист уже состоит из страниц. Страницы появляются при печати, а также страницы можно увидеть в некоторых режимах, например, Разметка страницы.
В самом экселе (без макроса) можно так сделать, чтобы колонтитулы были на всех страницах кроме первой: вкладка «Разметка страницы» — группа «Параметры страницы» — справа еле заметная стрелочка — откроется диалог — вкладка «Колонтитулы» — поставьте галочку «Особый колонтитул для первой страницы». Это позволит настроить колонтитул для первой страницы и для всех остальных.

Что касается подстановки в колонтитул текста из ячейки:
Sub Макрос()
    ActiveSheet.PageSetup.CenterHeader = «&P из &N»
    ‘ Здесь укажите имя листа (или номер листа) и ячейку, из которой нужно извлечь данные.
    ActiveSheet.PageSetup.RightHeader = «По состоянию на » & Worksheets(1).Range(«A1»).Value
End Sub



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

  • VBA, Excel

  • VBA, макросы в Excel

  • Excel VBA: Вставить данные из ячейки в колонтитул, кроме первого листа

Печать таблиц
19.04.2013 19126

Параметры верхнего и нижнего колонтитулов достаточно гибкие, но у вас нет прямою способа вывести содержимое ячейки в колонтитулах страницы. Такую задачу легко решить, если воспользоваться макросами VBA.

На рис. 191.1 показан лист с некоторыми значениями. Ячейка А1 содержит обычную формулу, которая вычисляет сумму значений. Цель состоит в том, чтобы отобразить значение ячейки А1 в центре верхнего колонтитула страницы.

Рис. 191.1. Необходимо показать содержимое ячейки А1 в верхнем колонтитуле страницы

Рис. 191.1. Необходимо показать содержимое ячейки А1 в верхнем колонтитуле страницы

Чтобы создать макрос, выполните следующие действия.

  1. Убедитесь, что окно рабочей книги не развернуто.
  2. Щелкните правой кнопкой мыши на вкладке листа и выберите команду Исходный текст. Появится пустой модуль кода в редакторе Visual Basic. В левой части щелкните на объекте ЭтаКнига, чтобы добавить для него код.
  3. Введите следующий макрос:
  4. 1
    2
    3
    4
    5
    
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    	With ActiveSheet.PageSetup
    		.CenterHeader = Sheets("Лист1").Range("A1").Text
    	End With
    End Sub

Макрос выполняется в том случае, если книга печатается. Макрос копирует содержимое ячейки А1 (листа Лист1) в центральный верхний колонтитул. Вы можете, конечно, настроить имя листа или адрес диапазона так, чтобы колонтитул отображал содержимое другой ячейки.

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

  • LeftHeader;
  • RightHeader;
  • LeftFooter;
  • CenterFooter;
  • RightFooter.

К сожалению, Excel 2010 не выводит новый верхний или нижний колонтитул, когда книга предварительно просматривается.

Если у вашей книги расширение XLSX, вам необходимо повторно сохранить ее с расширением XLSM. В противном случае Excel отбросит макрос.

По теме

Новые публикации

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

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

'верхний колонтитул
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, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

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

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

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

0 / 0 / 0

Регистрация: 03.10.2010

Сообщений: 48

1

Excel

17.09.2019, 22:49. Показов 3579. Ответов 3


Студворк — интернет-сервис помощи студентам

Всем привет. Просьба очень простая (наверное). Нужно написать макрос, который бы очищал колонтитулы (верх и низ) на листе в книге. Пробовал это сделать сам через запись макроса, но бесполезно.



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

17.09.2019, 23:11

2

Лучший ответ Сообщение было отмечено Магистр как решение

Решение

Макрорекордер выдаёт следующее

Visual Basic
1
2
3
4
5
6
7
8
With ActiveSheet.PageSetup
     .LeftHeader = ""
     .CenterHeader = ""
     .RightHeader = ""
     .LeftFooter = ""
     .CenterFooter = ""
     .RightFooter = ""
End With



0



0 / 0 / 0

Регистрация: 03.10.2010

Сообщений: 48

18.09.2019, 18:04

 [ТС]

3

По какой-то причине этот кусок кода не работает в уже созданном макросе, но работает в другом



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

18.09.2019, 18:28

4

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



0



Главная » Мои надстройки »

Проставление/изменение колонтитулов на нескольких листах

30 Апрель 2011              42163 просмотров

Данная надстройка позволяет создать или изменить уже имеющиеся колонтитулы на нескольких листах книги сразу. Притом можно выбрать определенные листы, а не все листы сразу. Можно скопировать колонтитулы с одного листа книги на другие.

Колонтитулы

Выбрать лист, с которого копировать колонтитулы — здесь можно выбрать лист, колонтитулы с которого необходимо скопировать на другие листы. Как только Вы выберете лист — в полях с обозначением колонтитулов сразу отобразятся значения всех проставленных колонтитулов листа. В полях со значениями колонтитулов Вы можете изменить эти значения. Чтобы колонтитулы изменились, необходимо отметить флажками те колонтитулы, который необходимо изменить/создать/скопировать. Не отмеченные колонтитулы останутся без изменений.

Выбор листов для проставления колонтитулов — здесь необходимо выбрать те листы, колонтитулы на которых необходимо изменить/создать.

Скачать надстройку:

  Change_Footers.zip (44,3 KiB, 4 977 скачиваний)

Как установить надстройку: Установка надстроек

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


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Найти конкретное значение и затем заменить его другим значением в Excel — обычное дело в нашей повседневной работе, но в Excel функция «Найти и заменить» хорошо работает в выделении, листах и ​​книге, но не может найти и заменить в верхнем и нижнем колонтитулах. В этой статье я представляю код макроса для поиска и замены значений в верхнем и нижнем колонтитулах.

Найти и заменить в верхнем или нижнем колонтитуле на VBA


стрелка синий правый пузырь Найти и заменить в верхнем или нижнем колонтитуле на VBA

1. Включите лист, который вы хотите найти и заменить в верхнем и нижнем колонтитулах, нажмите Alt + F11 ключи для открытия Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте ниже код VBA в Module. Смотрите скриншот:

VBA: найти и заменить в верхнем и нижнем колонтитулах

Sub FnR_HF()
'UpdateByExtendoffice20160623
    Dim xStr As String, xRep As String
    'Const csTITLE As String = "Find and Replace"
    On Error Resume Next
    xStr = Application.InputBox("Replace what", "Kutools for Excel", , , , , 2)
    If xStr = "" Then Exit Sub
    xRep = Application.InputBox("With what", , "Kutools for Excel", , , , , 2)
    With ActiveSheet.PageSetup
        ' Substitute Header/Footer values
        .LeftHeader = Application.WorksheetFunction.Substitute(.LeftHeader, xStr, xRep)
        .CenterHeader = Application.WorksheetFunction.Substitute(.CenterHeader, xStr, xRep)
        .RightHeader = Application.WorksheetFunction.Substitute(.RightHeader, xStr, xRep)
        .LeftFooter = Application.WorksheetFunction.Substitute(.LeftFooter, xStr, xRep)
        .CenterFooter = Application.WorksheetFunction.Substitute(.CenterFooter, xStr, xRep)
        .RightFooter = Application.WorksheetFunction.Substitute(.RightFooter, xStr, xRep)
    End With
End Sub

документ найти заменить нижний колонтитул 1

3. Затем нажмите F5 нажмите клавишу, чтобы запустить код, затем появится диалоговое окно для ввода текста, который вы хотите найти. Смотрите скриншот:
документ найти заменить нижний колонтитул 2

4. Нажмите OK, и появится другое диалоговое окно для ввода текста, которым вы хотите заменить. Смотрите скриншот:
документ найти заменить нижний колонтитул 3

5. Нажмите OK. Теперь ценности «КТЕ» были заменены на Kutools for Excel в верхнем и нижнем колонтитулах.
документ найти заменить нижний колонтитул 4

Функции: Если вы хотите работать со всей книгой, вы можете использовать приведенный ниже код макроса.

Sub FnR_HF()
'UpdateByExtendoffice20171122
    Dim I As Long
    Dim xStr As String, xRep As String
    'Const csTITLE As String = "Find and Replace"
    On Error Resume Next
    xStr = Application.InputBox("Replace what", "Kutools for Excel", , , , , 2)
    If xStr = "" Then Exit Sub
    xRep = Application.InputBox("With what", , "Kutools for Excel", , , , , 2)
    For I = 1 To ActiveWorkbook.Sheets.Count
        With Sheets(I).PageSetup
            ' Substitute Header/Footer values
            .LeftHeader = Application.WorksheetFunction.Substitute(.LeftHeader, xStr, xRep)
            .CenterHeader = Application.WorksheetFunction.Substitute(.CenterHeader, xStr, xRep)
            .RightHeader = Application.WorksheetFunction.Substitute(.RightHeader, xStr, xRep)
            .LeftFooter = Application.WorksheetFunction.Substitute(.LeftFooter, xStr, xRep)
            .CenterFooter = Application.WorksheetFunction.Substitute(.CenterFooter, xStr, xRep)
            .RightFooter = Application.WorksheetFunction.Substitute(.RightFooter, xStr, xRep)
        End With
    Next
End Sub

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Понравилась статья? Поделить с друзьями:
  • Макрос для изменения размера рисунков в word
  • Макрос для изменения размера рисунка в word
  • Макрос для изменения значения в ячейке excel
  • Макрос для защиты всех листов книги excel
  • Макрос для запуска кнопки excel