Презентация через VBA

Пространство имен Aspose.Slides.Vba содержит классы и интерфейсы для работы с макросами и кодом VBA.

Добавить VBA макросы

Aspose.Slides предоставляет класс VbaProject, который позволяет вам создавать VBA проекты (и ссылки на проект) и редактировать существующие модули. Вы можете использовать интерфейс IVbaProject для управления VBA, встроенным в презентацию.

  1. Создайте экземпляр класса Presentation.
  2. Используйте конструктор VbaProject для добавления нового VBA проекта.
  3. Добавьте модуль в VbaProject.
  4. Установите исходный код модуля.
  5. Добавьте ссылки на .
  6. Добавьте ссылки на Microsoft Office.
  7. Свяжите ссылки с VBA проектом.
  8. Сохраните презентацию.

Этот код на C# показывает, как добавить VBA макрос с нуля в презентацию:

    // Создает экземпляр класса презентации
using (Presentation presentation = new Presentation())
{
    // Создает новый VBA проект
    presentation.VbaProject = new VbaProject();

    // Добавляет пустой модуль в VBA проект
    IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Модуль");
  
    // Устанавливает исходный код модуля
    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");

    // Добавляет ссылки в VBA проект
    presentation.VbaProject.References.Add(stdoleReference);
    presentation.VbaProject.References.Add(officeReference);

            
    // Сохраняет презентацию
    presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}

Удалить VBA макросы

С помощью свойства VbaProject в классе Presentation вы можете удалить VBA макрос.

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Получите доступ к модулю макроса и удалите его.
  3. Сохраните измененную презентацию.

Этот код на 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 макросы

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Проверьте, содержит ли презентация проект VBA.
  3. Переберите все модули, содержащиеся в проекте 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, вы можете проверить, защищены ли свойства проекта паролем.

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Проверьте, содержит ли презентация VBA проект.
  3. Проверьте, защищен ли проект VBA паролем для просмотра свойств проекта.

Этот код на C# демонстрирует операцию:

using (Presentation pres = new Presentation("VBA.pptm"))
{
    if (pres.VbaProject == null) // Проверяет, содержит ли презентация проект VBA
        return;

    if (pres.VbaProject.IsPasswordProtected)
    {
        Console.WriteLine("Проект VBA '" + pres.VbaProject.Name +
                            "' защищен паролем для просмотра свойств проекта.");
    }
}