Колонтитулы в excel на vba

Создание верхнего и нижнего колонтитулов из кода 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, спасибо…я так и сделал, просто подумал что это не совсем верно…еще раз огромное спасибо за ответ.

Содержание

  1. Коды форматирования и VBA для верхних и нижних колонтитулов
  2. Пример
  3. Поддержка и обратная связь
  4. VB*: Формирование колонтитулов в книге Excel(номера страниц).
  5. Сообщения 5
  6. 1 Тема от BeS Yara 2011-06-24 11:27:53
  7. Тема: VB*: Формирование колонтитулов в книге Excel(номера страниц).
  8. 2 Ответ от JSmаn 2011-06-28 23:10:11
  9. Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
  10. 3 Ответ от BeS Yara 2011-06-29 12:09:42 (изменено: BeS Yara, 2011-06-29 12:28:16)
  11. Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
  12. 4 Ответ от JSmаn 2011-06-29 16:26:05
  13. Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
  14. VBA Excel. Колонтитулы
  15. Создание колонтитулов
  16. Удаление колонтитулов
  17. Коды форматирования
  18. Примеры форматирования
  19. Пример 1
  20. Пример 2

Коды форматирования и VBA для верхних и нижних колонтитулов

Следующие специальные коды форматирования и Visual Basic для приложений (VBA) можно включить в свойства верхнего и нижнего колонтитулов (LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter и RightFooter).

Код форматирования Description
&L Слева выравнивает следующие символы.
&C Центрирует следующие символы.
&R По правому краю выравниваются следующие символы.
&E Включает или отключает печать с двойным подчеркиванием.
&X Включает или отключает печать надстрочных индексов.
&Да Включает или отключает печать подстрочных индексов.
&B Включает или выключает печать полужирным шрифтом.
&I Включает или выключает печать курсивом.
&U Включает или отключает печать подчеркивания.
&S Включает или отключает зачеркивную печать.
&»fontname» Выводит символы, следующие за указанным шрифтом. Обязательно включите двойные кавычки.
&nn Выводит символы, следующие за указанным размером шрифта. Используйте двухзначное число, чтобы указать размер в точках.
&Цвет Выводит символы указанным цветом. Пользователь предоставляет шестнадцатеричное значение цвета.
&»+» Выводит символы, следующие в шрифте Заголовок текущей темы. Обязательно включите двойные кавычки.
&»-« Выводит символы, которые следуют за шрифтом Body текущей темы. Обязательно включите двойные кавычки.
&K xx. Snnn Выводит символы, которые следуют в указанном цвете из текущей темы.

xx — это двухзначное число от 1 до 12, указывающее используемый цвет темы.

Snnn указывает оттенок (оттенок) этого цвета темы. Укажите S как + для создания более светлого оттенка; Укажите S как — для создания более темного оттенка.

nnn — это трехзначное целое число, указывающее процент от 0 до 100.

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

VBA code Description
&D Выводит текущую дату.
&T Выводит текущее время.
&F Выводит имя документа.
&A Выводит имя вкладки книги.
&P Выводит номер страницы.
&P+number Выводит номер страницы плюс указанное число.
&P-номер Выводит номер страницы за вычетом указанного числа.
&& Печатает один амперсанд.
&N Выводит общее количество страниц в документе.
&Z Выводит путь к файлу.
&G Вставляет изображение.

Пример

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

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VB*: Формирование колонтитулов в книге Excel(номера страниц).

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 5

