Как я могу получить подмножество HeaderRowRange ListObject? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь отформатировать все ячейки в строке заголовка моего 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's Range.

Однако, учитывая, что я вижу другие вопросы о том, что HeaderRowRange не работает должным образом (хотя и другими способами), может ли кто-нибудь объяснить, почему HeaderRowRange.Range () ведет себя таким необычным образом?

РЕДАКТИРОВАТЬ: Чтобы было ясно, ятакже попробовал это с полностью квалифицированными ссылками и получил тот же результат.

1 Ответ

0 голосов
/ 08 февраля 2019

ОК, наконец, получил репро.Ваша таблица не начинается со строки 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

...