Comment puis-je faire une boucle par un sous-ensemble de feuilles de calcul?
Je sais comment faire une boucle sur toutes les feuilles de calcul dans un classeur, et comment quitter une fois que j'atteins un "drapeau" de la feuille de calcul:
For Each ThisWorkSheet In Worksheets
If ThisWorkSheet.Name = "FlagEnd" Then Exit For
MsgBox "This worksheet name is: " & ThisWorkSheet.Name
Next
Cependant je ne peux pas obtenir de la boucle pour commencer sur une "start-drapeau" de la feuille de calcul (ou encore mieux sur la feuille de calcul à droite après le début du pavillon de la feuille de calcul. Par exemple, le pavillon de début/fin les feuilles de calcul sont au milieu d'un tas d'autres feuilles de calcul, ainsi, au début ou à la fin de la traversée n'est pas réalisable.
Il pourrait y avoir des centaines de feuilles de calcul avant que "FlagStart de la fiche", donc j'ai vraiment besoin pour démarrer sur le droit de la feuille.
Essayé:
Set ThisWorkSheet = Sheets("FlagNew")
et
For Each Sheets("FlagNew") In Worksheets
Idées?
Solution:
Mathias était très proche, mais dendarii a été le petit pas de plus avec la fin de l'index. J'ai effectivement trouvé ma solution finale sur mon propre, mais je voulais donner du crédit. C'était ma solution finale:
Private Sub CommandButtonLoopThruFlaggedSheets_Click()
' determine current bounds
Dim StartIndex, EndIndex, LoopIndex As Integer
StartIndex = Sheets("FlagNew").Index + 1
EndIndex = Sheets("FlagEnd").Index - 1
For LoopIndex = StartIndex To EndIndex
MsgBox "this worksheet is: " & Sheets(LoopIndex).Name
' code here
Next LoopIndex
End Sub
Doh, gravé moi-même avec les raccourcis de nouveau! Merci je n'étais pas au courant de cela, je vais le changer.
OriginalL'auteur Kirk Hings | 2009-10-19
Vous devez vous connecter pour publier un commentaire.
Si ce n'est pas particulièrement changeant classeur (c'est à dire les feuilles de calcul ne sont pas ajoutés et supprimés de tous les temps), vous pouvez stocker les noms des feuilles de calcul dans une plage sur une feuille masquée et boucle à travers eux par leur nom.
Cependant, il semble comme ils sont stockés de manière consécutive dans le classeur ainsi, en s'appuyant sur Mathias solution, vous pouvez utiliser une fonction pour renvoyer les indices de début et de fin des feuilles de calcul et ensuite faire une boucle par:
(solution éditée dans la question initiale avec le code de mise en forme)
Je vois que vous avez mis en place une bonne fonction. Je voudrais suggérer quelques choses bien. Je vous suggère de prendre le nom de la feuille pour lequel vous souhaitez trouver l'index, comme un argument dans la fonction. En ne prenant aucune arguments, vous avez fait la fonction statique; vous pourriez aussi bien pu écrire ces deux lignes dans votre main sous. Ensuite, utilisez les feuilles de la collection pour obtenir l'index, parce que, le code peut ne pas fonctionner comme vous l'attendez, lorsque le classeur contient des feuilles de graphique.
OriginalL'auteur dendarii
Je crois que si vous utilisez "foreach" vous n'avez aucun contrôle sur la feuille de départ. D'ailleurs, je ne suis même pas sûr de vous garantir l'ordre dans lequel l'itération aura lieu.
Je pense que ce que vous devez faire est d'abord, obtenir l'index de la feuille qui vous intéressent (obtenir la feuille en nom, et d'obtenir son index), puis effectuer une itération à l'aide d'une boucle for, sur l'index des plaques commençant le drapeau à la feuille d'index.
[Edit: j'ai piraté par un exemple rapide]
OriginalL'auteur Mathias
Comment?
Ce code peut ne pas être tout à fait juste. Je vais écrire dans l'éditeur de ne pas VBA, mais vous obtenez l'idée.
Bois - optimisation prématurée va vous mordre! Je vous conseille d'obtenir une solution de travail d'abord, puis de chercher des moyens de l'optimiser. Aussi, je serais inquiet d'avoir des centaines de feuilles. Est Excel le meilleur outil?
les bons points, en fait, je suis l'optimisation de la solution qu'ils utilisent déjà. actuellement, ils copier coller un tas de ce genre de choses et nous essayons de l'automatiser pour eux. je suppose que je exagérée à des centaines, mais il peut y avoir des dizaines de feuilles, et, malheureusement, ils varient en nombre et les noms de feuilles. je suis en train d'essayer ces solutions dès maintenant. j'ai frappé à l'aide de l'index, hier, après la publication de ce problème.
OriginalL'auteur Ade Miller
Faire les fiches que vous itérer sur ont un nom commun format?
Ex)
Si oui, dans votre pour chaque boucle, il suffit de faire une
Left(ThisWorkSheet.name, 4) = "emp"
pour vérifier si c'est une feuille que vous souhaitez référencer.OriginalL'auteur JakeTheSnake
En VBA Excel 2013 si vous avez des feuilles de calcul que vous souhaitez mettre à jour entre les onglets "Blankfirst" et "Blanklast" cela fonctionne.
Utiliser le code ci-dessous pour tester ramène à votre onglet noms et puis replacer la manipulation de code à la place de
MsgBox wks.Name
partie.OriginalL'auteur Samir
OriginalL'auteur Rob