Презентация с использованием VBA
Пространство имён Aspose.Slides.Vba содержит классы и интерфейсы для работы с макросами и кодом VBA.
Note
При конвертации презентации, содержащей макросы, в другой формат файла (PDF, HTML и т.п.) Aspose.Slides игнорирует все макросы (они не переносятся в полученный файл).
При добавлении макросов в презентацию или повторном сохранении презентации, содержащей макросы, Aspose.Slides просто записывает байты макросов.
Aspose.Slides никогда не выполняет макросы в презентации.
Добавление VBA‑макросов
Aspose.Slides предоставляет класс VbaProject для создания проектов VBA (и их ссылок) и редактирования существующих модулей. Для управления встроенным в презентацию VBA используется интерфейс IVbaProject.
- Создайте экземпляр класса Presentation.
- Используйте конструктор VbaProject для добавления нового проекта VBA.
- Добавьте модуль в VbaProject.
- Установите исходный код модуля.
- Добавьте ссылки на
. - Добавьте ссылки на Microsoft Office.
- Свяжите ссылки с проектом VBA.
- Сохраните презентацию.
Этот код на C# показывает, как добавить VBA‑макрос с нуля в презентацию:
// Создает экземпляр класса презентации
using (Presentation presentation = new Presentation())
{
// Создает новый проект VBA
presentation.VbaProject = new VbaProject();
// Добавляет пустой модуль в проект VBA
IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
// Устанавливает исходный код модуля
module.SourceCode = @"Sub Test(oShape As Shape) MsgBox ""Test"" End Sub";
// Создает ссылку на <stdole>
VbaReferenceOleTypeLib stdoleReference =
new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Создает ссылку на Office
VbaReferenceOleTypeLib officeReference =
new VbaReferenceOleTypeLib("Office", "*\\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.VbaProject.References.Add(stdoleReference);
presentation.VbaProject.References.Add(officeReference);
// Сохраняет презентацию
presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}
Удаление VBA‑макросов
С помощью свойства VbaProject в классе Presentation можно удалить VBA‑макрос.
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Получите модуль макроса и удалите его.
- Сохраните изменённую презентацию.
Этот код на C# показывает, как удалить VBA‑макрос:
// Загружает презентацию, содержащую макрос
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
// Доступ к модулю VBA и его удаление
presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);
// Сохраняет презентацию
presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}
Извлечение VBA‑макросов
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Проверьте, содержит ли презентация проект VBA.
- Пройдитесь по всем модулям проекта VBA, чтобы просмотреть макросы.
Этот код на C# показывает, как извлечь VBA‑макросы из презентации, содержащей макросы:
// Загружает презентацию, содержащую макрос
using (Presentation pres = new Presentation("VBA.pptm"))
{
if (pres.VbaProject != null) // Проверяет, содержит ли презентация проект VBA
{
foreach (IVbaModule module in pres.VbaProject.Modules)
{
Console.WriteLine(module.Name);
Console.WriteLine(module.SourceCode);
}
}
}
Проверка, защищён ли проект VBA паролем
С помощью свойства IVbaProject.IsPasswordProtected можно определить, защищены ли свойства проекта паролем.
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
- Проверьте, содержит ли презентация VBA‑проект.
- Убедитесь, что проект VBA защищён паролем, чтобы просмотреть его свойства.
using (Presentation presentation = new Presentation("VBA.pptm"))
{
if (presentation.VbaProject != null) // Проверить, содержит ли презентация проект VBA.
{
if (presentation.VbaProject.IsPasswordProtected)
{
Console.WriteLine($"The VBA Project '{presentation.VbaProject.Name}' is protected by password to view project properties.");
}
}
}
FAQ
Что происходит с макросами, если я сохраняю презентацию как PPTX?
Макросы удаляются, поскольку формат PPTX не поддерживает VBA. Чтобы сохранить макросы, используйте PPTM, PPSM или POTM.
Может ли Aspose.Slides выполнять макросы внутри презентации, например, обновлять данные?
Нет. Библиотека никогда не исполняет код VBA; выполнение возможно только в PowerPoint при соответствующих настройках безопасности.
Поддерживается ли работа с элементами управления ActiveX, связанными с кодом VBA?
Да, вы можете получать доступ к существующим ActiveX controls, изменять их свойства и удалять их. Это полезно, когда макросы взаимодействуют с ActiveX.