Fechar e reiniciar o Excel em um ponto arbitrário na execução de uma macro?

0

Suponha que exista um marcro example_codeem um arquivo do Excel 2016: example_excel.xlsmque possui muito código, mas não cria arquivos externos (todos os cálculos são realizados em example_excel.xlsm.

Fiquei curioso para saber se existe uma maneira de:

  1. Quebrar / pausar o código em execução em um momento arbitrário.
  2. Adicione manualmente a próxima linha no código que: Executa / chama uma função / sub que:
  3. Salva o example_excel.xlsmestado completo (incluindo a planilha e a célula que são ativadas e selecionadas, bem como as variáveis ​​/ ambiente de execução de código),
  4. Feche-o em qualquer ponto arbitrário do código e
  5. Reabra o excel
  6. Continue executando o código example_codede onde você parou,
  7. Depois de remover a linha inserida que salva o estado do excel,
  8. ou instantaneamente
  9. ou depois de clicar em 1 botão / executar 1 macro?

Como tenho um código complexo que é executado em instâncias de 2 horas enquanto executa várias configurações programadas do "solucionador" e enquanto soluciona um estado específico do solucionador, estou aguardando uma hora antes que esse estado ocorra / seja acionado.

Agora, a solução mais fácil seria procurar todos os parâmetros, estados de planilha e célula que estão presentes nesse estado, armazená-los em uma planilha separada e depois reiniciá-los. Mas isso não permite flexibilidade na solução de problemas se outro estado precisar ser avaliado, nem é conveniente ao usar o objeto .ie que possui um loop infinito dentro dele, por exemplo, pai tem um filho que possui um item que é pai da criança novamente (pensei que isso existisse, embora não tenha certeza).

A resposta difícil é; reescreva / refatore seu código para que ele se torne menos complexo e mais esclarecedor. Definitivamente, eu preciso fazer, mesmo quando isso for feito, uma ferramenta generalizada para salvar os estados durante a execução, pelo menos para mim, é desejável.

Tentativas até agora: [na edição - elaborará.] Minha principal dificuldade no ponto de partida é que eu não sei como executar todos os parâmetros / variáveis ​​se a lista de parâmetros for desconhecida.

Até agora, como o problema original consistia em várias execuções de 2 horas, escrevi um código que copia automaticamente todas as planilhas e todos os módulos e formulários do excel atual para um excel diferente. Isso permite salvar tudo, menos as variáveis ​​contidas no código, nem a ativação da planilha e da célula.

Como esse código não se aplica especificamente a um tempo arbitrário durante um código em execução, nem copia as variáveis ​​usadas pelo excel, considero esse código fora de tópico, a menos que solicitado de outra forma.

Sinto que estou procurando uma abordagem de solução muito reduzida, portanto, sugestões para procurar opções diferentes / mais amplas para resolver o problema são bem-vindas!

às
fonte
Não, não há uma maneira embutida para isso. O VBA não pode armazenar nenhuma informação entre as execuções. Suas únicas opções são gravar sua macro de forma que grave todas as informações relevantes em uma planilha e as leia novamente quando você precisar retomar a execução.
Máté Juhász
Obrigado @ MátéJuhász, presumo que não conheço o suficiente sobre etiqueta de programação adequada para entender por que essa opção não seria muito eficaz para se ter no Excel, mas talvez haja um motivo diferente. Talvez algumas sugestões de trabalho criativo sejam sugeridas.
em
"Talvez algumas sugestões de trabalho criativo sejam sugeridas" - o que exatamente você espera? O VBA é basicamente uma linguagem de script, incluída no Excel para automatizar tarefas, e não pretende ser mais do que isso. Ele tem uma limitação em relação ao desempenho e funcionalidade, é claro que você pode contorná-los, mas isso exige muito código.
Máté Juhász
O que espero é que não sou o único que tentou resolver esse problema em vez de resolvê-lo. Espero que exista a possibilidade de alguém resolvê-lo para um cenário menos difícil (alguém poderia, por exemplo, sem o solucionador, escrever um código que realmente armazena automaticamente o estado.) Espero que, se essa pessoa / algumas dessas pessoas compartilham o mesmo informações, existe a possibilidade de que essa perspectiva diferente me permita resolver meu problema. Vou postar minha solução para o problema mais difícil / diferente se encontrar uma. Espero que possa / possa beneficiar alguém depois de mim.
em
Ainda não fiz nada assim, espero que alguém o compartilhe. De qualquer forma, será necessário seguir esta abordagem: escreva na planilha TODAS as variáveis ​​regularmente ou sempre que ela for alterada; em seguida, no currículo, leia-as novamente e continue a macro. Tenho certeza que isso complicará muito o código.
Máté Juhász