Презентация через VBA
Пространство имен Aspose.Slides.Vba содержит классы и интерфейсы для работы с макросами и кодом VBA.
Примечание
Когда вы конвертируете презентацию, содержащую макросы, в другой формат файла (PDF, HTML и т.д.), Aspose.Slides игнорирует все макросы (макросы не переносятся в итоговый файл).
Когда вы добавляете макросы в презентацию или повторно сохраняете презентацию с макросами, Aspose.Slides просто записывает байты макросов.
Aspose.Slides никогда не запускает макросы в презентации.
Добавление макросов VBA
Aspose.Slides предоставляет класс VbaProject, который позволяет вам создавать проекты VBA (и ссылки на проекты) и редактировать существующие модули. Вы можете использовать интерфейс IVbaProject для управления VBA, встроенной в презентацию.
- Создайте экземпляр класса Presentation.
- Используйте конструктор VbaProject для добавления нового проекта VBA.
- Добавьте модуль в VbaProject.
- Установите исходный код модуля.
- Добавьте ссылки на
. - Добавьте ссылки на Microsoft Office.
- Свяжите ссылки с проектом VBA.
- Сохраните презентацию.
Этот код на C++ показывает, как добавить макрос VBA с нуля в презентацию:
// Путь к каталогу документов.
const String outPath = u"../out/AddVBAMacros_out.pptm";
// Создает экземпляр класса презентации
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Создает новый проект VBA
presentation->set_VbaProject(MakeObject<VbaProject>());
// Добавляет пустой модуль в проект VBA
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");
// Устанавливает исходный код модуля
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");
// Создает ссылку на <stdole>
SharedPtr<VbaReferenceOleTypeLib> stdoleReference =
MakeObject<VbaReferenceOleTypeLib>(u"stdole", u"*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Создает ссылку на Office
SharedPtr<VbaReferenceOleTypeLib> officeReference =
MakeObject<VbaReferenceOleTypeLib>(u"Office", u"*\\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL#Microsoft Office 14.0 Object Library");
// Добавляет ссылки в проект VBA
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);
// Сохраняет презентацию
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);
Удаление макросов VBA
Используя свойство VbaProject класса Presentation, вы можете удалить макрос VBA.
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Получите доступ к модулю макроса и удалите его.
- Сохраните измененную презентацию.
Этот код на C++ показывает, как удалить макрос VBA:
// Путь к каталогу документов.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";
// Загружает презентацию, содержащую макрос
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);
// Получает доступ к модулю Vba и удаляет его
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));
// Сохраняет презентацию
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);
Извлечение макросов VBA
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Проверьте, содержит ли презентация проект VBA.
- Пройдитесь по всем модулям, содержащимся в проекте VBA, чтобы просмотреть макросы.
Этот код на C++ показывает, как извлечь макросы VBA из презентации, содержащей макросы:
// Путь к каталогу документов.
const String templatePath = u"../templates/VBA.pptm";
// Загружает презентацию, содержащую макрос
SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);
if (pres->get_VbaProject() != NULL) // Проверяет, содержит ли презентация проект VBA
{
//for (SharedPtr<IVbaModule> module : pres->get_VbaProject()->get_Modules())
for (int i = 0; i < pres->get_VbaProject()->get_Modules()->get_Count(); i++)
{
SharedPtr<IVbaModule> module = pres->get_VbaProject()->get_Modules()->idx_get(i);
System::Console::WriteLine(module->get_Name());
System::Console::WriteLine(module->get_SourceCode());
}
}