首页 文章

使用VBA在Excel中删除工作表和数据透视表

提问于
浏览
1

我正在尝试在VBA中集成动力枢轴和枢轴图的创建,并且已经发挥了重要作用 . 但是,我遇到了一个我似乎无法克服的问题

我创建了新的工作表,我创建了Pivot并将其导出为PDF . 完成后,我删除了pivottable和工作表:

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”而没有用宏删除它 . 工作表已被删除后,如何解决此问题?

提前致谢!

2 回答

  • 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
    

    希望能帮助到你!

  • 0

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

    如果您只剩下1 Sheet (A SheetWorksheetChart )并删除它,则会出现错误 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
    

相关问题