Pergunta

Eu tenho um aplicativo access-vba que também faz uso do word-vba.Ao executar o aplicativo na minha máquina local, ele funciona bem.Uma vez movido para outros (mesmas versões de access e word), ele irá travar quando se trata da parte vba do word.Comandos como document.open ou .saveas2 falham: Method 'SaveAs2' of object failed por exemplo.

Também notei que as bibliotecas mencionadas no aplicativo são exigidas por qualquer outro usuário final.Estou acostumado a apenas compilar com as bibliotecas e a partir daí elas estão sempre incluídas no .jar/.exe/etc, mas parece que quando você move o aplicativo para outros computadores ele está sempre tentando recompilar?

Não sou muito versado em VBA, então estou especulando que minhas funções Word-VBA com falha são devido a um erro de referência. Alguma outra idéia?

Foi útil?

Solução

As "bibliotecas" que o VBA pode referenciar são na verdade Objetos COM, geralmente empacotados como arquivos DLL.Eles são objetos que são instanciados dinamicamente em tempo de execução (se ainda não o são) quando solicitados.Eles são carregados pelo Windows na memória e seu programa utiliza o padrão COM para interagir com eles, chamando métodos e obtendo ou configurando propriedades (comunicação entre processos).Geralmente, existem duas maneiras de interagir com eles:encadernação antecipada e encadernação tardia.

Com a ligação antecipada, você adiciona uma referência à biblioteca enquanto ainda está escrevendo o código, o que permite que o IDE do VBA forneça preenchimento automático e alguma verificação de erros em tempo de compilação.Você instancia objetos com a palavra-chave "new" e digitando diretamente o nome do objeto.No entanto, a ligação antecipada requer que você selecione uma DLL específica e possivelmente uma versão específica da interface.Isso pode causar problemas se você fizer referência a uma versão de interface específica que um de seus usuários não possui.

Com a ligação tardia, você instancia objetos usando CreateObject ou GetObject, solicitando-os por nome ao Windows.O Windows irá procure o nome e retorne uma referência ao objeto.As variáveis ​​em seu código são simplesmente objetos e chamar métodos é um pouco perigoso porque o compilador permite que você digite qualquer nome de método desejado e não fornece avisos em tempo de compilação.Isso tem a vantagem de que, desde que você chame métodos bem estabelecidos e nada de novo ou obsoleto, o código funcionará independentemente da versão do usuário.

Quanto ao erro que você está recebendo, você pode verificar a versão do Office nas máquinas dos usuários - Salvar como2 foi adicionado no Office 2010.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top