当前位置: 首页 > news >正文

VBA高级应用30例Excel中ListObject对象:提取表内单元格的格式元素

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中分发VBA程序,写好的程序可以升级。本套教程共三册三十个专题,本讲的内容是:VBA高级应用30例应用3在Excel中的ListObject对象:提取表内单元格的格式元素

分享成果,随喜正能量】 我平生的长进,全在受挫、受辱中得来。一定要咬紧牙关,积蓄自己的斗志,增长自己的智慧,方能成就不世之功。。

应用3 在Excel中的ListObject对象

在VBA中,表(Tables)的应用还是较普遍的,它们被称为ListObjects,这是Excel 2003引入的一个集合。但是对象模型的这一部分有很大的变化,我在这个专题简单给大家讲解一下应用,包括创建及一些格式操作。

8 提取表内单元格的格式元素

或许有的学员会问,如果需要表格中某个单元格的ThemeColor,为什么不简单地用cell.Interior.ThemeColor呢?这是因为我们要提取的单元格格式完全由表格的设置和选定的表格样式所规定的。为此,我们必须要获取表中单元格的格式元素,为了完成这个工作,我们需要:

1)找出单元格在表格中的位置(在标题行、第一列、表格的大部分)

2)确定表格设置:是否启用了行分条,是否有特殊格式的第一列

基于这些信息,我们可以从表样式中提取适当的TableStyleElement并读取其属性。我们在下面给出一个函数,这个函数返回名为oLo的表对象内的单元格oCell的TableStyleElement:

Function GetStyleElementFromTableCell(oCell As Range, oLo As ListObject) As TableStyleElement

Dim lRow As Long

Dim lCol As Long

'确定我们在表中的哪一行

lRow = oCell.Row - oLo.DataBodyRange.Cells(1, 1).Row

lCol = oCell.Column - oLo.DataBodyRange.Cells(1, 1).Column

With oLo

If lRow < 0 And .ShowHeaders Then

'位于第一行,并具有标题

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlHeaderRow)

ElseIf .ShowTableStyleFirstColumn And lCol = 0 Then

'在第一列上,并具有第一列样式

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlFirstColumn)

ElseIf .ShowTableStyleLastColumn And lCol = oLo.Range.Columns.Count - 1 Then

'在最后一列上,具有最后一列样式

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlLastColumn)

ElseIf lRow = .DataBodyRange.Rows.Count And .ShowTotals Then

'位于最后一行,并具有总计行

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlTotalRow)

Else

If .ShowTableStyleColumnStripes And Not .ShowTableStyleRowStripes Then

'在表中,有列条纹

If lCol Mod 2 = 0 Then

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlColumnStripe1)

Else

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlWholeTable)

End If

ElseIf .ShowTableStyleRowStripes And Not .ShowTableStyleColumnStripes Then

'在表中,有列条纹

If lRow Mod 2 = 0 Then

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlRowStripe1)

Else

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlWholeTable)

End If

ElseIf .ShowTableStyleColumnStripes And .ShowTableStyleRowStripes Then

If lRow Mod 2 = 0 And lCol Mod 2 = 0 Then

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlRowStripe1)

ElseIf lRow Mod 2 <> 0 And lCol Mod 2 = 0 Then

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlColumnStripe1)

ElseIf lRow Mod 2 = 0 And lCol Mod 2 <> 0 Then

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlRowStripe1)

Else

Set GetStyleElementFromTableCell = oLo.TableStyle.TableStyleElements(xlWholeTable)

End If

End If

End If

End With

End Function

代码的部分截图:

代码的讲解:

1)ListObject.DataBodyRange 属性:这个属性返回一 个Range 对象,该对象代表表格中除标题行之外的值范围。 此为只读属性。

2)ListObject.TableStyle 属性:获取或设置指定的 ListObject 对象的表样式。 读/写 Variant。

(待续)

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:



相关文章:

  • WPF 之SizeToContent
  • 8.1linux竞争与并发知识讲解(尽可能详细)_csdn
  • pta L1-003 个位数统计
  • LeetCode 738. 单调递增的数字 java题解
  • 2.装饰器模式
  • 计算机安全 第四节:访问控制(上)
  • Qt常用控件之分组框QGroupBox
  • Express Router 全面教程与最佳实践
  • k8s下部署ansible进行node-export二安装
  • 使用PHP实现异步编程:挑战与解决方案
  • 【数据结构】一文解析跳表
  • 【leetcode100】组合总和
  • 大规模分布式训练技术
  • LINUX SERVER在那種情況下需要做Raid
  • RabbitMQ应用问题大全(精心整理版)
  • 【MATLAB例程】二维环境定位,GDOP和CRLB的计算
  • JVM面试题
  • 【Agent的革命之路——LangGraph】如何使用config
  • Eclipse Kura:开源的物联网网关框架
  • Python入门———条件、循环
  • wordpress 仿站步骤/seowhy官网
  • 建立网站项目/东莞网络推广招聘
  • 自己的电脑建网站/做网络推广一般是什么专业
  • 小程序模板源下载/引擎优化seo
  • b2c电子商务购物网站/杭州seo排名优化外包
  • 翼讯自助网站/获客软件排名前十名