VBA Excel: удаление всех диаграмм и графиков в книге, кроме одного

У меня есть макрос, который генерирует много рабочих таблиц и диаграмм. Существуют также различные подпрограммы, которые запускаются так, что имена и количество каждого созданного рабочего листа / диаграммы никогда не совпадают. Постоянным является мой рабочий лист HOME, который является пользовательским интерфейсом пользователя, и я хочу, чтобы он не был затронут.

Я нашел здесь аналогичный вопрос об удалении всех листов, кроме того, с которым вы работаете (например, HOME). Вот что я до сих пор.

Sub ZRESET() Dim ws As Worksheet, wb As Workbook Set wb = ActiveWorkbook Sheets("HOME").Select Application.DisplayAlerts = False For Each ws In wb.Worksheets If ws.Name <> "HOME" Then ws.Delete End If If Chart.Name = "" Then Charts.Delete End If Next Application.DisplayAlerts = True Range("B5:E5,B9:E9,B13:E13,B14:E14").ClearContents Range("A1").Select End Sub 

Рабочие листы удаляются штрафом, а зависание у меня есть диаграммы. Я пробовал различные попытки удалить диаграммы, и иногда они работают (т. Е. Размещая Charts.Delete вне цикла FOR и оператора IF). Но для этого требуется, чтобы у меня была диаграмма в книге. Иногда пользователь может просто создавать рабочие листы, но нет диаграмм.

Любые советы по продолжению моей цели удаления SHEETS и / или CHARTS при сохранении моей домашней страницы?

 Option Explicit Sub GetRid() Dim ASheet As Worksheet Dim AChart As Chart Application.DisplayAlerts = False Application.ScreenUpdating = False '** first scan for and delete all non HOME worksheets *** For Each ASheet In ActiveWorkbook.Worksheets If UCase(ASheet.Name) <> "HOME" Then ASheet.Delete End If Next '** Now scan and delete any ChartSheets **** For Each AChart In ActiveWorkbook.Charts AChart.Delete Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 
 Option Explicit Sub AllSheetsAndcharts() Dim AChart As ChartObject Dim ASheet As Worksheet Application.DisplayAlerts = False For Each ASheet In ActiveWorkbook.Worksheets If UCase(ASheet.Name) <> "HOME" Then For Each AChart In ASheet.ChartObjects AChart.Delete Next ASheet.Delete End If Next Application.DisplayAlerts = False End Sub 
Давайте будем гением компьютера.