1 Тема от BeS Yara 2011-06-24 11:27:53

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [ 2 | 0 ]

    Тема: VB*: Формирование колонтитулов в книге Excel(номера страниц).

    Столкнулся с маленькой проблемой при генерации рабочей книги из VB.NET — колонтитулы(«Страница &P из &N») прописанные как в сгенерированнм макросе не отрабатывались(выводилось «Страница из «). Оказалось проблема известна и связана с особенностями локализации различных версий офиса.
    Печать офисных документов:Колонтитулы.
    Суть решения в том чтобы прописать варианты и для русского кода и для английского:

    Неправильные с точки зрения конкретной версии офиса коды игнорируются и на выходе получаем «Страница 1 из 351».

    P.S. В целом весьма любопытная статья по генерации html-документа для открытия в офисе — может кому-нибудь окажется полезна.
    P.P.S. Отдельная анонимная благодарность пользователям SQL.RU, в чьём обсуждении я наткнулся на эту замечательную ссылку

    2 Ответ от JSmаn 2011-06-28 23:10:11

    • JSmаn
    • Разработчик
    • Неактивен
    • Рейтинг : [ 34 | 0 ]

      Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

      BeS Yara, если не затруднит, напишите суть проблемы с примером кода, а также решение с комментарием. И тогда можно будет пополнить замечательную Коллекцию 🙂

      3 Ответ от BeS Yara 2011-06-29 12:09:42 (изменено: BeS Yara, 2011-06-29 12:28:16)

      • BeS Yara
      • Разработчик
      • Неактивен
      • Рейтинг : [ 2 | 0 ]

        Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

        Суть проблемы в том, что русский офис(2003) несмотря на то что генерирует в макрос коды для страницы и кол-ва страниц в колонтитула на английском, при добавлении этих кодов из VB.NET(судя по найденным тамам проблема общая и для других языков, на SQL.RU вообще делфи обсуждали ) колонтитулы не отображаются верно. А ведь запись макроса с последующей адоптацией в скрипт для многих основной метод получения знаний(по крайней мере для меня он первый, а уже потом хэлп, MSDN, яндекс).
        Например записываем макрос с добавлением «Страница X из Y». После удаления всего лишнего остаётся:

        Что примечательно, в конструкторе колонтитула это выглядит иначе: «Страница &[Страница] из &[Страниц]»
        В VB.NET кусок выглядит аналогично(я использовал для работы с экселем сборку Microsoft.Office.Interop.Excel). Из офиса макрос работает нормально, а вот при создании книги из VB.NET вместо «Страница 1 из 371» получается «Страница из » хотя если зайти в создание колонтитула видим законные(согласно записанному макросу) «Страница &P из &N»

        Как выяснилось при прочтении статьи, локализованный офис не всегда принимает нелокализованные коды(формула в ячейке, кстати, тоже чувствительна к локализации — если попробовать в русском офисе использовать английскую функцию для суммы, например, можно в этом убедиться).
        Так как приложение возможно будет запускаться не только с 2003-м и не только с руссифицированным, то вариант подставлять локализованные коды не подходит. Так вот в статье и предлагается указывать и английские коды и локализованные. В этом случае эксель игнорирует(и не отображает) те что не знает и отрабатывает знакомые:
        Приводить всю процедуры смысла нет — проблема с конкретным свойством.

        и — буквы русские!

        В конструкторе теперь получается «Страница &[Страница]&P из &[Страниц]&N»
        На выходе при печати — «Страница 1 из 371»

        P.S. Не знаю насколько тянет на коллекцию, хотя несколько ценных часов на поиск этого решения я потратил, так что лишним не будет(как часть Вашей темы «WSH: преобразуем макрос VBA в скрипт VBScript» ).

        4 Ответ от JSmаn 2011-06-29 16:26:05

        • JSmаn
        • Разработчик
        • Неактивен
        • Рейтинг : [ 34 | 0 ]

          Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

          Отлично, спасибо. Перемещаю тему в раздел по VBA.

          Источник

          VBA Excel. Колонтитулы

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

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

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

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

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

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

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

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

          Специальные коды 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

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

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

          Пример 2

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

          Источник

Автор 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: Вставить данные из ячейки в колонтитул, кроме первого листа

Is there a way to use Excel-VBA code in order to make a picture object in a sheet, so as to insert it as a footer image. I have tried to do so by creating a chart object and pasting it in a picture-format, and then exporting the chart to an image file and setting the image as the footer. Is there a better way to insert a picture object as a footer image, and if so, how do I do it?

Community's user avatar

asked Mar 29, 2012 at 13:47

roshanK's user avatar

4

I started the macro recorder. I clicked Page Setup then Header/Footer then Custom Footer. I clicked the centre section and then Format Picture (button with image of sun over mountains). I browsed for an image and clicked Insert. «&[Picture]» appeared in the centre section. I clicked OK twice. I switched the macro recorder off.

I printed the page and the selected image appeared at the bottom.

The important code saved by the macro recorder was:

ActiveSheet.PageSetup.CenterFooterPicture.Filename = _
    "C:UsersPublicPicturesSample PicturesDesert Landscape.jpg"

Replace "C:UsersPublicPicturesSample PicturesDesert Landscape.jpg" with filename of your choice.

The macro recorder is usually the easiest way of discovering statements like this.

answered Apr 2, 2012 at 16:51

Tony Dallimore's user avatar

Tony DallimoreTony Dallimore

12.3k7 gold badges31 silver badges61 bronze badges

1

For anybody viewing this in the future, I’ll share my code to copy a range and save it as a file on your computer, which can then be added to the footer. You can eliminate whatever bits you don’t want =)

  Dim objPic As Shape
  Dim objChart As Chart
  Dim strTimeStamp As String
  Dim strFileDest As String

20    Sheets(2).Activate

30    Sheets(2).Columns("R:T").AutoFit
40    Sheets(2).Rows("17:21").AutoFit

50    ActiveWindow.DisplayGridlines = False
60    Call Sheets(2).Range("S17", "U21").CopyPicture(xlScreen, xlPicture)
70    ActiveWindow.DisplayGridlines = True

80    Sheets(2).Shapes.AddChart
90    Sheets(2).Activate
100   Sheets(2).Shapes.Item(1).Select

110   Set objChart = ActiveChart
120   ActiveChart.Parent.Name = "FooterChart"

  ' For some reason, Excel occasionally tries to make an actual chart out of these strings.
  ' It's just a nonsensical chart that messes the footer up but I'm having trouble duplicating the issue and figuring out what causes it.
  ' This should always work.  Don't use .Clear, it crashes.

130   ActiveChart.ChartArea.ClearContents

140   objChart.Paste
150   Selection.Name = "FooterImage"
160   ActiveSheet.ChartObjects("FooterChart").Activate

170   Sheets(2).Shapes.Item(1).Line.Visible = msoFalse
180   Sheets(2).Shapes.Item(1).Height = Range("S17", "U21").Height
190   Sheets(2).Shapes.Item(1).Width = Range("S17", "U21").Width
200   ActiveChart.Shapes.Range(Array("FooterImage")).Height = Range("S17", "U21").Height
210   ActiveChart.Shapes.Range(Array("FooterImage")).Width = Range("S17", "U21").Width

220   Sheets(2).Shapes.Item(1).Height = Sheets(2).Shapes.Item(1).Height * 1.25
230   Sheets(2).Shapes.Item(1).Width = Sheets(2).Shapes.Item(1).Width * 1.25
240   ActiveChart.Shapes.Range(Array("FooterImage")).Height = ActiveChart.Shapes.Range(Array("FooterImage")).Height * 1.2
250   ActiveChart.Shapes.Range(Array("FooterImage")).Width = ActiveChart.Shapes.Range(Array("FooterImage")).Width * 1.2

260   strTimeStamp = CStr(Format(Now(), "yyyymmddHhNnSs"))
270   strFileDest = "D:Temp" & strTimeStamp & ".jpg"

280   objChart.Export strFileDest

290   InsertPicture strFileDest

300   If Len(Dir$(strFileDest)) > 0 Then
310       Kill strFileDest
320   End If

330   Sheets(2).Shapes.Item(1).Delete

answered Jul 13, 2015 at 13:04

Kevin Whalen's user avatar

Try this:

Dim ws as Worksheet
Set ws = Worksheets("YourWorksheetName")

With ws.PageSetup
   .CenterFooterPicture = "&G" 'Specifies that you want an image in your footer
   .CenterFooterPicture.Filename = "C:PicturesMyFooterImage.jpg" 'specifies the image file you want to use

End With

The code generated by the macro recorder will get you part of the way there, but as is often the case, it doesn’t provide the whole or most appropriate solution. It also sounds like you are trying to insert an image generated by Excel (such as a chart) into the footer? if that’s the case, I believe you will have to same the object as an image and then reference that image file.

answered Sep 30, 2014 at 21:42

zartag's user avatar

1 2011-06-24 11:27:53

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Тема: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Столкнулся с маленькой проблемой при генерации рабочей книги из VB.NET — колонтитулы(«Страница &P из &N») прописанные как в сгенерированнм макросе не отрабатывались(выводилось «Страница  из «). Оказалось проблема известна и связана с особенностями локализации различных версий офиса.
Печать офисных документов:Колонтитулы.
Суть решения в том чтобы прописать варианты и для русского кода и для английского:


.CenterFooter = "Страница &С&P из &К&N"

Неправильные с точки зрения конкретной версии офиса коды игнорируются и на выходе получаем «Страница 1 из 351».

P.S. В целом весьма любопытная статья по генерации html-документа для открытия в офисе — может кому-нибудь окажется полезна.
P.P.S. Отдельная анонимная благодарность пользователям SQL.RU, в чьём обсуждении я наткнулся на эту замечательную ссылку

2 Ответ от JSmаn 2011-06-28 23:10:11

  • JSmаn
  • Разработчик
  • Неактивен

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

BeS Yara, если не затруднит, напишите суть проблемы с примером кода, а также решение с комментарием. И тогда можно будет пополнить замечательную Коллекцию :-)

3 Ответ от BeS Yara 2011-06-29 12:09:42 (изменено: BeS Yara, 2011-06-29 12:28:16)

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Суть проблемы в том, что русский офис(2003) несмотря на то что генерирует в макрос коды для страницы и кол-ва страниц в колонтитула на английском, при добавлении этих кодов из VB.NET(судя по найденным тамам проблема общая и для других языков, на SQL.RU вообще делфи обсуждали ) колонтитулы не отображаются верно. А ведь запись макроса с последующей адоптацией в скрипт для многих основной метод получения знаний(по крайней мере для меня он первый, а уже потом хэлп, MSDN, яндекс).
Например записываем макрос с добавлением «Страница X из Y». После удаления всего лишнего остаётся:


Sub Макрос1()
    With ActiveSheet.PageSetup
        .CenterFooter = "Страница &P из &N"
    End With
End Sub

Что примечательно, в конструкторе колонтитула это выглядит иначе: «Страница &[Страница] из &[Страниц]»
В VB.NET кусок выглядит аналогично(я использовал для работы с экселем сборку Microsoft.Office.Interop.Excel). Из офиса макрос работает нормально, а вот при создании книги из VB.NET вместо «Страница 1 из 371» получается «Страница   из  » хотя если зайти в создание колонтитула видим законные(согласно записанному макросу) «Страница &P из &N»

Как выяснилось при прочтении статьи, локализованный офис не всегда принимает нелокализованные коды(формула в ячейке, кстати, тоже чувствительна к локализации — если попробовать в русском офисе использовать английскую функцию для суммы, например, можно в этом убедиться).
Так как приложение возможно будет запускаться не только с 2003-м и не только с руссифицированным, то вариант подставлять локализованные коды не подходит. Так вот в статье и предлагается указывать и английские коды и локализованные. В этом случае эксель игнорирует(и не отображает) те что не знает и отрабатывает знакомые:
Приводить всю процедуры смысла нет — проблема с конкретным свойством.


With oExcel.ActiveSheet.PageSetup
  .CenterFooter = "Страница &С&P из &К&N"
End With

и — буквы русские!

В конструкторе теперь получается «Страница &[Страница]&P из &[Страниц]&N»
На выходе при печати — «Страница 1 из 371»

P.S. Не знаю насколько тянет на коллекцию, хотя несколько ценных часов на поиск этого решения я потратил, так что лишним не будет(как часть Вашей темы «WSH: преобразуем макрос VBA в скрипт VBScript» ).

_____________________
Источник решения — SQL.RU> Delphi> Нумерация страниц в Excel

4 Ответ от JSmаn 2011-06-29 16:26:05

  • JSmаn
  • Разработчик
  • Неактивен

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Отлично, спасибо. Перемещаю тему в раздел по VBA.

5 Ответ от BeS Yara 2011-06-29 16:51:01

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Учитывая что как раз в офисе(в VBA) нормально работает с одними английскими кодами, эта информация более актуальна для VBS(VB.NET etc)
Например здесь WSH: преобразуем макрос VBA в скрипт VBScript @ JSman или здесь WSH: преобразуем макрос VBA в скрипт VBScript @ alexii. Да и объединить бы информацию из этих одноимённых тем в одну(в коллекцию) было бы полезно.

Понравилась статья? Поделить с друзьями:
  • Колонтитулы в excel как вставить картинку
  • Колонтитулы word 2007 только на первой странице word
  • Колонтитулы в excel исправить
  • Колонтитул только на последней странице word 2013
  • Колонтитулы в excel для таблицы