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.
Note
Quando você converte uma apresentação que contém macros para um formato de arquivo diferente (PDF, HTML, etc.), o Aspose.Slides ignora todas as macros (as macros não são transportadas para o arquivo resultante).
Ao adicionar macros a uma apresentação ou regravar uma apresentação que contém macros, o Aspose.Slides simplesmente grava os bytes das macros.
O Aspose.Slides nunca executa as macros em uma apresentação.
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.
- Crie uma instância da classe Presentation.
- Use o construtor VbaProject para adicionar um novo projeto VBA.
- Adicione um módulo ao VbaProject.
- Defina o código-fonte do módulo.
- Adicione referências a
. - Adicione referências ao Microsoft Office.
- Associe as referências ao projeto VBA.
- 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.
- Crie uma instância da classe Presentation e carregue a apresentação que contém a macro.
- Acesse o módulo Macro e remova‑o.
- 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
- Crie uma instância da classe Presentation e carregue a apresentação que contém a macro.
- Verifique se a apresentação contém um Projeto VBA.
- 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.
- Crie uma instância da classe Presentation e carregue uma apresentação que contém uma macro.
- Verifique se a apresentação contém um projeto VBA.
- 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.