O limite de tamanho de 64 KB para módulos está corrompendo macros do Excel 365?

O limite de tamanho de 64 KB para módulos está corrompendo macros do Excel 365?

Estou tendo corrupções aleatórias de macros nas quais não consigo abrir a pasta de trabalho.

Eu teria que desabilitar todas as macros sem notificações, abrir a pasta de trabalho e recompilar as macros, salvar e fechar. Em seguida, habilite as macros e abra a pasta de trabalho, então a pasta de trabalho abre corretamente. É quase como se atualizar as macros ajudasse a reabrir a pasta de trabalho. Verifiquei alguns dos meus módulos e alguns têm mais de 64 KB. Li alguns artigos relativos aos limites de tamanho do módulo que causam corrupção.

Alguém verificou se isso também se aplica ao Excel 365 ou há algum motivo para as macros serem corrompidas?

Responder1

O limite de 64 KB não está no tamanho do arquivo exportado, é o tamanho máximo de um módulo compilado.

Se o seu módulo tiver menos de 10 mil linhas, ele pode ser compilado.

Um módulo pesado, mas provavelmente ainda saudável, teria 1K linhas, no máximo - que parece oscilar em torno de 40 KB quando exportado para um arquivo de texto; 64 KB não me parece completamente indecente, emboraédefinitivamente acima de 1 mil linhas de código e, portanto, provavelmente poderia precisar de alguns ajustes.

Se seus módulos forem nomeados, por exemplo Module8, ou Utilities, verifique comocoesoseus membros são - está tudo relacionado à mesma funcionalidade? Ou parece que funções aleatórias foram despejadas lá?

Procure código repetido e refatore-o. Extraia métodos, parametrize-os, observe seu módulo derreter, mantendo todas as suas funcionalidades.

A mecânica de armazenamento interno para código VBA não mudou em 20 anos - não vejo razão para isso ter mudado recentemente, especialmente porque o VBA está praticamente congelado agora, e mudar qualquer coisa na mecânica de armazenamento quebraria milhões de coisas em todos os lugares.

Mas não é impossível que algo no O365 tenha mudado recentemente (você está usando umInsiderbuild?), e algo quebrou e sua pasta de trabalho foi corrompida de alguma forma... mas se o seu módulo estiver um pouco acima de 64 KBdo código-fonte do texto, é muito improvável que esteja relacionado: o código compilado seria muito menor que isso... assumindo que o projeto seja compilado.

Responder2

O limite é 64K porprocedimento. Para citar deProcedimento muito grande

Quando compilado, o código de um procedimento não pode exceder 64K. Este erro tem a seguinte causa e solução:

  • O código para este procedimento excede 64K quando compilado. Divida este e quaisquer outros procedimentos grandes em dois ou mais procedimentos menores.

Estou usando um arquivo VBA de 811 KB no Access 2013. Ele contém muitos procedimentos pequenos e nunca causou problemas.

Então, para responder à pergunta do OP: se você tiver uma sub-rotina gigante em algum lugar do seu projeto, divida-a. Caso contrário, os tamanhos dos módulos relatados não são motivo de preocupação.

informação relacionada