为何VBA检测应用快速样式的Excel表格背景颜色结果一致?
问题描述
我有两个Excel表格Table32和Table28,都先创建完成后,通过Excel功能区的「表格设计/快速样式」分别指定了样式:
- Table32应用「White, Table Style Medium 4」
- Table28应用「Green, Table Style Medium 7」
我想通过VBA代码根据表格颜色执行操作,目前能正确检测表格样式:
Debug.Print Sheet20.ListObjects("Table32").TableStyle ' 输出:TableStyleMedium4 Debug.Print Sheet20.ListObjects("Table28").TableStyle ' 输出:TableStyleMedium7
但检测表头背景颜色时,两个表格返回结果完全相同:
Debug.Print Sheet20.ListObjects("Table32").HeaderRowRange.Interior.Color ' 输出:16777215 Debug.Print Sheet20.ListObjects("Table28").HeaderRowRange.Interior.Color ' 输出:16777215
我原本期望得到对应白色和绿色的颜色值,请问这是什么原因?
原因及解决方法
核心原因
当表格应用内置快速样式时,表头的背景色是通过表格样式条件格式设置的,而非直接给单元格Interior.Color赋值。此时HeaderRowRange.Interior.Color读取的是单元格本身的基础填充色(默认白色,对应值16777215),而非样式应用后的显示颜色。
正确获取样式颜色的方法
要读取表格样式中定义的表头颜色,需要直接访问表格样式的格式规则:
' 获取Table32的表头样式颜色 Debug.Print Sheet20.ListObjects("Table32").TableStyle.TableStyleElements(xlHeaderRow).Interior.Color ' 获取Table28的表头样式颜色 Debug.Print Sheet20.ListObjects("Table28").TableStyle.TableStyleElements(xlHeaderRow).Interior.Color
说明
TableStyleElements(xlHeaderRow):指定要读取表格样式中的表头行元素.Interior.Color:读取该样式元素定义的填充色,这个值才是你看到的快速样式对应的颜色
另外,也可以通过判断表格样式名称来区分(你已经能正确获取TableStyle属性),比如:
Select Case Sheet20.ListObjects("Table32").TableStyle Case "TableStyleMedium4" ' 执行Table32对应的操作 Case "TableStyleMedium7" ' 执行Table28对应的操作 End Select
内容的提问来源于stack exchange,提问作者71GA
相关产品推荐
相关产品推荐

