Управление проектами VBA в презентациях с помощью C++
Пространство имен Aspose.Slides.Vba содержит классы и интерфейсы для работы с макросами и кодом VBA.
Note
При преобразовании презентации, содержащей макросы, в другой формат файла (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 и загрузите презентацию, содержащую макрос.
- Получите доступ к модулю Macro и удалите его.
- Сохраните измененную презентацию.
Этот код 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, Aspense::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());
}
}
Проверить, защищён ли проект VBA паролем
С помощью свойства IVbaProject::get_IsPasswordProtected можно определить, защищены ли свойства проекта паролем.
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Проверьте, содержит ли презентация VBA‑проект.
- Убедитесь, защищён ли проект VBA паролем, чтобы просмотреть его свойства.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
if (presentation->get_VbaProject() != nullptr) // Проверить, содержит ли презентация проект VBA.
{
if (presentation->get_VbaProject()->get_IsPasswordProtected())
{
Console::WriteLine(u"The VBA Project '{0}' is protected by password to view project properties.", presentation->get_VbaProject()->get_Name());
}
}
presentation->Dispose();
FAQ
Что происходит с макросами, если я сохраняю презентацию в формате PPTX?
Макросы будут удалены, потому что PPTX не поддерживает VBA. Чтобы сохранить макросы, выберите PPTM, PPSM или POTM.
Может ли Aspose.Slides выполнять макросы внутри презентации, например, обновлять данные?
Нет. Библиотека никогда не исполняет код VBA; выполнение возможно только в PowerPoint при соответствующих настройках безопасности.
Поддерживается ли работа с элементами ActiveX, связанными с кодом VBA?
Да, вы можете получать доступ к существующим элементам ActiveX, изменять их свойства и удалять их. Это полезно, когда макросы взаимодействуют с ActiveX.