如何获取ListObject的HeaderRowRange的子集?

时间:2019-02-07 21:17:55

标签: 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的Range的子范围,我已经在短期内成功解决了这个问题。

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

编辑:为清楚起见,我还使用完全合格的引用进行了尝试,并获得了相同的结果。

1 个答案:

答案 0 :(得分:3)

好的,终于得到了再现。您的表不是从第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