Форматировать выбранный диапазон макросов - PullRequest
0 голосов
/ 04 февраля 2020

Я хотел отформатировать выбранный диапазон, чтобы упростить все на данный момент, просто с верхней строкой красного цвета и остальной частью выделения белым.

Когда мой выбор начинается с А1, все в порядке Однако, когда мой выбор начинается дальше по всему листу, мое форматирование смещается от выделения.

Прошло много времени с тех пор, как я играл с VBA, поэтому извиняюсь за действительно грубый ie вопрос!

Вот мой код:

Sub formatrange()
Dim myRng As Range
Set myRng = Selection
Dim lc As Long
Dim lr As Long

lr = myRng.Rows.Count
lc = myRng.Columns.Count

myRng.Range(myRng.Cells(1, 1), myRng.Cells(1, lc)).Interior.Color = RGB(153, 0, 0)
myRng.Range(myRng.Cells(2, 1), myRng.Cells(lr, lc)).Interior.Color = RGB(255, 255, 255)

End Sub

Большое спасибо всем.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Попробуйте этот код:

Public Sub FormatRange()
    Dim myRng As Range
    Set myRng = Selection


    Dim lc As Long, lr As Long
    lc = myRng.Columns.Count
    lr = myRng.Rows.Count


    myRng.Resize(1, lc).Interior.Color = RGB(153, 0, 0)
    myRng.Offset(1, 0).Resize(lr - 1, lc).Interior.Color = RGB(255, 255, 255)

End Sub

test result

myRng относится к выбранному диапазону, а myRng.Resize() изменяет количество строк и столбцы ссылаются. Кроме того, myRng.Offset() перемещает ссылку вниз и вправо на указанную величину.

Таким образом, я взял верхнюю левую ссылку из myRng и "выбрал" верхнюю строку с помощью .Resize(1,lc)

* 1017. * Я «выбрал» оставшуюся таблицу, переместившись вниз на одну строку и выбрав lr-1 строк с .Offset(1,0).Resize(lr-1,lc).

ИМХО всегда чистее использовать myRng.Resize(n,m) вместо Range(myRng.Cells(1,1), myRng.Cells(n,m)).

0 голосов
/ 04 февраля 2020

Я думаю, что проблема в вашей lr переменной. Это заполняется количеством строк в вашем выборе. Однако, если у вас есть, скажем, 10 строк, начиная с 3-й строки, то 10-я строка не будет вашей последней строкой, а 12-я строка. Поэтому вам нужно включить что-то вроде

lr = lr + myRng.Row - 1

Чтобы преобразовать количество строк в число.

То же самое относится и к последнему столбцу курса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...