2013-08-28 14 views
2

J'ai environ 9 feuilles différentes, mais ils auront tous 4 types de graphiques (totaux, comparaison, bydate, tendance). J'écris VBA pour montrer conditionnellement un type de graphique sur chaque feuille. Par exemple, si je veux afficher les graphiques des totaux, je souhaite mettre à jour toutes les feuilles du classeur. Je peux déjà rendre les graphiques invisibles et visibles sur une seule feuille, mais je voudrais le faire sur toutes les feuilles. Voici mon code maintenant:VBA définir des graphiques sur plusieurs feuilles invisibles Excel

Sub UpdateGraph() 
Sheets(".graphManager").ChartObjects("Totals").Visible = False 
End Sub 

Je veux être en mesure de le faire sur toutes les feuilles alors j'ai essayé quelque chose comme ceci:

Sub UpdateGraph() 
Dim ws As Worksheet 
    For Each ws In Sheets 
     If ws.Visible Then ws.Select (False) 
     ActiveWorksheet.ChartObjects("Totals").Visible = False 
    Next 
End Sub 

Mais pas de chance. Je ne veux pas taper manuellement tous les noms de feuille dans un tableau parce que je peux ajouter plus de feuilles dans le futur et ne veux pas continuer à changer le code. Comment puis-je faire défiler toutes les feuilles et définir un graphique nommé "Totaux" comme invisible? Ou puis-je simplement définir tous les graphiques du classeur nommés "Totaux" comme invisibles sans boucler les feuilles? Merci!

Répondre

3

Vous pouvez transmettre un paramètre qui détermine quel graphique doit être visible à chaque fois. Ensuite, au moment où vous sélectionnez le type de graphique, vous pouvez appeler la fonction une fois, passer dans le type de graphique sélectionné, et désactiver ce graphique et tous les autres, à travers toutes vos feuilles.

Sub UpdateGraph(graphType As String) 
Dim ws As Worksheet 
    For Each ws In Sheets 
     For Each co In ws.ChartObjects 
      '''Turn off all charts on the sheet first''' 
      ws.ChartObjects(co.Name).Visible = False 
     Next 
     '''Turn on the one chart type we want''' 
     ws.ChartObjects(graphType).Visible = True 
    Next 
End Sub 
+0

Excellent! J'ai trouvé une solution similaire par moi-même, mais la tienne était encore meilleure. –

+1

pourquoi 'ws.ChartObjects (co.Name) .Visible = False' et pas simplement' co.Visible = False'? Sinon, droit au but. –

+0

Eh, je n'y ai pas pensé car je donnais un exemple. La façon dont je l'ai fait est cohérente avec la façon dont j'ai retourné l'autre graphique, alors je me suis contenté de le faire. – techturtle

Questions connexes