2014-03-05 4 views
0

Нижеприведенный макрос выполняет расчет и создает гистограмму. На данный момент он работает для первого листа (Sheet1). Я хотел бы иметь возможность повторять один и тот же макрос на всех листах в моей книге excel. Есть ли простой способ сделать это? Заранее спасибо.макрос, проходящий через рабочие листы

Sub MyReport() 
    Workbooks.Open Filename:= _ 
     Application.GetOpenFilename 
    Range("G2").Select 
    ActiveCell.FormulaR1C1 = "=SUM(C[-5])" 
    Range("H2").Select 
    ActiveCell.FormulaR1C1 = "=SUM(C[-5])" 
    Range("I2").Select 
    ActiveCell.FormulaR1C1 = "=SUM(C[-5])" 
    Range("J2").Select 
    ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" 
    Range("G1:I2").Select 
    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.SetSourceData Source:=Range("'Sheet1'!$G$1:$I$2") 
    ActiveChart.ChartType = xlColumnStacked 
End Sub 
+2

'Есть простой способ сделать это' - вы можете использовать [Для каждого цикла] (HTTP: // stackoverflow.com/questions/12060855/iterating-through-excel-sheets) –

ответ

3

Вот как использовать каждый цикл для применения кода к каждому листу. Я также упростил некоторые из вашего кода.

Sub MyReport() 
    Dim Wkb As Workbook 
    Dim Ws As Worksheet 
    Dim chrt As Chart 

    Set Wbk = Workbooks.Open(Filename:=Application.GetOpenFilename) 

    For Each Ws In Wbk.Worksheets 
     Ws.Range("G2:I2").FormulaR1C1 = "=SUM(C[-5])" 
     Ws.Range("J2").FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" 

     Set chrt = Ws.Shapes.AddChart.Chart 
     chrt.SetSourceData Source:=Ws.Range("$G$1:$I$2") 
     chrt.ChartType = xlColumnStacked 
    Next Ws 
End Sub 

Результаты (лист 1 показано):

enter image description here

+0

Хороший ответ, но я бы 'Dim' переменную' Ws' просто для лучшей практики. –

+1

@simpLEMAn Хорошее предложение, сделано. –

+0

Подождите! :) Вместо «ActiveWorkbook», возможно, было бы хорошо «Dim WB как WorkBook», а затем «Установить WB = Workbooks.Open (Имя файла: = Application.GetOpenFilename)», чтобы включить исходный код OP. ** Редактирование: ** вы только что получили мой +1 :) –

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