ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > Excel VBA > 练习题:自动删除透视表所产生数据表

练习题:自动删除透视表所产生数据表

作者:绿色风 分类: 时间:2022-08-18 浏览:156
楼主
皮皮1998
答题期限】2010年1月20日12:00时截稿(以回帖时间为准),欢迎大家踊跃参与。
【题目】
       有时我们会根据透视表来查看某些项目的相关数据,这时,我们就会在透视表的数据区域双击,来产生数据表,但是这些数据表我们并不想保存它,题目要求:工作簿关闭后不保留因双击透视表的数据区域产生的所有数据表!
【要求】
1.用VBA编程来完成;
2.关闭该工作簿自动删除因双击透视表的数据区域所产生的所有透视表;
3.具体请参见动画.
【评分】
1、实现功能(如动画所示)可以获得3~4个技能分


 


自动删除透视表所产生数据表1.rar
2楼
amulee
全部放在工作簿Thisworkbook模块中

'设定公共变量。
Dim arrSht() As Worksheet        '工作表名称数组,用以记录数据透视表所产生的工作表。
Dim blnOnClick As Boolean        '逻辑值标志。记录是否双击了数据透视表区域
'工作簿关闭时删除所有记录的对象
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Dim i&
    '关闭警告提示
    Application.DisplayAlerts = False
    '删除所有记录的对象
    For i = 1 To UBound(arrSht)
        arrSht(i).Delete
    Next i
    ThisWorkbook.Save   '既然删除了就得保存一下吧
    '恢复警告提示
    Application.DisplayAlerts = True
End Sub
'当增加工作表事件是通过双击透视表触发时,记录工作表名
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    If blnOnClick Then
        ReDim Preserve arrSht(0 To UBound(arrSht) + 1)  '增加数据
        Set arrSht(UBound(arrSht)) = Sh                 '增加一个对象的记录
        blnOnClick = False                              '双击标志归为否
    End If
End Sub
'工作簿打开时初始化
Private Sub Workbook_Open()
    ReDim arrSht(0 To 0)
End Sub
'判断双击事件时,是否双击了透视表区域
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim objPivot As Object
    '遍历该工作簿所有数据透视表
    For Each objPivot In Sh.PivotTables
        'DataBodyRange是数据透视表的数据区域。双击该区域则会产生明细数据的工作表
        'Target是当前双击的区域
        '判断当前双击的区域和数据透视表数据区域是否有重合
        '若有重合,则将标志设定为True,意味着双击了数据透视表的数据区域
        If Not Application.Intersect(Target, objPivot.DataBodyRange) Is Nothing Then
            blnOnClick = True
            Exit Sub    '由于双击事件只能在一个数据透视表中产生,所以找到就退出过程
        End If
    Next
End Sub
3楼
棉花糖
这个方法挺实用的,基本上达到要求。有些细节就没做了,比如关闭工作簿是无论点击什么都会删除表格。

自动删除透视表所产生数据表1.rar
4楼
皮皮1998
这个是回复棉花糖老师代码中没考虑到的方面:

 

上面二位老师基本完成了动画的要求,如果二位老师的代码加一合并就更完美!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap