O aplicativo VBA do Excel para espontaneamente com a mensagem "A execução do código foi interrompida"

151

Pelo que vejo na web, essa é uma reclamação bastante comum, mas as respostas parecem ser mais raras. O problema é este:

Temos vários aplicativos Excel VBA que funcionam perfeitamente em várias máquinas de usuários. No entanto, em uma máquina, eles param em certas linhas de código. São sempre as mesmas linhas, mas essas linhas parecem não ter nada em comum.

Se você pressionar F5 (executar) após a parada, o aplicativo continuará, então é quase como se um ponto de interrupção tivesse sido adicionado. Tentamos selecionar 'remover todas as pausas' no menu e até adicionar uma pausa e removê-la novamente.

Já tivemos esse problema com aplicativos únicos antes e o desenvolvemos cortando o código dos módulos, compilando e colando-o novamente etc.

Agora, o problema parece estar relacionado ao próprio Excel, e não a um único .xls, por isso não sabemos como gerenciar isso.

Qualquer ajuda será muito bem recebida :)

Obrigado,

Philip Whittington

Phil Whittington
fonte
2
O usuário pressiona escape no meio de qualquer processamento? Ou qualquer outro aplicativo que está enviando a chave de escape?
precisa saber é o seguinte
1
Depois de selecionar Remover todos os pontos de interrupção , você também recompilou e salvou o projeto VBA? Eu vi um problema relacionado no Word VBA onde pontos de interrupção removidos anteriormente ainda estão causando uma interrupção.
Dirk Vollmar
Nada está sendo processado durante a execução, shahkalpesh. Divo - obrigado, talvez eu não os tenha experimentado exatamente nessa ordem. Irá fazê-lo agora ...
Phil Whittington
Além do comentário do divo, pode ser útil comentar as linhas relevantes e quaisquer linhas que parem a depuração, elas podem ser descomentadas e o código recompilado (novamente).
Fionnuala
E esqueci de mencionar: Para realmente desencadear uma reconstrução, normalmente é necessário modificar uma linha e, em seguida, mover o cursor para a próxima linha para sinalizar o código fonte como modificado (por exemplo, faça uma alteração, mova o cursor para baixo, mova cursor para cima e desfazer a alteração manualmente)
Dirk Vollmar

Respostas:

404

Eu encontrei uma segunda solução.

  1. Pressione o botão "Debug" no pop-up.
  2. Pressione Ctrl+ Pause|Breakduas vezes.
  3. Aperte o botão play para continuar.
  4. Salve o arquivo após a conclusão.

Espero que isso ajude alguém.

Stan
fonte
12
+1: Uau, este post me salvou de um mundo de dor. Uma solução muito inesperada para um problema bizarro. Depois de pressionar [Ctrl + Break] duas vezes e continuar, salvei o arquivo. Depois disso, o problema não apareceu mais quando eu fechei e reabri o arquivo.
Dbenham 01/10/12
28
Se alguma vez uma resposta mereceu voto positivo, é isso. Ótima resposta.
The_Barman
4
Isso me ajudou muito. Esta resposta mereceu 1000 upvotes. Fiquei atormentado por esse problema nos últimos 4-5 dias. Isso funcionou perfeitamente.
precisa saber é o seguinte
25
Alguém sabe por que isso funciona? Ou de onde vem? Isso é mágico?
ZX9 13/08/2015
4
Ainda me ajudando em 2017. Obrigado!
Slab
16

Esse problema vem de uma peculiaridade estranha no Office / Windows.

Depois de desenvolver o mesmo pedaço de código VBA e executá-lo centenas de vezes (literalmente) nos últimos dois dias, encontrei esse problema agora. A única coisa que foi diferente é que, pouco antes de enfrentar esse problema desconcertante, encerrei acidentalmente a execução do código VBA com um método não-ortodoxo.

Limpei todos os arquivos temporários, reiniciei, etc ... Quando executei o código novamente depois de tudo isso, ainda estava com o problema - antes de inserir o primeiro loop. Faz sentido que "pressione o botão" Debug "no pop-up, pressione duas vezes [Ctrl + Break] e depois isso possa continuar sem parar" porque algo na combinação do Office / Windows não liberou a execução. Está preso.

A ação redundante Ctrl + Break provavelmente resolve a execução remanescente.

user2052260
fonte
14

Uma solução está aqui :

A solução para esse problema é adicionar a linha de código "Application.EnableCancelKey = xlDisabled" na primeira linha da sua macro. Isso corrigirá o problema e você poderá executar a macro com êxito sem receber a mensagem de erro "Código execução foi interrompida ”.

Mas, depois de inserir essa linha de código, não consegui mais usar Ctrl + Break. Portanto, funciona, mas não muito.

Stan
fonte
Obrigado, Stan - essa é certamente uma solução se você estiver sob pressão do tempo e apenas quiser que ele funcione! Muito útil.
Phil Whittington
1
Você pode reativar na mesma execução configurando-o para xlInterrupt. (Ele também é reativado automaticamente quando a execução do código é concluída.) Sua outra resposta funcionou para mim, mas, na pior das hipóteses, isso poderia ser usado como uma correção temporária. Mais informações sobre Application.EnableCancelKey
Kodithic
2
A resposta correta - e a única resposta correta - está acima. A inserção de qualquer linha de código, incluindo “Application.EnableCancelKey = xlDisabled”, simplesmente muda o problema para outra linha. Muitas vezes, o novo 'ponto de interrupção' é exatamente a linha que você inseriu. A única razão pela qual não estou recusando a sua resposta é que recorri repetidamente à mesma durante a última década.
Nigel Heffernan
6

Descobri que pressionar Ctrl + Break enquanto a macro não estava sendo executada resolveu o problema.

James
fonte
3

Eu tentaria as coisas corretivas usuais: - Execute o VBA Code Cleaner de Rob Bovey no seu código VBA - remova todos os suplementos no PC dos usuários, principalmente os COM e .NET - Exclua todos os arquivos .EXD dos usuários (incompatibilidades da atualização do MSoft) - Execute o Excel Detectar e reparar no sistema do usuário - verifique o tamanho do arquivo .xlb do usuário (deve ser de 20 a 30K) - Reinicie e exclua todos os arquivos temporários do usuário

Charles Williams
fonte
2

Obrigado a todos por sua entrada. Esse problema foi resolvido escolhendo REPARO no painel de controle. Acho que isso registra explicitamente alguns dos componentes COM nativos do Office e faz coisas que o REINSTALL não faz. Espero que o último passe por uma lista de verificação e às vezes aceite o que está lá se já estiver instalado, talvez. Em seguida, tive um problema separado ao registrar minha própria dll .NET para interoperabilidade COM na máquina do usuário (apesar de isso também funcionar em outras máquinas), embora eu ache que esse foi o meu erro e não a Microsoft. Mais uma vez obrigado, eu realmente aprecio isso.

Phil Whittington
fonte
2

Eu me deparei com esse problema algumas vezes durante o desenvolvimento de um aplicativo Excel VBA complexo. Às vezes, o Excel começou a quebrar o objeto VBA aleatoriamente. E o único remédio era reiniciar a máquina. Após a reinicialização, o Excel geralmente começou a agir normalmente.

Logo descobri que a possível solução para esse problema é pressionar CTRL + Break uma vez quando a macro NÃO está sendo executada. Talvez isso possa ajudar você também.

bazinac
fonte
2

Eu tive esse problema também usando o Excel 2007 com uma pasta de trabalho foobar.xlsm (habilitada para macro) que receberia a "execução do código foi interrompida" simplesmente tentando fechar a pasta de trabalho no X vermelho no canto direito sem macros em execução no todas as macros de formulário, pasta de trabalho ou planilha "inicializar". As opções que obtive foram "Fim" ou "Continuar", a depuração sempre foi acinzentada. Eu fiz como um pôster anterior sugerido Painel de Controle-> Programas e Recursos-> clique com o botão direito do mouse em "Microsoft Office Proffesional 2007" (no meu caso) -> alterar-> reparar.

Isso resolveu o problema para mim. Posso acrescentar que isso aconteceu logo após uma atualização do MS e também encontrei um suplemento no Excel chamado "Team Foundation" da Microsoft que certamente não instalei voluntariamente

Carlito
fonte
1

