2017-08-09 6 views
0

多くのワークシートとグラフを生成するマクロがあります。また、生成された各ワークシート/チャートの名前と数量が決して同じではないように、さまざまなサブルーチンが実行されます。定数は、ユーザのUIであるHOMEワークシートであり、影響を受けないようにしたいと考えています。VBA Excel:1つを除くブック内のすべてのグラフとグラフを削除する

作業中のワークシート(つまり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 

ワークシートがうまく削除されていますが、ハングアップはグラフです。私はチャートを削除するためにさまざまな試みを試みましたが、時にはそれらは機能します(つまり、FORループとIF文の外にCharts.Deleteを配置する)。しかし、これは実際にはワークブックにチャートを持たせる必要があります。時には、ユーザーは単にワークシートを作成できますが、グラフは作成できません。

私のHOMEシートをそのままにして、SHEETS および/またはチャールズを削除することを私の目標としていますか?

+1

あなたも(あなたがグラフシートを意味している場合)のチャートを削除したい場合は、むしろWorksheets' ''よりSheets'コレクションを参照する必要があります。 – SJR

+0

こんにちは、ジョシュ、他のシートのチャートを削除することがありますが、そうでない場合がありますか?またはチャートが見つからない場合に何らかのエラーが発生しましたか? – perfo

+0

@SJRの投稿に追加する。 Excelには3種類のシートがあります。 ** 1)**ワークシート(起動時に読み込まれる標準タブ)。 ** 2)**チャートシート(チャートは別のタブとして設定されています** 3)**マクロシート(VBAのみが貼られているシート) 'Worksheets'コレクションはワークシートへの** **のみを参照します。 –

答えて

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

私はチャプターがチャーチルであることを明確にすべきだったと思うが、これを実行すると、チャートシートがまだ存在するように思える。ちょうどシートと交換すべきだろうか? – joshjayse

+0

私は数時間のPCの近くにいない。タイプをシートに変更するだけで他にも問題があります。もしあなたがそれを理解していないと、後で私は後になります... – perfo

関連する問題