Хотя динамический диапазон - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь найти последнюю цветную ячейку столбца

У меня есть этот код, который работает внутри кода листа:

Dim n As Integer: n = 0
While (Range("A" & n).Interior.Color <> RGB(255, 255, 255))
    n = n + 1
Wend

Но в моем модуле я заменил 2-ю строку на:

While (Worksheets("MyWs").Range("A" & n).Interior.Color <> RGB(255, 255,  255))

И в этой строке выдается ошибка 1004 Ошибка объекта определена

Я тоже пытался

While (Worksheets("MyWs").Range(Worksheets("MyWs").Cell(1,n)).Interior.Color <> RGB(255, 255,  255))

без успеха

1 Ответ

2 голосов
/ 07 июня 2019

Феникс, вы говорите, что пытаетесь найти последнюю цветную клетку.Но в вашем состоянии вы проверяете клетки на RGB (255, 255, 255), который имеет цвет Белый .Вам нужно использовать индекс или код для цвета Без заливки , который может выглядеть следующим образом .Interior.ColorIndex = xlNone.Таким образом, даже если вы не получаете эти ошибки, ваш код, вероятно, не будет работать так, как вы собираетесь.Я мог бы предоставить решение вашей проблемы.

Прежде чем поделиться кодом, позвольте мне отметить несколько вещей.Поскольку я не знаю, как выглядят ваши данные, я не могу адаптировать код к вашим точным потребностям.Это базовый код, использующий мой любимый цикл For Each, но, конечно, вы можете использовать любой цикл, который предпочитаете.

Цикл должен начинаться с цветных ячеек и продолжаться до тех пор, пока не встретится с первой неокрашенной ячейкой.Поэтому, если у вас есть несколько неокрашенных ячеек «в середине» столбца, цикл будет остановлен.

Пожалуйста, посмотрите код ниже:

Sub find_last_colored()
Dim cel As Range
Dim lastRow As Long

'define the number of last row in which the cell is not empty
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

'loop through every cell in column A to the last non-empty cell
For Each cel In ActiveSheet.Range("A:A" & lastRow)
    If cel.Interior.ColorIndex = xlNone Then
        'activates the last colored cell and gives its address
        cel.Offset(-1, 0).Activate
        MsgBox cel.Offset(-1, 0).Address
        Exit For
    Else
    End If
Next cel

End Sub

Вы можете заметить, что я сделалне определяя точную область действия диапазонов, я оставил это только как ActiveSheet., поэтому не забудьте изменить это при необходимости.Я надеюсь, что это решит вашу текущую проблему или, по крайней мере, направит вас в правильном направлении.

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