Pergunta

Como você recebe os dados da planilha no Excel para recalcular-se a partir de dentro VBA, sem a kluge de apenas mudando um valor de célula?

Foi útil?

Solução

As seguintes linhas irá fazer o truque:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

Editar: O método .Calculate() não vai funcionar para todas as funções. Eu testei-o em uma folha com add-in funções de matriz. A folha de produção que estou usando é bastante complexa, que eu não quero para testar o método .CalculateFull(), mas pode funcionar.

Outras dicas

Isso deve fazer o truque ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

Às vezes, o Excel irá soluçar e precisa de um pontapé de saída para reaplicar uma equação. Isso acontece em alguns casos, quando você estiver usando fórmulas personalizadas.

Certifique-se de que você tem o seguinte script

ActiveSheet.EnableCalculation = True

Reaplicar a equação de escolha.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

Este pode então ser enrolada quando necessário.

Você também pode tentar

Application.CalculateFull

ou

Application.CalculateFullRebuild

Se você não se importa reconstruir todos os livros abertos, em vez de apenas a planilha ativa. (CalculateFullRebuild reconstrói dependências também.)

Eu tive um problema com desligar uma imagem de fundo (a marca d'água PROJECTO) em VBA. Minha mudança não estava aparecendo (que foi realizada com o método Sheets(1).PageSetup.CenterHeader = "") - então eu precisava de uma forma de atualizar. A abordagem ActiveSheet.EnableCalculation parcialmente fez o truque, mas não abrange as células não utilizadas.

No final, eu encontrei o que precisava com um forro que fez a desaparecer imagem quando já não foi definido: -

Application.ScreenUpdating = True

Depois de uma atualização de conexão de dados, alguns UDF de foram não execução. Usando um sub-rotina, eu estava tentando recalcuate uma única coluna com:

Sheets("mysheet").Columns("D").Calculate

Mas, acima de declaração não teve nenhum efeito. Nenhuma das soluções acima ajudou, exceto kambeeks sugestão para substituir fórmulas trabalhou e foi rápido se recalc Manual ligado durante a actualização. Abaixo código resolveu o meu problema, mesmo que não seja exatamente o responsável por OP "kluge" comentário, ele forneceu uma solução rápida / confiável para força recálculo de células especificado pelo usuário.

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top