Estamos migrando um aplicativo do MS Access 2003 do Office 2003 para o Office 2010 (e WinXP => Win7) e enfrentamos um problema ao tentar executar o Função de rendimento do Excel do MS Access. O código atual para fazer isso (que funciona no XP / Office 2003) é assim:
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
objExcel.RegisterXLL objExcel.Application.LibraryPath & "ANALYSISANALYS32.XLL"
dblYield = objExcel.Run("Yield", dteTDate, rstSec.Fields(2), dblRate / 100, dblPricePaid, rstSec.Fields(7), rstSec.Fields(4), rstSec.Fields(6))
Os erros de código na linha final e dá o seguinte erro:
Erro em tempo de execução "1004": Não é possível executar a macro "Yield". A macro pode não estar disponível nesta pasta de trabalho ou todas as macros podem estar desabilitadas.
Eu tentei algumas coisas, incluindo especificamente adicionando e registrando o pacote de ferramentas de análise usando o seguinte código:
objExcel.RegisterXLL "C:Program Files (x86)Microsoft OfficeOffice14LibraryAnalysisATPVBAEN.XLA"
Mas eu recebo o mesmo erro.
Eu estou pensando no momento que o problema pode ser até talvez a necessidade de criar uma pasta de trabalho habilitado para macro, ou talvez seja alguma configuração de segurança do Win7 / Office 2010 que eu não estou familiarizado.
A única solução potencial que posso encontrar emo momento é criar um assembly COM interop .net que encapsule uma instância do Excel expondo a função Yield. No entanto, eu preferiria uma solução diferente, porque para ir a rota de interoperabilidade COM eu teria que obter direitos de administrador, em seguida, para implantar eu teria que registrar a dll na máquina de usuários finais, além disso eu provavelmente iria se deparar com o mesmo erro em .net como no MS Access.
Finalmente, há um projeto .net para recriar uma série de Funções financeiras do Excel em um assembly F #. Infelizmente, a função Yield não é uma das funções reimplementadas.
Eu aprecio muito qualquer conselho sobre isso,
Felicidades,
Jamie
Respostas:
1 para resposta № 1Se alguém tiver o mesmo problema, a maneira como resolvi(contornou) foi usar uma pasta de trabalho externa na qual eu tinha a fórmula de rendimento em uma célula, fazendo referência a um grupo de células contendo os parâmetros de rendimento. Em seguida, substituo os parâmetros por meio da minha função Access vba, forço a planilha a recalcular a fórmula e retorná-la ao meu banco de dados do Access.