Gerenciar Projetos VBA em Apresentações Usando C++

Introdução

O namespace Aspose.Slides.Vba contém classes e interfaces para trabalhar com macros e código VBA.

Adicionar Macros VBA

O Aspose.Slides fornece a classe VbaProject para permitir a criação de projetos VBA (e referências de projeto) e a edição de módulos existentes. Você pode usar a interface IVbaProject para gerenciar VBA incorporado em uma apresentação.

  1. Crie uma instância da classe Presentation.
  2. Use o construtor VbaProject para adicionar um novo projeto VBA.
  3. Adicione um módulo ao VbaProject.
  4. Defina o código-fonte do módulo.
  5. Adicione referências a .
  6. Adicione referências ao Microsoft Office.
  7. Associe as referências ao projeto VBA.
  8. Salve a apresentação.

Este código C++ mostra como adicionar uma macro VBA do zero a uma apresentação:

// O caminho para o diretório de documentos.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Cria uma instância da classe Presentation
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Cria um novo Projeto VBA
presentation->set_VbaProject(MakeObject<VbaProject>());

// Adiciona um módulo vazio ao projeto VBA
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Define o código-fonte do módulo
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// Cria uma referência a <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");

// Cria uma referência ao 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");

// Adiciona referências ao projeto VBA
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Salva a Apresentação
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Remover Macros VBA

Usando a propriedade VbaProject da classe Presentation, você pode remover uma macro VBA.

  1. Crie uma instância da classe Presentation e carregue a apresentação que contém a macro.
  2. Acesse o módulo Macro e remova‑o.
  3. Salve a apresentação modificada.

Este código C++ mostra como remover uma macro VBA:

// O caminho para o diretório de documentos.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Carrega a apresentação contendo a macro
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Acessa o módulo Vba e o remove 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Salva a Apresentação
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Extrair Macros VBA

  1. Crie uma instância da classe Presentation e carregue a apresentação que contém a macro.
  2. Verifique se a apresentação contém um Projeto VBA.
  3. Percorra todos os módulos contidos no Projeto VBA para visualizar as macros.

Este código C++ mostra como extrair macros VBA de uma apresentação que contém macros:

	// O caminho para o diretório de documentos.
	const String templatePath = u"../templates/VBA.pptm";

	// Carrega a apresentação contendo a macro
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Verifica se a Apresentação contém um Projeto 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());
		}
	}

Verificar se um Projeto VBA está protegido por senha

Usando a propriedade IVbaProject::get_IsPasswordProtected, você pode determinar se as propriedades de um projeto estão protegidas por senha.

  1. Crie uma instância da classe Presentation e carregue uma apresentação que contém uma macro.
  2. Verifique se a apresentação contém um projeto VBA.
  3. Verifique se o projeto VBA está protegido por senha para visualizar suas propriedades.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // Verifica se a apresentação contém um projeto 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();

Perguntas Frequentes

O que acontece com as macros se eu salvar a apresentação como PPTX?

As macros serão removidas porque o PPTX não suporta VBA. Para manter as macros, escolha PPTM, PPSM ou POTM.

O Aspose.Slides pode executar macros dentro de uma apresentação para, por exemplo, atualizar dados?

Não. A biblioteca nunca executa código VBA; a execução só é possível dentro do PowerPoint com as configurações de segurança apropriadas.

Trabalhar com controles ActiveX vinculados a código VBA é suportado?

Sim, você pode acessar os controles ActiveX, modificar suas propriedades e removê‑los. Isso é útil quando as macros interagem com ActiveX.