2013-07-31 6 views
0

J'imprime beaucoup de graphiques Excel en utilisant vba. À ce stade, j'ai environ ~ 35 feuilles d'impression, donc je me demande s'il y a un script qui est plus facile à modifier que celui avec lequel je travaille actuellement.Manière plus efficace d'écrire ce script

Sheets("Euro Graph").Select 
ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveChart.PlotArea.Select 
ActiveChart.PageSetup.RightHeader = "nominal LCU" 
ActiveChart.PageSetup.RightFooter = "&D &T" 
ActiveChart.PageSetup.CenterFooter = "&A" 
ActiveChart.PageSetup.LeftFooter = "&Z&F" 
Selection.Width = 921 
Selection.Left = 23 
Selection.Top = 61 
Selection.Height = 550 
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 

Cela fonctionne très bien. Pour chaque graphique que je veux imprimer, je sélectionne d'abord la feuille, puis j'active le graphique que je veux imprimer en me reportant à son numéro de graphique. Existe-t-il un moyen efficace de modifier les spécifications d'impression de cartes (comme changer l'en-tête/pied de page) sans devoir manuellement changer chaque bloc de code que j'utilise pour chaque graphique?

Edit: Je pourrais retirer beaucoup les lignes et juste

Sheets("Euro Graph").Select 
ActiveSheet.ChartObjects("Chart 1").Activate 
ActiveChart.PageSetup.RightHeader = "nominal LCU" 
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 

Mais je voudrais encore pouvoir changer « LCU nominale » et l'avoir une incidence sur tout mon code.

+0

Y at-il plus de 1 tableau par feuille? Comment déterminez-vous 'RightHeader', qui semble être le seul texte variable? Les dimensions de PlotArea sont-elles toujours les mêmes? \ –

+0

Oui. J'ai environ 3-4 cartes par feuille. Le RightHeader est le plus difficile, car une feuille aura généralement 3 cartes, une avec LCU nominale, USD réel, et USD nominale. J'ai un module pour chaque type de graphique. Et les dimensions de la zone de traçage sont toujours les mêmes. – user2516746

+0

Le graphique Index ou le titre du graphique indique-t-il systématiquement lequel des trois types est-il? Par exemple LCU nominale est toujours le graphique 1, ou toujours nommé ou intitulé quelque chose? (Si non, vous devriez envisager de le faire). Si c'est le cas, il sera assez facile de coder. En fait, si vous voulez coller avec trois modules, je peux le faire maintenant. –

Répondre

1

C'est seulement un peu testé, mais il devrait vous montrer comment faire une boucle à travers les feuilles de calcul avec ChartObjects, et comment identifier un ChartObject LCU:

Sub SetLCUCharts() 
Dim ws As Excel.Worksheet 
Dim chtObject As Excel.ChartObject 
Dim cht As Excel.Chart 

For Each ws In ThisWorkbook.Worksheets 
    If ws.ChartObjects.Count > 0 Then 
     For Each chtObject In ws.ChartObjects 
      If InStr(chtObject.Name, "LCU") > 0 Then 
       Set cht = ws.ChartObjects(1).Chart 
       With cht 
        .PageSetup.RightHeader = "nominal LCU" 
        .PrintOut Copies:=1, Collate:=True 
       End With 
      End If 
     Next chtObject 
    End If 
Next ws 
End Sub 
+0

+1 bien codé .. – brettdj

+0

cela devrait faire le travail, merci! la fonction InStr() m'aidera beaucoup. – user2516746

Questions connexes