Eu encontrei a solução por acaso.
O problema ocorre apenas se o nome do módulo for idêntico ao nome da macro. Então, o módulo tem que ser nomeado de forma diferente. É isso!
Estou criando macros VBA na minha planilha do Excel. Percebo que, de tempos em tempos (depois de salvar a planilha e reabri-la, geralmente), um ou mais dos nomes das macros estão sendo alterados de sheet1.macroname
para spreadsheetname.xls!macroname
. Este não é um nome de macro válido, portanto, não posso mais executá-lo.
Eu posso consertar o problema excluindo todas as macros, salvando o resultado, colando as macros de volta e salvando novamente, mas não se pode esperar que usuários normais façam isso.
Alguém sabe o que está causando isso e o que eu posso fazer para evitar isso?
Edite com mais detalhes
Quando inicializo a planilha e exibo o diálogo Macro, uma ou às vezes mais das macros parece ter seu nome alterado de sheet1.macroname
para spreadsheet.xls!macroname
. A tentativa de executar essa macro clicando duas vezes produz a mensagem de erro "O nome da macro não é válido". Fechar a caixa de mensagem de erro e clicar duas vezes uma segunda vez produz a mensagem de erro 'Referência inválida'. Tentativas subseqüentes fazem o mesmo.
Invocando uma macro diferente sheet1.othermacro
clicando duas vezes nela funciona e descarta o diálogo de macro. Na nova exibição, a primeira macro mudou seu nome de volta para sheet1.macroname
. O que resolve o problema, suponho.
Suspeito que o nome da macro não esteja realmente mudando: se você abrir a caixa de diálogo Macros no Excel quando mais de uma pasta de trabalho estiver aberta, as macros armazenadas na pasta de trabalho atualmente ativa serão exibidas como MarcoName
. No entanto, as macros armazenadas em uma pasta de trabalho que está não ativa são exibidas como WorkbookName.xls!MacroName
. Dito isso, você tem certeza de que o nome da macro está mudando?
Quando você diz que não pode mais executar a macro, você pode ser mais específico sobre o que exatamente acontece? Nada? Mensagem de erro?
Além disso, você está gravando essas macros ou você mesmo as escreve?