VBA + Polymorphism: substitui as funções da planilha de terceiros

1

minha empresa faz uso extensivo de um provedor de dados usando um plug-in VBA (de código fechado). Em princípio, toda consulta segue uma certa estrutura:

  1. Preencha uma célula com uma fórmula, em que os argumentos da fórmula especificam a consulta

  2. o intervalo dessa fórmula é estendido (não uma fórmula arrray!) e as células abaixo / direita são preenchidas com dados

Para que isso funcione, no entanto, o usuário precisa ter um programa de terminal instalado na máquina, bem como um plug-in com referenciado no VBA / Excel.

Meu problema

Essas Excelsheets são usadas e estendidas por vários usuários, e nem todas elas têm acesso ao provedor de dados. Enquanto eles podem abrir a folha, ela será recalculada e os dados serão eliminados. No entanto, o recálculo frequente é necessário. Eu gostaria que todos os usuários pudessem usar as planilhas, sem executar um conjunto muito específico de fórmulas.

Tentativas

  • remova a referência nos computadores em que eu não tenho acesso ao terminal. Isso gera um erro NAME na célula que contém a consulta (aceitável), mas essa consulta substitui partes dos dados (não aceitável)

  • Se você permitir que o programa seja atualizado, todos os dados desaparecerão após uma consulta com falha

  • Substitua todas as fórmulas pelo resultado em texto puro nas respectivas células (pressione um botão e faça um loop sobre cada célula ...). Obviamente, destrói todos os recursos de atualização que as querys oferecem para todos os usuários subsequentes, o que é muito ruim também.

  • Uma ideia teórica, e não sei como implementá-la: Substitua as funções oferecidas pelo plug-in por algo que será chamado primeiro (e retransmitirá a consulta para a função original, se isso estiver disponível ) ou em vez da função original (implantando apenas a solução em máquinas não terminais), que apenas retorna o valor original.

Mais especificamente, se minha função de consulta for usada assim:

=GETALLDATA(Startdate, Enddate, Stockticker, etc)

Eu gostaria de trocar de forma transparente a função por trás da chamada.

Você vê alguma esperança ou eu estou perdido? Agradeço sua ajuda.

PS: Claro que estou falando sobre a Bloomberg ...

Alguns pontos adicionais para esclarecer as questões levantadas por Frank:

  • A fórmula nas folhas não pode ser alterada. Este é um software de missão crítica, e é muito complexo para qualquer pessoa sã tentar tocá-lo.

  • Somente excel e VBA podem ser usados (qual é o motivo do ponto anterior ...)

  • Seria suficiente impedir a execução dessas poucas fórmulas / funções específicas em uma máquina específica para todas as planilhas do Excel

  • Isso parece cada vez mais um problema para stackoverflow; -)

por phi 19.08.2014 / 15:20

1 resposta

3

Não duvido da verdade desta frase, mas luto para seguir a lógica: "Este é um software de missão crítica, e é muito complexo para qualquer pessoa sã tentar tocá-lo".

De qualquer forma ...

Eu tentaria separar isso em dois arquivos do Excel. Um coletaria os dados usando o plug-in do VBA e só seria atualizado em máquinas com "acesso ao terminal". O conteúdo seria apenas tabelas de dados.

O segundo arquivo copia os dados do primeiro arquivo (eu usaria o Power Query Add-In para isso) e seria usado para análise em qualquer máquina.

    
por 20.08.2014 / 01:44