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

devtools/2025/3/10 5:59:33/

《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实践经验,全部浓缩在下面的各个教程中:




http://www.ppmy.cn/devtools/165935.html

相关文章

SpringBoot使用注解扫描注册Java Web三大组件

使用注解扫描和注册Java Web三大组件&#xff08;Servlet、Filter、Listener&#xff09;非常方便。 1. Servlet 注册 Servlet 是 Java Web 开发的基础组件&#xff0c;用于处理客户端&#xff08;通常是浏览器&#xff09;发送的 HTTP 请求并生成响应。 Controller是基于 Ser…

Java基础面试题全集

1. Java语言基础 1.1 Java是什么&#xff1f; • Java是一种广泛使用的编程语言&#xff0c;最初由Sun Microsystems&#xff08;现为Oracle公司的一部分&#xff09;于1995年发布。它是一种面向对象的、基于类的、通用型的编程语言&#xff0c;旨在让应用程序“编写一次&…

IO多路复用(epoll)/数据库(sqlite)

1.poll: 1. poll使用链表管理文件描述符&#xff0c;对监测的文件描述符没有上限限制。 2. 文件描述符集合在应用层创建&#xff0c;需要实现应用层和内核层的反复拷贝 3. 需要应用层对集合表进行遍历&#xff0c;寻找到达的事件 4. 只能工作在水…

大模型混战:马化腾弯道超车,梁文锋破局,李彦宏开源重构,Kimi失利折戟

发布 | 大力财经 作者 | 魏力 导语&#xff0c;中国大模型“天时地利人和”之战&#xff1a;DeepSeek逆袭、腾讯后发制人与行业格局重构&#xff0c;Kimi后院起火&#xff0c;失利折戟&#xff0c;李彦宏开源重构。 AI 2.0时代的竞争逻辑 当前国产大模型市场格局多元&#x…

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1&#xff1a;Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序&#xff0c;该应用程序包含一个水平进度条&#xff08;QSlider&#xff09;&#xff0c;并且需要通过多线程来更新进度条的值。请根据以下要求完成代码&#xff1a; 界面设计&#xff1a; 使用 QS…

Spring Boot 的事务回滚

1. 事务管理的复杂性 •需手动处理事务回滚&#xff08;如Transactional&#xff08;rollbackFor SQLException.class&#xff09;&#xff09;。 •资源释放依赖 finally块&#xff0c;易遗漏。

Leetcode 刷题记录 05 —— 普通数组

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答。 目录 01 最大子数组和 方法一&#xff1a;动态规划&#xff08;卡达尼算法&#xff09; 方法…

第11章 web应用程序安全(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的&#xff0c;已经过去3年时间了&#xff0c;最近利用闲暇时间&#xff0c;抓紧吸收&#xff0c;总的来说&#xff0c;第11章开始学习利用web应用程序安全&#xff0c;主要讲信息收集、dns以及burpsuite&#xff0c;现在的资产测绘也…