Todas as Variáveis Públicas no VBA Macros no meu escritório pararam de funcionar esta manhã

6

Acontece que eu sou um idiota (ou, pelo menos, irremediavelmente inexperiente com essa coisa toda de desenvolvimento de software) . O abaixo é o que eu passei todo o meu dia em pânico. Eu escreverei uma resposta detalhando o que eu vi, que ações seguiram e o que realmente estava acontecendo.

tl; dr: Como eu pensei que meu IDE funciona e como ele realmente funciona são duas coisas separadas. Houve, na verdade, um bug no meu código, mas por causa de como eu interpretei o que eu achava que minha IDE estava me dizendo, eu pensei que o problema era muito maior. E eu sou um idiota por ainda não ter implementado controle de versão ainda.

O que escrevi anteriormente:

Então, eu não sou realmente um SysAdmin, mas eu sou efetivamente "o cara da TI" para a minha empresa (somos 12 funcionários).

Algum dia entre as 19h GMT na noite de ontem 25 / agosto / 2015 e 11h GMT nesta manhã 26 / agosto / 2015, todas as macros vba em cada computador (executamos o Excel 2010 e Excel 2013) começando exibindo um comportamento pelo qual Variáveis publicamente declaradas devem estar disponíveis para todas as sub-rotinas de uma determinada pasta de trabalho) estão disponíveis apenas no módulo em que foram declaradas.

Isso processa muitas macros inoperáveis.

Minha suspeita é de que houve uma atualização da Microsoft que mexeu com o Excel, mas não consigo encontrar nenhuma confirmação disso on-line. Além disso, nosso servidor de área de trabalho remota (que não é atualizado automaticamente) está exibindo o mesmo comportamento. Qualquer sugestão seria muito apreciada.

Atualização: Não houve uma atualização do Windows recentemente. Isso é realmente uma má notícia, porque significa que algo, em algum lugar, passou (provavelmente de forma única) errado. O escopo variável deve ser uma parte fundamental de um idioma. Não deve ser uma coisa que possa mudar. E, no entanto, em toda a rede, aparentemente por si só.

    
por Kaz 26.08.2015 / 15:44

1 resposta

4

O que aconteceu: abri uma macro esta manhã para trabalhar na expansão. Eu corri para verificar que ainda estava funcionando. Ele jogou um "erro de automação".

[nota lateral] (Eu sempre fui acostumado a ver minhas variáveis globais na minha janela local. Em uma boa guia suspensa abaixo do nome do módulo. Acontece que isso só acontece quando você as declara publicamente no módulo que você está visualizando. Eu não sabia disso, e minha nova macro tem todas as minhas variáveis públicas em seu próprio módulo separado) [return]

Então, eu depurei meu código, procurei por que esse objeto da planilha estava gerando um erro e vi: <No Variables> na minha janela de locais onde minhas variáveis públicas costumavam ser. Naturalmente, entrei em pânico. Eu percebi que o programa deve ter parado de referenciar variáveis públicas em outros módulos. Eu verifiquei todos os outros computadores no meu escritório, a mesma coisa. Eu procurei freneticamente na internet. Nada disso. Desparado, eu mudei para o Stack Overflow, o Server Fault e o Super User e a sala de bate-papo na Code Review. Sem sorte.

Então eu realmente entrei em pânico. Eu, de bom grado, liguei para o suporte técnico da Microsoft.

Escusado será dizer que isso foi tão mal que desisti. Fui embora um pouco e tirei minhas frustrações em um andar vazio de nosso prédio com minha katana (seguro LARP, então nenhum dano real ao prédio).

Depois voltei, voltei a conversar, conversei com mais pessoas, tentei mais algumas coisas e finalmente descobri a coisa sobre a janela dos locais, o que me permitiu encontrar o problema real com o meu código:

Minha macro estava fechando uma pasta de trabalho antes de um ponto no código em que eu estava tentando fazer referência a suas planilhas. Foi isso.

Ao todo, desperdicei todo um dia de trabalho tentando corrigir um problema que não existia.

Então, aqui está uma lista de coisas que eu poderia ter feito / deveria ter feito, o que evitaria isso:

Controle de versão: Especificamente, é possível reverter o código para um ponto anterior no tempo em que se sabia que ele estava funcionando. Isso teria demonstrado imediatamente que meu código de, e. no dia anterior ainda correu como esperado.

A janela de inspeção: no IDE do VBA permite especificar variáveis e acompanhar seu status em toda a macro. isso teria me mostrado que minha variável ainda existia, ainda estava sendo referenciada, que de repente ficou vazia em um ponto no código.

Na verdade, executando as macros antigas: porque achei que a janela local também mostrava variáveis públicas e elas não estavam lá. Tudo o que fiz em outros computadores foi entrar em uma macro, ver que eles não estavam lá e assumiu o pior. Se eu tivesse acabado de executar qualquer uma das minhas macros até um dia antes, esse problema teria sido evitado.

TDD / Testes Unitários: Teria apanhado meu erro quase no momento em que o apresentei, e certamente poucos minutos depois de escrevê-lo, o que teria fornecido uma grande dica sobre o que deu errado e impediu essa coisa toda antes mesmo de começar.

Não entre em pânico: Esqueci / não tentei muitas coisas realmente óbvias, qualquer uma delas teria provado que minha teoria estava errada. Em vez disso, porque achei que tinha um problema, fui procurar apenas evidências que o confirmariam, não por evidências que o refutassem.

No lado positivo, pelo menos agora sou muito mais sábio do que estava nesta manhã.

    
por 26.08.2015 / 19:37