2013-02-26 5 views
1

J'ai créé deux macros liées.MAJ + F9 en vitesse de rafraîchissement macro et macro

L'un d'entre eux génère des copies d'une certaine feuille dans un classeur. Le problème ici est que je dois appuyer sur Maj + f9 dans toutes les feuilles copiées pour mettre à jour mes valeurs. J'ai déjà utilisé calculate et application.calculate = xl ......

La deuxième macro appelle les valeurs de la première macro et effectue une opération sur celle-ci. Le problème ici est qu'après avoir exécuté la première macro et en utilisant shift + f9, mettre à jour toutes les feuilles .. si je cours cette deuxième macro en utilisant un bouton assigné il ne fonctionne pas mais si je marche dans la macro fonctionne correctement.

je pense qu'il est parce que les valeurs de première fois de prendre macro pour rafraîchir donc ce problème se produit ..

Macro1:

Sub macro1() 
Worksheets("Excel Inputs").Activate 
If Sheets("Excel Inputs").Cells(11, "P") = 3 Then 
    Sheets("Valuation 02").Delete 
    Sheets("Valuation 03").Delete 
ElseIf Sheets("Excel Inputs").Cells(11, "P") = 2 Then 
    Sheets("Valuation 02").Delete 
End If 
Length = WorksheetFunction.CountA(Range("B13:B15")) 
For i = 1 To Length - 1 
    Sheets("Valuation 01").Copy After:=Sheets(4 + i) 
    Sheets(4 + i + 1).Name = "Valuation 0" & (i + 1) 
    Application.Calculation = xlCalculationAutomatic 
Next i 
    Sheets("Excel Inputs").Cells(11, "P") = Length 
End Sub 

Quelqu'un peut-il me aider à ce sujet?

+0

Donc, même si vous attendez longtemps puis cliquez sur le bouton, il fonctionne toujours pas? – Larry

+0

C'est la chose .. il ne .. .. quand il clique sur ce bouton ou même appuyez sur F8 (tout en entrant dans) trop vite il casse .. et puis quand je reviens à Excel et vérifier alors les feuilles copiées (qui viennent de macro 1) ont des # valeurs .. puis de nouveau quand j'appuie sur Maj + f9 ils mettent à jour pour corriger les valeurs! – user2110137

+0

MACRO 1:... Worksheets ("Entrées Excel") Activer Si Sheets ("Entrées Excel") des cellules (11, "P") = 3 Ensuite Sheets ("Évaluation 02") Supprimer Sheets ("Évaluation 03 "). Delete ElseIf Sheets (" Entrées Excel ") .Cellules (11," P ") = 2 Then Sheets (" Valuation 02 "). Delete Fin Si length = WorksheetFunction.CountA (Range (" B13 : B15 ")) Pour i = 1 à longueur - 1 Feuilles (" Évaluation 01 "). Copier après: = Feuilles (4 + i) Feuilles (4 + i + 1) .name =" Valuation 0 "& (i + 1) Application.Calculation = xlCalculationAutomatic Suivant i Feuilles ("Entrées Excel") Cellules (11, "P") = longueur End Sub – user2110137

Répondre

0

Habituellement, je vais utiliser Application.onTime Now + TimeValue("hh:mm:ss"),"macro2"
pour résoudre ce type de problème. Vous pouvez configurer macro2 pour qu'il s'exécute avec un certain délai sur macro1.

Et assurez-vous à la fin de votre macro1, Application.calculation = xlCalculationAutomatic ou Application.CalculateFullRebuild

Si cette méthode est pas assez bon, vous devez utiliser une cellule ou d'une variable globale comme le gardien de déterminer si tous les calculs sont terminés .
Par exemple, à la fin de marco1, continuez à utiliser l'événement Application.onTime pour vérifier la valeur de la cellule <> "" et si elle n'est pas encore terminée, appelez récursive.

Référence: Application.OnTimeApplication.CalculateFullRebuild

+0

juste essayé que .. encore à utiliser shift + f9// je voudrais pour mentionner que les formules dans les feuilles copiées utilisent une fonction indirecte avec les noms des feuilles copiées. cela peut-il être un problème? – user2110137

+1

Pour forcer le calcul en Excel. vous pouvez voir http://www.decisionmodels.com/calcsecretsh.htm Mettez-les à la fin de votre macro1. – Larry