2015-01-28 4 views
0

Я довольно новичок в VB и имею, вероятно, простую проблему - мне нужно пройти все листы в книге и удалить все диаграммы (разбросанные вокруг), выберите последнюю строку, которая имеет данные, перемещается назад и удаляет пустые строки. Я попробовал что-то, что я собрал из StackOverflow и даже с сайта MS, но ничего не работает.Excel VB - цикл Foreach внутри цикла Foreach (цикл через листы, удаление пустых строк)

Sub DeleteChartsRowsAllSheets() 
Dim Ws As Worksheet, chtObj As ChartObject, i As Long 

    For Each Ws In ThisWorkbook.Worksheets 

      For Each chtObj In Ws.ChartObjects 
      chtObj.Delete 

      Next 
     'We turn off calculation and screenupdating to speed up the macro. 
     With Application 

     'Turn off screen updating and calculation 
     .Calculation = xlCalculationManual 
     .ScreenUpdating = False 

      For i = Selection.Rows.Count To 1 Step -1 

       If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then 
        Selection.Rows(i).EntireRow.Delete 
       End If 

      Next i 

     'Turn screen updating and calculation back on 
     .Calculation = xlCalculationAutomatic 
     .ScreenUpdating = True 

     End With 

    Next Ws 

End Sub

Любые советы? :)

ответ

0

Заменить ActiveSheet.ChartObjects на ws.ChartObjects во вложенном цикле.

В настоящее время вы удаляете только графики на ActiveSheet.

+0

Удивительный, он работает! Нужно ли это «прокручивать листы» или я могу опустить его (часть «Далее Ws»)? –

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