Gerenciar Projetos VBA em Apresentações no Android
Introdução
Aspose.Slides fornece classes e interfaces para trabalhar com macros e código VBA.
Note
Ao converter uma apresentação que contém macros para um formato de arquivo diferente (PDF, HTML, etc.), 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 salvar novamente uma apresentação que contém macros, Aspose.Slides simplesmente grava os bytes das macros.
Aspose.Slides nunca executa as macros em uma apresentação.
Adicionar Macros VBA
Aspose.Slides fornece a classe VbaProject para permitir que você crie projetos VBA (e referências de projetos) e edite 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 Java mostra como adicionar uma macro VBA do zero a uma apresentação:
// Cria uma instância da classe de apresentação
Presentation pres = new Presentation();
try {
// Cria um novo Projeto VBA
pres.setVbaProject(new VbaProject());
// Adiciona um módulo vazio ao projeto VBA
IVbaModule module = pres.getVbaProject().getModules().addEmptyModule("Module");
// Define o código-fonte do módulo
module.setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
// Cria uma referência a <stdole>
VbaReferenceOleTypeLib stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Cria uma referência ao 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");
// Adiciona referências ao projeto VBA
pres.getVbaProject().getReferences().add(stdoleReference);
pres.getVbaProject().getReferences().add(officeReference);
// Salva a Apresentação
pres.save("test.pptm", SaveFormat.Pptm);
} finally {
if (pres != null) pres.dispose();
}
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 Java mostra como remover uma macro VBA:
// Carrega a apresentação que contém a macro
Presentation pres = new Presentation("VBA.pptm");
try {
// Acessa o módulo Vba e o remove
pres.getVbaProject().getModules().remove(pres.getVbaProject().getModules().get_Item(0));
// Salva a Apresentação
pres.save("test.pptm", SaveFormat.Pptm);
} finally {
if (pres != null) pres.dispose();
}
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 Java mostra como extrair macros VBA de uma apresentação que contém macros:
// Carrega a apresentação que contém a macro
Presentation pres = new Presentation("VBA.pptm");
try {
if (pres.getVbaProject() != null) // Verifica se a Apresentação contém um Projeto VBA
{
for (IVbaModule module : pres.getVbaProject().getModules())
{
System.out.println(module.getName());
System.out.println(module.getSourceCode());
}
}
} finally {
if (pres != null) pres.dispose();
}
Verificar se um Projeto VBA está Protegido por Senha
Usando o método IVbaProject.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.
Presentation presentation = new Presentation("VBA.pptm");
try {
if (presentation.getVbaProject() != null) { // Verifique se a apresentação contém um projeto VBA.
if (presentation.getVbaProject().isPasswordProtected()) {
System.out.printf("The VBA Project '%s' is protected by password to view project properties.",
presentation.getVbaProject().getName());
}
}
} finally {
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 adequadas.
É suportado o trabalho com controles ActiveX vinculados a código VBA?
Sim, você pode acessar os ActiveX controls, modificar suas propriedades e removê‑los. Isso é útil quando as macros interagem com ActiveX.