0
votes

Comment puis-je accélérer ce code VBA up qui implique la mise en forme?

Je configurais un nouveau calendrier de tarification qui lit les informations sélectionnées à partir d'une onglet "Registre", en fonction de critères sélectionnés et de la copie dans un nouvel onglet. Ces données sont formatées de sorte qu'il semble esthétiquement agréable. Je trouve le formatage du code ralentit considérablement la vitesse de course de manière significative. Si possible, j'aimerais accélérer cela comme je serai itération de ces moments multiples.

iAe a évoqué le programme un montant raisonnable. Initialement, il a fallu 30 ans, alors que maintenant, il est environ 10 ans. J'ai suivi des informations de ce site Web au mieux que je peux: HTTPS: // www.soa.org/news-and-publications/Newsletters/compact/2012/janary/com-2012-iss42-roper.aspx

Je pense qu'il y a toujours la portée pour améliorer davantage, Bien que je ne sois pas sûr comment et je cherche à voir s'il y a ou que vous y êtes, ou sont de meilleurs moyens d'améliorer le code afin qu'il exécute plus vite. xxx


5 commentaires

Je vote pour fermer cette question comme étant off-sujet car revue de code est l'endroit idéal pour obtenir de l'aide pour refactoring Code de travail.


Je suis heureux pour toi de le faire. Je ne connaissais pas l'examen du code existant et il semble que le bon endroit où aller


@ Keny-N À l'avenir, n'utilisez pas l'existence du site d'examen du code comme une raison pour fermer les questions. Évaluez la demande et utilisez une raison comme trop large , principalement basée sur l'opinion , etc., vous pouvez alors mentionner sur le point que cela peut être affiché sur l'examen du code s'il est sur le sujet et Drapeau pour l'intervention MOD . S'il vous plaît voir la section Qu'est-ce que vous ne devez pas faire dans Cette réponse à un guide de Examen du code pour les utilisateurs de dépassement de pile


Je voterais pour plus d'utiliser avec des blocs (la principale prestation serait la lisibilité) et l'attribution de valeurs de cellules sous forme de blocs de tableaux au lieu de cellules cellulaires (meilleures performances).


@Timwillidis Comment allais-je continuer à le faire en blocs? Merci


3 Réponses :


1
votes

Votre manipulation du tableau de collecte est inefficace. Envisagez de lire l'ensemble du registre du client dans un tableau avec MyARRAY = Gamme.Value. Ensuite, préparez la matrice de sortie en mémoire et écrivez-la à la feuille de calcul après que toutes les boucles sont effectuées, en une fois, avec TargeRange.Value = Collect.

Évitez d'insérer des rangées. Quel est le problème avec l'existant? Si vous préparez toutes les données dans un tableau à coller à la feuille de calcul, les éléments de tableau vidants produiront des cellules de feuille de calcul vides. De cette manière, tout l'insertion peut être évité et tout ce que vous avez à faire est de formater.

Il y a un coût temporel pour chaque accès à la feuille de calcul, que ce soit pour lire ou écrire. Même pour le formatage, essayez de créer des gammes traitées de la même manière. Évitez d'accéder à la feuille de calcul dans les boucles.


2 commentaires

Est-il possible de formater en dehors de l'accès à la feuille de calcul?


Non, le formatage doit être appliqué à la plage de la feuille de calcul. Mais il est plus rapide d'appliquer un format à un groupe de cellules que de formater chaque cellule individuellement comme se produit dans une boucle.



1
votes

Exemple d'aide et d'une affectation de bloc d'un tableau:

 Range("A1:A10").Range("A1") 'refers to A1
 Range("A2:A10").Range("A1") 'refers to A2


0 commentaires

1
votes

J'ai trouvé quelques lignes qui pourraient vous faire économiser du temps d'exécution.

        Range("Pricing_Range").Rows(i + 1).Insert Shift:=xlShiftDown
        Range("Pricing_Range").Rows(i + 1).Insert Shift:=xlShiftDown


1 commentaires

Merci pour les commentaires. J'ai trouvé le dernier numéro à Bethe le plus gros. J'ai ajouté dans une ligne sur la partie "Array" pour dire si la catégorie de ligne est identique à celle ci-dessous, faites 1 + 2. De cette façon, je n'ai pas besoin d'insérer des lignes. J'ai dû ré-ingénieur quelques affaires plus tard, mais cela ne prend que 3 ans maintenant, plutôt que 10. Une amélioration si grosse. Merci