2013-07-31 6 views
0

Я печатаю много графиков excel, используя vba. На данный момент у меня есть около 35 листов, которые я печатаю, поэтому мне интересно, есть ли скрипт, который легче изменить, чем тот, с которым я сейчас работаю.Более эффективный способ написать этот скрипт

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 

Так что это работает отлично. Для каждой диаграммы, которую я хочу напечатать, я сначала выбираю лист, а затем активирую график, который я хочу напечатать, обратившись к его номеру диаграммы. Есть ли эффективный способ изменения любых спецификаций печати диаграмм (например, изменение заголовка/нижнего колонтитула) без необходимости вручную изменять каждый блок кода, который я использую для каждой диаграммы?

редактирование: Я мог бы удалить много линий и просто

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

Но я все же хотел бы иметь возможность менять «номинальной LCU» и это влияет на весь мой код.

+0

Есть более чем 1 график на одном листе? Как вы определяете «RightHeader», который, кажется, является единственным переменным текстом? Являются ли размеры PlotArea неизменными? \ –

+0

Да. У меня примерно 3-4 графика на лист. RightHeader является сложным, поскольку на листе обычно будет 3 диаграммы, одна с номинальным LCU, реальным долларом США и номинальным долларом США. У меня есть модуль для каждого типа диаграммы. А размеры участка всегда одинаковы. – user2516746

+0

Содержит ли индекс диаграммы или название диаграммы, какой из трех типов он имеет? Например, номинальный LCU всегда равен 1 или всегда называется или называется? (Если нет, вам следует подумать об этом). Если это так, тогда это будет довольно легко закодировать. Собственно, если вы хотите придерживаться трех модулей, я могу сделать это сейчас. –

ответ

1

Это только несколько тестируется, но он должен показать вам, как цикл через рабочие листы с ChartObjects, и как идентифицировать БУЛ ChartObject:

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 хорошо закодирован .. – brettdj

+0

это должно выполнить эту работу, спасибо! функция InStr() мне очень поможет. – user2516746

Смежные вопросы