excel - 如何获取 ListObject 的 HeaderRowRange 的子集?

标签 excel vba listobject

我正在尝试格式化 ListObject 标题行中某个单元格右侧的所有单元格,而将左侧的单元格单独保留。当我开始遇到麻烦时,我将代码简化为:

Set rpt = Me.ListObjects("Report")
With rpt.HeaderRowRange
    .Interior.ColorIndex = 3
    .Range(.Cells(9), .Cells(12)).Interior.ColorIndex = 7
End With

不幸的是,这样做的结果是整个标题行被涂成红色(如预期),但紫色的子范围向下 4 行!

Excel table with Header Row red as expected, but Body Row 4 is unexpectedly purple.

通过获取 ListObject 范围的子范围,我在短期内成功解决了该问题。

但是,鉴于我看到有关 HeaderRowRange 未按预期工作(尽管以其他方式)的其他问题,任何人都可以解释为什么 HeaderRowRange.Range() 会以这种非凡的方式表现吗?

编辑:需要明确的是,我也使用完全合格的引用文献进行了尝试,并获得了相同的结果。

最佳答案

好的,终于得到了重现。您的表格不是从第 1 行开始,这就是原因:行偏移量与表格标题行的行号相匹配。

这显然是 Excel 对象模型的一个错误。如果您无法移动表格以使标题行位于工作表的第 1 行中(在这种情况下,您的代码将完全按预期工作),那么您需要解决这个问题。

这似乎有效:

Dim r As Range
Set r = Me.Range(rpt.Range.Address)
Me.Range(r.Cells(9), r.Cells(12)).Interior.ColorIndex = 7

关键是,您可以从工作表本身获取范围,而不是相对于 rpt.HeaderRowRange

关于excel - 如何获取 ListObject 的 HeaderRowRange 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54582434/

相关文章:

Excel Listobject 表 ListRows.count 与 range.rows.count

Excel 检查值是否为 COUNTIFS 内的数字

vba - 在 Excel 中将矩阵 (?) 传递给 VBA

c# - 尝试使用 EPPlus 在服务器上读取 Excel 文件,但不能通过浏览器

vba - 删除工作表更改中的单元格并将其上移

excel - 复制过滤表

java - 如何使用 [Apache POI] 创建依赖下拉列表

vba - Outlook VBA 宏不修改电子邮件

vba - 如何循环这段代码直到到达 x 行?

excel - 刷新 Excel 表格过滤器和使用 VBA 排序时出错