Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212

Экспорт таблицы из Excel в PowerPoint, перемещение файла PowerPoint в папку и отправка его по почте

08.02.2022, 16:30. Показов 1716. Ответов 10
Метки нет (Все метки)

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

Есть вот такой код (большой, но работащий):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Sub CopyRangeToPresentation()
 
'Шаг 1: Объявляем переменные
Dim PP As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim SlideTitle As String
 
'Шаг 2: Откройте PowerPoint и создайте новую презентацию
Set PP = New PowerPoint.Application
Set PPPres = PP.Presentations.Add
PP.Visible = True
 
'Шаг 3: Добавьте новый слайд как слайд 1 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(1, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 4: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D515:AR568").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 5: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 6: Добавьте новый слайд как слайд 2 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(2, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 7: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D576:AR629").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 8: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 9: Добавьте новый слайд как слайд 3 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(3, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 10: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D637:AR690").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 11: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 12: Добавьте новый слайд как слайд 4 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(4, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 13: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D698:AR751").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 14: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 15: Очистка памяти
PP.Activate
Set PPSlide = Nothing
Set PPPres = Nothing
Set PP = Nothing
 
End Sub
После выполнения кода открывается файл PowerPoint с нужными слайдами. Как сделать так, чтобы полученный файл powerpoint автоматически сохранялся в нужную папку и вкладывался в письмо?

Добавлено через 1 час 44 минуты
Ну ладно, по-порядку)) Сначала просто сохранить презентацию в папке.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2022, 16:30
Ответы с готовыми решениями:

Экспорт данных из Excel в PowerPoint
ребят, помогите решить проблему мне нужно скопировать даныые секции и вставить в презентацию PP Set pp =...

Экспорт диаграмм из Excel в PowerPoint - Excel зависает
Здравствуйте! Я написал модуль, который вставляет диаграммы из книги Excel в презентацию PowerPoint. Код достаточно простой и...

Копирование таблицы из excel в powerpoint
Всем привет! Подскажите, как с помощью VBA скопировать таблицу из excel в powerpoint с сохранением связи. Спасибо!

10
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,240
08.02.2022, 17:14
Цитата Сообщение от Breathe of fate Посмотреть сообщение
Ну ладно, по-порядку)) Сначала просто сохранить презентацию в папке.
Наверное, что-то типа
Code
1
pp.SaveAs "полное имя к файлу"
Дополнительные параметры можно здесь посмотреть.
0
858 / 507 / 187
Регистрация: 09.03.2009
Сообщений: 1,711
08.02.2022, 17:15
Вероятно, так
Visual Basic
1
2
Set PPPres = Nothing
PPPres.SaveAs путь\имя_файла
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,240
08.02.2022, 17:20
Цитата Сообщение от Zeag Посмотреть сообщение
Visual Basic
1
2
Set PPPres = Nothing
PPPres.SaveAs путь\имя_файла
Только наоборот строчки надо, наверное:
Visual Basic
1
2
3
PPPres.SaveAs путь\имя_файла
PPPres.Quit
Set PPPres = Nothing
1
858 / 507 / 187
Регистрация: 09.03.2009
Сообщений: 1,711
08.02.2022, 17:53
Punkt5, да, конечно, копировал тут, а не в редакторе VBA, там бы не спутал ))
0
run
 Аватар для I can
4751 / 4372 / 821
Регистрация: 13.04.2015
Сообщений: 9,436
08.02.2022, 18:05
Visual Basic
1
pp.SaveAs( "result.pptx",ppSaveAsOpenXMLPresentation)
1
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
09.02.2022, 08:45  [ТС]
Цитата Сообщение от Punkt5 Посмотреть сообщение
Visual Basic
1
2
3
PPPres.SaveAs путь\имя_файла
PPPres.Quit
Set PPPres = Nothing
Сделал так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
'Шаг 15: Очистка памяти
PP.Activate
Set PPSlide = Nothing
 
PPPres.SaveAs ThisWorkbook.Path & "\Programm Data\LSS\" & ThisWorkbook.Name
PPPres.Quit
Set PPPres = Nothing
 
Set PPPres = Nothing
Set PP = Nothing
Файл появился в папке, но с размером 0, а дебаггер ругается на это:
Visual Basic
1
PPPres.Quit
Что можно поправить?

Добавлено через 6 минут
Цитата Сообщение от Breathe of fate Посмотреть сообщение
Что можно поправить?
Это поправил.

Но PowerPoint не закрывается сам. Как можно модифицировать код?
0
run
 Аватар для I can
4751 / 4372 / 821
Регистрация: 13.04.2015
Сообщений: 9,436
09.02.2022, 08:45
Цитата Сообщение от Breathe of fate Посмотреть сообщение
PPPres.Quit
Visual Basic
1
2
PPPres.Close
PP.Quit
1
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,240
09.02.2022, 08:51
Breathe of fate, Ну, если бы я занимался отладкой, то первым делом закомментил бы все
Set ...= Nothing
Ну, и ту строку,на которую ругается - тоже, и попробовал бы.
Затем перенёс бы все set nothing в хвост проги и раскомментил бы там.
Ну и почитал бы ту ссылку на функцию SaveAs в MSDN, что дана выше, и попробовал подобрать остальные параметры её вызова, если без них так и продолжает сохранять пустоту при устранённых set nothing.
1
run
 Аватар для I can
