【问题标题】:VBA Excel: Deleting all charts and graphs in a workbook, except oneVBA Excel:删除工作簿中的所有图表和图形,除了一个
【发布时间】:2017-08-09 18:35:07
【问题描述】:

我有一个生成大量工作表和图表的宏。还有各种运行的子例程,因此生成的每个工作表/图表的名称和数量永远不会相同。不变的是我的 HOME 工作表,它是用户的 UI,我希望它不受影响。

我在这里发现了一个类似的问题,即删除所有工作表,除了您正在使用的工作表(即 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,同时保持我的 HOME 表完好无损?

【问题讨论】:

  • 如果您还想删除图表(如果您指的是图表工作表),则必须参考 Sheets 集合而不是 Worksheets
  • 你好,乔希,你是说有时它会删除其他工作表上的图表,有时它不会?或者如果没有找到图表会引发某种错误?
  • 添加到@SJR 帖子。 Excel 中有 3 种类型的工作表。 1) ** 工作表(启动时加载的标准选项卡)。 **2) 图表表(图表设置为单独的选项卡。3) 宏表(仅附有 vba 的表。Worksheets 集合仅指 到工作表。Sheets 集合指的是所有工作表,无论类型如何。
  • 当我将 WS 从 Worksheet 更改为 Sheets 时,ws.Name 会导致“编译错误:找不到方法或数据成员”...您是正确的,我正在尝试删除 ChartSheets。

标签: vba excel


【解决方案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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 我想我应该澄清一下图表是图表,当我运行它时,图表似乎仍然存在。我应该只用 SHEET 替换吗?
    • 我已经有几个小时没有靠近电脑了。但是我的猜测是,如果您只是将类型更改为工作表,您将遇到其他问题。如果你还没有弄清楚,我会在稍后......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多