2008-09-30 6 views

Répondre

49

Les lignes suivantes feront l'affaire:

ActiveSheet.EnableCalculation = False 
ActiveSheet.EnableCalculation = True 

Edit: La méthode .Calculate() ne fonctionnera pas pour toutes les fonctions, je l'ai testé sur une feuille avec des fonctions de tableau add-in. La feuille de production que j'utilise est assez complexe. Je ne veux pas essayer la méthode .CalculateFull(), donc ça peut marcher.

+1

En fait, il y a .Calculate() et .CalculateFull() méthodes pour cela, à différents niveaux. – GSerg

+1

J'ai testé Calculate sur une feuille, et toutes les fonctions d'une cellule ne sont pas recalculées. Vous pouvez aussi le faire en changeant le bit 'dirty', mais j'ai trouvé que c'était la solution la plus simple. –

+0

L'utilisation de la propriété 'EnableCalculation' est une bonne idée car elle permet de recalculer une seule feuille au niveau de la feuille de travail. En revanche, 'Application.CalculateFull' force un calcul complet de toutes les données, non seulement dans une seule feuille de travail ou classeur, mais dans ** tous les classeurs ouverts **! Cela pourrait être une surenchère majeure, d'autant plus que l'utilisateur pourrait avoir plusieurs classeurs non reliés, potentiellement compliqués, ouverts. – ricovox

14

Cela devrait faire l'affaire ...

'recalculate all open workbooks 
Application.Calculate 

'recalculate a specific worksheet 
Worksheets(1).Calculate 

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

voir le commentaire sur ma réponse –

3

Vous pouvez également essayer

Application.CalculateFull 

ou

Application.CalculateFullRebuild 

si vous ne me dérange pas la reconstruction de tous les classeurs ouverts, plutôt que juste la feuille de calcul active. (CalculateFullRebuild reconstruit également les dépendances.)

6

Parfois Excel va hocher et a besoin d'un redémarrage pour réappliquer une équation. Cela arrive dans certains cas lorsque vous utilisez des formules personnalisées.

Assurez-vous que vous avez le script suivant

ActiveSheet.EnableCalculation = True 

Réappliquez l'équation de choix.

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

Ceci peut ensuite être bouclé selon les besoins.

2

J'ai eu un problème avec la désactivation d'une image d'arrière-plan (un filigrane DRAFT) dans VBA. Ma modification ne s'affichait pas (ce qui a été effectué avec la méthode Sheets(1).PageSetup.CenterHeader = "") - j'avais donc besoin d'un moyen de rafraîchir. L'approche ActiveSheet.EnableCalculation a partiellement fait l'affaire, mais n'a pas couvert les cellules inutilisées.

En fin de compte, j'ai trouvé ce que je avais besoin avec une doublure qui a fait la Vanish d'image quand elle ne fut plus défini: -

Application.ScreenUpdating = True

Questions connexes