ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 71921|回复: 134

[原创] Excel 2003数据透视表“永恒边框”实现方法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-1 10:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
众所周知,在Excel 2003中如果仅仅使用格式工具栏中的“边框”功能为透视表添加边框的话,刷新数据透视表后,这种边框就消失(如下图所示),但是在Excel 2007中这种现象已经不存在了,用户设置的边框将“永恒”存在。对于广大的仍在使用Excel 2003的用户来说,其实有多种方法可以实现数据透视表的“永恒边框”。

Refresh.gif

方法一:使用条件格式。
优点:简单易行,无需代码。
缺点1:如果行字段或者列字段中有“空项目”,那么数据透视表的公式就不像下图中那么简单了,大家可以研究一下如何完善条件格式公式。
缺点2:如果改变透视表布局,比如添加字段后透视表区域将“扩大”,那么新增加的单元格区域无法自动添加条件格式,因此没有“永恒边框”,也就是说这种实现方法无法自适应扩展。
补充:对于整个工作表应用条件格式也解决这些问题,请参考12楼BIN_YANG168版主的帖子。

RefreshCndFmt.gif

方法二:使用数据透视表刷新事件
优点:可以实现自适应扩展,并且对于代码所在工作表之内新增加的透视表仍然有效,当然可以继续扩展为整个工作簿内的全部透视表都可以实现“永恒边框”。
缺点:打开工作簿时必须“启用宏”,否则事件代码无法生效,“永恒边框”也就消失了。

RefreshEvent.gif
  1. Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) ‘事件代码1
  2.     With Target.TableRange1
  3.         With .Borders(xlEdgeLeft)
  4.             .LineStyle = xlContinuous
  5.             .Weight = xlThin
  6.             .ColorIndex = xlAutomatic
  7.         End With
  8.         With .Borders(xlEdgeTop)
  9.             .LineStyle = xlContinuous
  10.             .Weight = xlThin
  11.             .ColorIndex = xlAutomatic
  12.         End With
  13.         With .Borders(xlEdgeBottom)
  14.             .LineStyle = xlContinuous
  15.             .Weight = xlThin
  16.             .ColorIndex = xlAutomatic
  17.         End With
  18.         With .Borders(xlEdgeRight)
  19.             .LineStyle = xlContinuous
  20.             .Weight = xlThin
  21.             .ColorIndex = xlAutomatic
  22.         End With
  23.         With .Borders(xlInsideVertical)
  24.             .LineStyle = xlContinuous
  25.             .Weight = xlThin
  26.             .ColorIndex = xlAutomatic
  27.         End With
  28.         With .Borders(xlInsideHorizontal)
  29.             .LineStyle = xlContinuous
  30.             .Weight = xlThin
  31.             .ColorIndex = xlAutomatic
  32.         End With
  33.     End With
  34. End Sub
复制代码
对于熟悉VBA代码的朋友来说,可能已经看出上面代码(35行)可以简化为下面的3行代码,完全正确!最精彩的最简洁的VBA实现方法由此衍生而来。
  1. Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)‘事件代码2
  2.     Target.TableRange1.Borders.LineStyle = xlContinuous
  3. End Sub
复制代码
方法三:使用VBA代码一次性设置“永恒边框”(无需任何事件代码)
使用方法:选中透视表中的任何一个单元格,然后运行“PvtBordersLine”过程设置边框,这个边框将可以“永恒”存在,而不需要使用上面的事件代码,透视表刷新之后这个边框仍然存在。
优点:一次运行代码即可以实现可以自适应扩展的“永恒边框”,在此之后不再依赖“宏”功能,即使以后打开工作簿时没有启用宏,甚至已经删除“PvtBordersLine”过程代码,“永恒边框”仍然存在,是一劳永逸的实现方法。即使运行代码时,透视表只显示了部分内容,全部显示透视表内容或者添加字段改变布局之后,边框仍然是“永恒”的,参见下图。
缺点:对于新增加的透视表,无法自动具备“永恒边框”,必须手工运行一次代码设置边框。
注意:如果使用方法二中的“事件代码1”替换下面的代码则无法实现这个效果。
  1. Sub PvtBordersLine()
  2.     ActiveCell.PivotTable.TableRange1.Borders.LineStyle = xlContinuous
  3. End Sub
复制代码
RefreshCode.gif

方法四:宏表函数+条件格式设置永恒边框 -- JSSY (27楼)


http://club.excelhome.net/thread-520373-3-1.html

写在最后的话,方法二中两段事件代码应该是等效的,这是大家在简化录制宏产生的代码时,最经见到的代码,只是偶然中发现了第三种实现方法,我不知道其真正的实现原理。

[ 本帖最后由 taller 于 2010-11-29 02:29 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-1-1 11:31 | 显示全部楼层
谢谢版主分享,学习了

TA的精华主题

TA的得分主题

发表于 2010-1-1 11:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
版主辛苦了
新年就送上第一份礼物啊

TA的精华主题

TA的得分主题

发表于 2010-1-1 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享!

TA的精华主题

TA的得分主题

发表于 2010-1-1 10:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这么好的方法一定要收藏。谢谢taller新年第一天的问候。

TA的精华主题

TA的得分主题

发表于 2010-1-1 18:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-1-1 18:38 | 显示全部楼层
方法好。用到了,来拷贝一下代码。

TA的精华主题

TA的得分主题

发表于 2010-1-1 19:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢T版分享

TA的精华主题

TA的得分主题

发表于 2010-1-1 20:28 | 显示全部楼层
我的理解:透视表边框为什么不能直接套上去呢?其实,这是有原因的。大家都知道,透视表里面有个报告的选项。嘿嘿,就是这个东东在作祟。当我们刷新透视表时,其实是将透视表的报告格式返回我们已经选择的报告格式(假如你不曾选择的话,透视表会自动帮你选择其中的“传统数据透视表”格式),所以,当我们直接套上的边框在透视表刷新后就会被当前报告格式所代替。我们的功夫也就白费了。而条件格式等手段,就是我们和透视表沟通的工具,相当于告诉透视表,“我的地盘我做主,你丫别动我的边框”
关于报告,有一点不知道大家有没有发现,无论是那个报告格式,其边框都是外边框,没有内边框的。路人甲:他是内是外有啥用。嘿嘿,这当然有用。在某些情况下,我们就可以不用设置行字段的边框。路人乙:具体哪些情况啊?我:自己摸索去
以上是我对透视表边框的理解,不知道是否正确。

TA的精华主题

TA的得分主题

发表于 2010-1-1 21:11 | 显示全部楼层
大爱第三种!!!好简单的方法~~~多谢郗版~~~~~~~~~

PS:就是有点灵异,我第一次写出来后运行居然提示说缺少")",完全没动再让运行又说对象不支持什么属性方法,愤然删掉,复制郗老师的代码,成功。。暴汗。。。明明就是一样的。。。。还好后面自己再写一样的也成功了,不然在这2010头一天就要怀疑自己RP还是有点伤自尊的。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 18:33 , Processed in 0.049546 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表