2017-08-09 103 views
0

我有一個生成大量工作表和圖表的宏。還有各種子程序運行,因此每個生成的工作表/圖表的名稱和數量永遠不會相同。常量是我的HOME工作表,這是用戶的UI,我希望它不受影響。VBA Excel:刪除工作簿中的所有圖表和圖形,除了一個

我在這裏發現了一個類似的問題,關於刪除除您正在使用的工作表(即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語句之外)。但是這需要我在工作簿中實際上有一個圖表。有時用戶可以開發工作表,但沒有圖表。

任何意見,以繼續我的目標刪除頁和/或圖表,同時保持我的HOME表完整?

+1

如果你想刪除圖表太(如果你的意思是圖表工作表)必須參考'Sheets'集合,而不是'Worksheets'。 – SJR

+0

你好,喬希,你是說有時它會刪除其他表中的圖表,有時它不會?或者如果沒有找到圖表,就會發生某種錯誤? – perfo

+0

添加到@SJR文章。 Excel中有3 *類型的表單。 ** 1)**工作表(在啓動時加載的標準選項卡)。 ** 2)**圖表(圖表設置爲一個單獨的選項卡** 3)**宏表單(僅附有vba的表單,「工作表」集合僅在工作表中引用** **表單集合 –

回答

1
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 
+0

這應該是你的... – perfo

+0

完美!謝謝... – joshjayse

0
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 
+0

我想我應該澄清CHARTS是CHARTSHEETS,當我運行這個時,似乎ChartSheets仍然存在,我應該用SHEET替換嗎? – joshjayse

+0

我幾個小時都沒有接近電腦,但是沒有我的猜測如果你只是改變類型,你會有其他問題,如果你還沒有弄清楚,我會在以後... – perfo

相關問題