2010-08-25 5 views
3

Я хочу удалить рабочий лист, если он не содержит данных/диаграмм/изображений/объектов рисования/гиперссылки или любых других внедренных объектов.Excel Automation: идентификация и удаление пустых рабочих листов

я выяснить, решение обнаружения и удаления пустых листов, если нет никаких данных в ячейках, используя следующий код: -

, если ($ Worksheet_Function-> COUNTA ($ лист -> {Клетки}) == 0) { $ sheet-> Удалить; }

но также удаляет лист, если есть диаграммы или нетекстовые объекты.

Есть ли способ идентифицировать и удалять листы, если он полностью пуст?

ответ

1

будет удалить лист, если есть только форматирование, но это должно делать то, что вы спросите

Sub chksheet() 
Dim wks As Worksheet 
Application.DisplayAlerts = False 

For Each wks In ActiveWorkbook.Worksheets 

If WorksheetFunction.CountA(Cells) = 0 And wks.DrawingObjects.Count = 0 Then 
    wks.Delete 
    Else 
    MsgBox ("has stuff") 'or do nothing here and skip this sheet 
    End If 
Next wks 

Set wks = Nothing 
    Application.DisplayAlerts = True 
End Sub 
1

Вы можете быть более тщательным и пройти через все связанные объекты, которые вы хотите проверить

Option Explicit 

Sub test() 
Dim WS As Worksheet 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     'default usedrange = 1 so check cell A1 is also empty 
     If .UsedRange.Count = 1 And IsEmpty(.Cells(1, 1).Value) _ 
      And .UsedRange.Column = 1 _ 
      And .UsedRange.Row = 1 _ 
      And .Comments.Count = 0 _ 
      And .Shapes.Count = 0 _ 
      And .Hyperlinks.Count = 0 _ 
      And .ListObjects.Count = 0 _ 
      And .OLEObjects.Count = 0 _ 
      And .Names.Count = 0 _ 
      And .QueryTables.Count = 0 _ 
      And .SmartTags.Count = 0 Then 

      MsgBox ("BLANK") 
      'WS.delete 
     Else 
      MsgBox ("NOT BLANK") 
     End If 

     End With 
Next WS 
End Sub 
Смежные вопросы