Gerenciar Projetos VBA em Apresentações Usando Java
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 transferidas para o arquivo resultante).
Ao adicionar macros a uma apresentação ou ao 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 projeto) 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 para <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 para 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();
}
FAQ
O que acontece com as macros se eu salvar a apresentação como PPTX?
As macros serão removidas porque o PPTX não oferece suporte a VBA. Para manter as macros, escolha PPTM, PPSM ou POTM.
A 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.
É possível trabalhar com controles ActiveX vinculados a código VBA?
Sim, você pode acessar controles ActiveX existentes, modificar suas propriedades e removê-los. Isso é útil quando as macros interagem com ActiveX.