01 Что делает макрос
Не редко можно увидеть несколько графиков на одном листе. Многие из нас время от времени копируют диаграммы в PowerPoint. Макрос помогает в решении этой задачи, эффективно автоматизирует процесс копирования каждого из этих графиков в свой собственный слайд.
В этом макросе, мы выполняем цикл по коллекции ActiveSheet.ChartObjects, чтобы скопировать каждую диаграмму в виде изображения на отдельный слайд в созданной презентации PowerPoint.
02 Код макроса
Sub
CopyAllChartsToPresentation()
'Шаг 1: Объявляем переменные
Dim
PP
As
PowerPoint.Application
Dim
PPPres
As
PowerPoint.Presentation
Dim
PPSlide
As
PowerPoint.Slide
Dim
i
As
Integer
'Шаг 2: Проверьте есть ли графики; выйти, если нет графиков
Sheets(
"Данные слайдов"
).
Select
If
ActiveSheet.ChartObjects.Count < 1
Then
MsgBox
"Нет графиков на активном листе"
Exit
Sub
End
If
'Шаг 3: Откройте PowerPoint и создайте новую презентацию
Set
PP =
New
PowerPoint.Application
Set
PPPres = PP.Presentations.Add
PP.Visible =
True
'Шаг 4: Начать цикл на основе количества графиков
For
i = 1
To
ActiveSheet.ChartObjects.Count
'Шаг 5: Скопируйте диаграмму как рисунок
ActiveSheet.ChartObjects(i).Chart.CopyPicture _
Size:=xlScreen, Format:=xlPicture
Application.Wait (Now + TimeValue(
"0:00:1"
))
'Шаг 6: Подсчет слайдов и добавление нового слайда в качестве следующего доступного номера слайда
ppSlideCount = PPPres.Slides.Count
Set
PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank)
PPSlide.
Select
'Шаг 7: Вставьте картинку и отрегулируйте ее положение, потом перейдите к следующему графику
PPSlide.Shapes.Paste.
Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters,
True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles,
True
Next
i
'Шаг 8: Очистка памяти
Set
PPSlide =
Nothing
Set
PPPres =
Nothing
Set
PP =
Nothing
End
Sub
03 Как работает макрос
1. Шаг 1 объявляет четыре переменные:
- PP является переменной объекта, которая выставляет объект PowerPoint Application;
- PPPres является переменной объекта, которая выставляет объект презентации PowerPoint;
- PPSlide является переменной объект, которая выставляет объект слайдов в PowerPoint;
- I используется в качестве счетчика, чтобы помочь диаграммам на рабочем листе.
2. Шаг 2 делает проверку, чтобы убедиться, что диаграммы на самом деле есть на указанном листе. Если никакие графики не будут найдены, то макрос выходит из процедуры без каких-либо дальнейших действий.
3. Шаг 3 открывает PowerPoint с пустой презентацией. Обратите внимание, что мы устанавливаем свойство Visible в True. Это гарантирует, что мы можем увидеть действия работы кода.
4. Шаг 4 устанавливает, сколько раз макрос будет проходить процедуру, захватив количество графиков на листе. Другими словами, если рабочая таблица содержит пять диаграмм, код цикла работает пять раз. Макрос запускает цикл начиная с единицы и продолжает цикл, пока не пройдет через каждую диаграммы. Переменная в конечном счете представляет собой число диаграммы в данный момент.
5. Шаг 5 использует метод CopyPicture, чтобы скопировать диаграмму в виде картинки. Переменная I передает порядковый номер диаграммы. Метод Application.Wait говорит макросу, чтобы он сделал паузу в течение секунды, что позволит все скопировать в буфер обмена.
6. Шаг 6 добавляет новый слайд в презентацию с помощью метода Add объекта Slide. Обратите внимание, что мы используем SlideCount + 1, чтобы указать порядковый номер добавленного слайда. Так как мы добавляем неизвестное количество графиков, мы не можем жестко закодировать номер индекса для каждого слайда. Использование SlideCount + 1 позволяет динамически назначать следующий доступный номер в качестве индекса слайдов. Обратите внимание, что на шаге 6, мы используем ppLayout Blank, гарантируя, что вновь созданные слайды начинаются с чистого макета. Далее макрос выделяет текущий слайд. Другими словами, код явно говорит PowerPoint выбрать этот слайд и делает его активным.
7. Шаг 7 вставляет изображение на активный слайд — размещая изображение в центре как по горизонтали, так и по вертикали, а затем переходит к следующей диаграмме.
8. Шаг 8 очищает память.
04 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
05 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь