Esta semana me deparei com um problema em uma aplicação que estou desenvolvendo, ela copia um intervalo de dados do Excel e cola num slide do Powerpoint.
O problema ocorria ao utilizar o método PasteSpecial em um slide, ao ser chamado a partir do VBA ele colava as informações desconfiguradas e com problemas de cores e formatação.
Ao repetir o processo de colagem no próprio Powerpoint tudo funcionava perfeitamente, distribui o código para os colegas do trabalho para que testassem em outro ambiente e ele também funcionava num ambiente exatamente como o meu com o Windows 7 SP2 e Office 2010 SP1.
Depois de muito tentar, pesquisar e não encontrar uma solução resolvi verificar o meu código eu utilizava a criação de objetos com o Late Binding com a seguinte sintaxe
Dim pptA As Object
Fiz referência a Microsoft Powerpoint 14.0 e a alterei para a seguinte linha, utilizando o Early Binding
Dim pptA As Powerpoint.Application
Ao executar o teste o resultado obtido foi o esperado com a colagem realizada corretamente.
Em minhas pesquisas para a resolução, verifiquei o Event Viewer do Windows (pois as vezes a aplicação entrava em crash interminentemente) o problema ocorria sempre na mesma DLL ppcore.dll, ao realizar uma busca na máquina por esta DLL obtive o seguinte resultado.
Ou seja haviam 3 versões desta DLL na máquina, acredito que tenha a ver com a instalação do office. Não sei o histórico do ambiente do cliente , se foram realizadas migrações de versão de 2003 para 2007 ou 2007 para 2010, mas acredito que este problema ocorra por este motivo.
Como o objeto é criado em tempo de execução com o Object, a referência criada pode utilizar uma versão incorreta desta DLL, mesmo em ambientes teoricamente iguais.
Então se você chegou até aqui por este problema, tente trocar a referência e teste que deve resolver seu problema.
Com isto conseguimos contornar o problema, porém reduzimos a compatibilidade da aplicação para a versão do Powerpoint que foi referenciada, se esta aplicação for utilizada em um office 2007 ela não irá funcionar pois terá uma referência quebrada.
Obrigado a todos que me ajudaram em especial ao Marcelão que realizou o teste em outro ambiente!
0 comentários:
Postar um comentário