Gostaria de adicionar mais detalhes à resposta 2 de Stan pelos seguintes motivos:

  • Eu mesmo enfrentei esse problema mais de uma dúzia de vezes e, dependendo das condições do projeto, escolhi entre a resposta mágica 1 ou 2 do stan's voodoo magic . Quando continuei enfrentando-o novamente, fico mais interrogativo do que por que isso acontece em primeiro lugar.

  • Também gostaria de adicionar uma resposta para usuários de Mac.

  • Existem limitações nas duas respostas possíveis:

    • se o código estiver protegido (e você não souber a senha), a resposta 1 não ajudará.
    • se o código não estiver protegido, a resposta 2 não permitirá que você depure o código.

  1. Isso pode ocorrer devido a qualquer um dos seguintes motivos:

    • Sistema operacional que não aloca recursos do sistema para o processo do Excel. ( Solução: basta iniciar o sistema operacional - a taxa de sucesso é muito baixa, mas sabe-se que funciona muitas vezes)

    • Código P é o código intermediário que foi usado no Visual Basic (antes do .NET) e, portanto, ainda é usado no VBA. Permitiu um executável mais compacto à custa de uma execução mais lenta. Por que estou falando sobre código-p? Porque às vezes fica corrompido entre várias execuções e arquivos grandes ou apenas devido à instalação do software (Excel) foi corrompido em algum lugar. Quando o código p corrompe. a execução do código continua sendo interrompida. Solução: Nesses casos, supõe-se que seu código tenha começado a corromper e as chances no futuro sejam de que sua pasta de trabalho do Excel também fique corrompida, fornecendo mensagens como "arquivo excel corrompido e não pode ser aberto". Portanto, como uma solução rápida, você pode confiar na resposta nº 1 ou nº 2 conforme suas necessidades. No entanto, nunca ignore os sinais de corrupção. É melhor copiar seus módulos de código no bloco de notas, excluir os módulos, salvar e fechar a pasta de trabalho, fechar o excel. Agora, abra novamente a pasta de trabalho e comece a criar novos módulos com o código copiado anteriormente no bloco de notas.

  2. Usuários de Mac, tente qualquer uma das opções abaixo e elas definitivamente funcionarão dependendo da arquitetura do sistema, ou seja, versão do SO e do Office

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc+ Esc(Pressione duas vezes consecutivas)

Você será colocado no modo de interrupção usando as combinações de teclas acima, pois a macro suspende a execução imediatamente, finalizando a tarefa atual. Esta é a substituição da Etapa 2.

  1. Solução: Para superar a limitação do uso das respostas 1 e 2 , eu uso xlErrorHandlerjunto com a Resumeinstrução no Manipulador de Erros se o código do erro for 18. Em seguida, a interrupção é enviada ao procedimento em execução como um erro, detectável por um erro manipulador configurado com uma instrução On Error GoTo. O código de erro detectável é 18. O procedimento atual é interrompido e o usuário pode depurar ou finalizar o procedimento. A Microsoft adverte que não use isso se o manipulador de erros tiver retomado a instrução, caso contrário, o manipulador de erros sempre retornará à mesma instrução. É exatamente o que queremos em interrupções sem sentido indesejadas da execução do código.

jainashish
fonte
0

Minha reputação atual ainda não permite postar isso como um comentário. Stans solução para entrar no modo de depuração, pressione duas vezes Ctrl + Break, continuar, salvar resolveu meu problema, mas tenho duas reviravoltas inesperadas:

  1. A estrutura do meu projeto é protegida por senha; portanto, para entrar no modo de depuração, primeiro tive que entrar no modo de desenvolvedor, clique na estrutura do projeto e digite a senha.

  2. Meu projeto é um arquivo de modelo (.xmtl). Abri o arquivo com um clique duplo, que o abre como .xml com um "1" no final do nome do arquivo anterior. Corrigi o bug conforme a instrução Stans e o salvei como esse ... 1.xml. Quando abri o modelo novamente, desta vez como modelo, e quis aplicar a mesma correção de bug nesse arquivo, o bug desapareceu! Não alterei este arquivo e ainda não há nenhum erro na execução da macro. Isso significa para mim que o bug não está realmente no arquivo, mas em uma configuração (oculta) no Excel.

blablubbb
fonte
-1

O problema agora parece estar relacionado ao próprio Excel

Reinstale e corrija-o :) Além disso, é difícil dizer.

Andy
fonte
Tentamos uma reinstalação, embora o usuário tenha 'esquecido' de reiniciar após o suporte ter feito suas coisas. Estou tentando evitar outra reinstalação do Office, mas isso pode ser inevitável ... Obrigado
Phil Whittington