【问题标题】:Deleting sheets and pivot tables in Excel with VBA使用 VBA 在 Excel 中删除工作表和数据透视表
【发布时间】:2018-09-04 18:19:19
【问题描述】:

我正在尝试在 VBA 中集成电源轴和轴图的创建,并且已经完成了很大一部分。 但是,我遇到了一个我似乎无法克服的问题

我创建新的工作表,在其中创建 Pivot 并将其导出为 PDF。 完成后,我删除数据透视表和工作表:

Sub DeleteAllPivotTables()
    PURPOSE: Delete all other sheets and pivots
    Dim sht As Worksheet
    Dim pvt As PivotTable
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Name <> "Output" Then
            If sht.Name <> "Syntax" Then
                For Each pvt In sht.PivotTables
                    pvt.TableRange2.Clear
                Next pvt
                sht.Delete
            End If
        End If
    Next sht
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

当我删除没有用于删除数据透视表的宏部分的工作表时,我遇到了运行时 1004 错误。据我所知,因为枢轴名称“PivotTable1”已经被使用并且没有被宏删除。 当工作表已经被删除时,我该如何解决这个问题?

提前致谢!

【问题讨论】:

  • 两步怎么样。 1) 循环并删除工作簿中的所有数据透视表(不需要为此循环工作表,因为工作簿有它自己的数据透视表对象集合)。 2) 循环并删除所有工作表。

标签: vba excel pivot-table powerpivot


【解决方案1】:

清除数据透视表时实际上并没有删除它。如果要删除它,则需要使用thisthis 之类的解决方案。我已更新您的代码以包含这些解决方案。

Sub DeleteAllPivotTables()
    PURPOSE: Delete all other sheets and pivots
    Dim sht As Worksheet
    Dim pvt As PivotTable
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Name <> "Output" Then
            If sht.Name <> "Syntax" Then
                For Each pvt In sht.PivotTables
                    pvt.Range(pvt.TableRange2.Address).Delete
                Next pvt
                sht.Delete
            End If
        End If
    Next sht
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

希望对你有帮助!

【讨论】:

    【解决方案2】:

    1004 是一个在 VBA 中经常出现的错误。在您的情况下,您正在删除Worksheets,而不检查您还剩下多少Sheets

    如果您只剩下 1 个Sheet(一个Sheet 是一个Worksheet 或一个Chart)并且您删除它,则会出现错误1004。为避免这种情况,请确保 Sheets.Count 大于 1,然后再删除:

    Public Sub TestMe()
        Dim ws  As Worksheet
        For Each ws In Worksheets
            If Sheets.Count > 1 Then ws.Delete
        Next ws
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多