4751 / 4372 / 821
Регистрация: 13.04.2015
Сообщений: 9,436
09.02.2022, 08:56
Цитата Сообщение от Punkt5 Посмотреть сообщение
продолжает сохранять пустоту
Так у него файл пустой.
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
09.02.2022, 12:44  [ТС]
Visual Basic
1
2
3
4
5
6
7
'Шаг 15: Экспорт в файл
PPPres.SaveAs ThisWorkbook.Path & "\Programm Data\LSS\" & "Export for LSS" & "_" & Format(Date, "mm.yy") & ".pptx"
 
'Шаг 16: Выход и очистка памяти
PP.Activate
PPPres.Close
PP.Quit
Вот так всё работает. Спасибо за помощь.

Добавлено через 3 часа 39 минут
Ну и для потомков: из Экселя переносит в презу, сохраняет, закрывает и отправляет созданный файл по почте. Макрос берёт данные для отправки из другого листа, чтобы можно было настроить по необходимости.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Sub CopyRangeToPresentation()
 
'Шаг 1: Объявляем переменные
Dim PP As PowerPoint.Application
Dim PPPre As PowerPoint.Presentations
Dim PPSlide As PowerPoint.Slide
Dim SlideTitle As String
 
'Шаг 2: Откройте PowerPoint и создайте новую презентацию
Set PP = New PowerPoint.Application
Set PPPres = PP.Presentations.Add
PP.Visible = True
 
'Шаг 3: Добавьте новый слайд как слайд 1 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(1, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 4: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D515:AR568").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 5: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 6: Добавьте новый слайд как слайд 2 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(2, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 7: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D576:AR629").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 8: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 9: Добавьте новый слайд как слайд 3 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(3, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 10: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D637:AR690").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 11: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 12: Добавьте новый слайд как слайд 4 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(4, ppLayoutTitleOnly)
PPSlide.Select
 
'Шаг 13: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D698:AR751").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture
 
'Шаг 14: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
 
'Шаг 15: Экспорт в файл
PPPres.SaveAs ThisWorkbook.Sheets("Settings").Range("S60") & ThisWorkbook.Sheets("Settings").Range("S63") & "_" & Format(DateAdd("m", -1, Date), "mm.yy") & ".pptx"
 
'Шаг 16: Выход и очистка памяти
PP.Activate
PPPres.Close
PP.Quit
 
Set PPSlide = Nothing
Set PPPres = Nothing
Set PP = Nothing
 
'Шаг 17: Отправка по почте
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
 
    Application.ScreenUpdating = False
    On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'раскомментировать строку, если в Outlook несколько учетных записей и нужно подключиться к конкретной(только если Outlook закрыть)
    '   [параметры]: Session.Logon "имя профиля","пароль",[показывать окно выбора профиля], [запускать в новой сессии]
    'objOutlookApp.Session.Logon "profile","1234",False, True
    Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
 
    sTo = ThisWorkbook.Sheets("Settings").Range("S8") 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = ThisWorkbook.Sheets("Settings").Range("S9") & " " & Format(DateAdd("m", -1, Date), "mm.yy") 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = ThisWorkbook.Sheets("Settings").Range("S59") & " " & Format(DateAdd("m", -1, Date), "mm.yy") 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
    sAttachment = ThisWorkbook.Sheets("Settings").Range("S60") & ThisWorkbook.Sheets("Settings").Range("S63") & "_" & Format(DateAdd("m", -1, Date), "mm.yy") & ".pptx" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
 
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .Body = sBody 'текст сообщения
        '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        'добавляем вложение, если файл по указанному пути существует(dir проверяет это)
        If sAttachment <> "" Then
            If Dir(sAttachment, 16) <> "" Then
                .Attachments.Add sAttachment 'просто вложение
                'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName
            End If
        End If
        .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра, а так .Send
    End With
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
 
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2022, 12:44
Помогаю со студенческими работами здесь

Експорт таблицы из excel в powerpoint
Всем добрый день, столкнулся с проблемой автоматизации переноса таблиц в power point. Если не сложно можете написать код где...

Граница связанной Excel таблицы в Powerpoint в режиме показа разной толщины
Добрый день! Подскажите пожалуйста: любую таблицу с границами копируем из Excel в Powerpoint через &quot;специальная вставка -...

Пересылка презентаций Powerpoint по электронной почте
Презентация РР-2007 с присоединенным звуковым файлом в общей папке, более 30Мб. Чтобы послать по почте mail, надо объединить в один файл -...

Экспорт из Access в PowerPoint
Форумчане, подскажите, плз, как обновить данные диаграммы шаблона PowerPoint данными рекордсета Access (не открывая Excel через...

Экспорт из Access в PowerPoint
Форумчане, подскажите, плз, как обновить данные диаграммы шаблона PowerPoint данными рекордсета Access (не открывая Excel через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »