Создание верхнего и нижнего колонтитулов из кода 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 |
#1 13.07.2022 09:14:23 Доброго времени суток. Подскажите решение след. задачи.
«Поковырявшись», нашел вот такой вариант…..но он выкидывает ошибку…
|
||||
И тут же, возник еще один вопрос касаемо колонтитула, объясните пожалуйста, где дописать код (условия) для текста (жирный, курсив и т.д.) Изменено: rumpelshtitchen — 13.07.2022 09:19:21 |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#3 13.07.2022 09:40:58
задайте нужный формат вручную, запишите действия макрорекордером, используйте полученный макрос Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Ігор Гончаренко, Благодарю за ответ. Но вопрос про форматирование текста остается интересным исключительно для собственного понимания, то есть, не просто скопировать макрос что бы он работал, а понять, как правильно написать код, куда вставить необходимые строки, что бы можно было изменить форматирование. |
|
rumpelshtitchen Пользователь Сообщений: 136 |
#5 13.07.2022 09:56:41
Выдает ошибку, в данном месте…что при выборе одного листа, что при выборе нескольких. Изменено: rumpelshtitchen — 13.07.2022 09:57:42 |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#6 13.07.2022 10:01:42
я предлагал не использовать макрос полностью, а посмотреть как там были пременены нужные вам форматы и использовать это в своем коде Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Ігор Гончаренко, Благодарю, буду пробовать. |
|
rumpelshtitchen Пользователь Сообщений: 136 |
#8 13.07.2022 10:56:46
Вот, я совсем запутался…вопрос, для понимания: |
||
rumpelshtitchen Пользователь Сообщений: 136 |
#9 13.07.2022 11:02:14 Ігор Гончаренко, задал необходимый формат вручную, как Вы и советовали, получил необходимую строчку .Font.Italic = True….данную строку переставлял и до и после…
ни чего не получается. Где я ошибаюсь, подскажите, направьте пожалуйста. |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#10 13.07.2022 11:12:16
обьявлена переменная названного типа
не мы а вы, почему я не знаю Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
А вот еще вопрос назрел. А как будет выглядеть строчка для конкретно выбранных листов. Select ? я втак понял что «worksheet» это рабочие листы, если я правильно понял это все листы в книге. |
|
забудьте о Селектах, не нужны они практически НИКОГДА Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Ігор Гончаренко, проблема заключается в следующем. В книге около 150 листов. и я так понимаю при условии «worksheet», макрос применяет их, ко всем 150 листам, книжка повисает….и…..все. А по условию, необходимо отобразить колонтитул на 15,,,20 листах, которые выбираются вручную (впоследствии через макрос). Именно по этому и задаю вопрос про СЕЛЕКТ да и про ВОРКШИТ, что бы понять как это все работает. |
|
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#14 13.07.2022 11:51:49
чтобы понять как работает, надо с самого начала начать изучать. Есть понятие лист, есть книга, есть коллекции листов рабочих и листов других. Есть коллекция выделенных листов активной книги. Много чего есть.
чтобы сказать как это сделать — надо понимать по какому критерию определять те листы, на которых колонтитул надо менять. Можно просто пройтись по всем выделенным листам:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#15 13.07.2022 12:00:18
вы второй раз называете это условием, а это никакое не условие, это тип одного из обьектов обьектной модели Excel Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
rumpelshtitchen Пользователь Сообщений: 136 |
#16 13.07.2022 12:22:19 Дмитрий(The_Prist) Щербаков, Вы верно объяснили задачу, которую я не смог в должной степени донести, необходимо пройтись по всем выделенным листам и на них проставить колонтитул. Выбор листов произвольный, то есть сам оператор, ручками, выбирает необходимые ему листы, на которых и должен отображаться колонтитул.
при выполнении выдает ошибку, понимаю, что где то не верно указан параметр «листов» и предположу что в данном месте:
но в чем ошибка….не могу понять, хоть убей.. Изменено: rumpelshtitchen — 13.07.2022 12:23:07 |
||||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#17 13.07.2022 12:27:55
возможно
основная — в том, что не пишите ни на какой строке, ни какая ошибка.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Дмитрий(The_Prist) Щербаков, к большому сожалению, должен признать, что не ясны мне переменные…и листы. Скопировать и просто вставить было бы просто, в оправдание могу сказать, я бы не раздувал такую большую тему. А пошел в неправильном направлении и искал зависимость в листах….а не в переменной. Трудно понять, как это все работает, по этому и нет понимания, к сожалению. Огромное спасибо за помощь и объяснение. |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#19 13.07.2022 12:47:00
трудно понять что вы пишете
с вашего на человеческий это как переводится? и что значит? Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
Ігор Гончаренко, Имеется книга. На листе7 вводятся данные, номер и дата. Изменено: rumpelshtitchen — 13.07.2022 17:17:50 |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#21 14.07.2022 14:49:26
в ячейку А1 и ниже вводятся имена листов Прикрепленные файлы
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
rumpelshtitchen Пользователь Сообщений: 136 |
#22 26.09.2022 09:10:19 Друзья, доброго времени суток, в продолжении данной темы, подскажите, как деактивировать данный макрос. То есть сделать так, что бы уже созданный колонтитул исчез при печати.
|
||
RAN Пользователь Сообщений: 7091 |
#23 26.09.2022 10:54:42
|
||
rumpelshtitchen Пользователь Сообщений: 136 |
#24 26.09.2022 14:15:36 RAN, спасибо…я так и сделал, просто подумал что это не совсем верно…еще раз огромное спасибо за ответ. |
Содержание
- Коды форматирования и VBA для верхних и нижних колонтитулов
- Пример
- Поддержка и обратная связь
- VB*: Формирование колонтитулов в книге Excel(номера страниц).
- Сообщения 5
- 1 Тема от BeS Yara 2011-06-24 11:27:53
- Тема: VB*: Формирование колонтитулов в книге Excel(номера страниц).
- 2 Ответ от JSmаn 2011-06-28 23:10:11
- Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
- 3 Ответ от BeS Yara 2011-06-29 12:09:42 (изменено: BeS Yara, 2011-06-29 12:28:16)
- Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
- 4 Ответ от JSmаn 2011-06-29 16:26:05
- Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).
- VBA Excel. Колонтитулы
- Создание колонтитулов
- Удаление колонтитулов
- Коды форматирования
- Примеры форматирования
- Пример 1
- Пример 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?
asked Mar 29, 2012 at 13:47
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 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
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
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. Да и объединить бы информацию из этих одноимённых тем в одну(в коллекцию) было бы полезно.