Tudo abaixo se aplica ao Excel 2007 e versões anteriores. De acordo com o link @ Ƭᴇcʜιᴇ007 postado nos comentários acima , há algum suporte nativo para multithreading no Excel 2013. Dito isso, o aviso de apenas esquecê-lo, a menos que você seja um programador experiente, ainda se aplica.
Infelizmente, o VBA não suporta multithreading, portanto, seus cálculos de VBA serão limitados a um núcleo de seu processador.
No entanto, existe um método avançado de enganar o VBA para executar vários threads, gerando arquivos VBscript e executando-os simultaneamente. Isso contorna o problema executando seu código fora do processo do Excel e permite que o Windows gerencie os recursos alocados para os diferentes threads.
Dito isso, fazer isso funcionar significará, mais do que isso, repensar completamente a lógica do seu código (ou seja, você terá que descobrir como dividir as tarefas de uma maneira que faça sentido executá-las simultaneamente) , o que pode muito bem ser inviável para o seu projeto. Eu nunca implementei isso, então eu realmente não posso ajudá-lo com isso, mais do que dizendo o que eu já lhe contei.
Se você quiser entrar na toca do coelho, aqui está uma postagem interessante no blog que mostra um exemplo disso. Esteja avisado: a menos que você seja um programador experiente, é melhor esquecer essa ideia e aceitar que o VBA é executado em um único thread.
Outros recursos no Stack Overflow para a ousadia: link
link
Existem outras maneiras de otimizar seu código VBA sem usar vários segmentos. Sem ver o seu código, é impossível fazer sugestões pontuais, mas aqui estão alguns dos suspeitos do costume:
- Carregue dados da sua planilha em uma matriz para processamento mais rápido. As interações com a planilha são um grande gargalo na execução do VBA e podem ser minimizadas pelo trabalho com matrizes.
- Um problema relacionado é o Excel recalcular a pasta de trabalho após cada alteração feita em uma célula. Isso pode ser evitado configurando
Application.Calculation = xlManual
. Só não se esqueça de configurá-lo de volta para Application.Calculation = xlAutomatic
antes de sair do seu Sub.