动态范围

时间:2019-06-07 01:03:39

标签: excel vba

我尝试找到列的最后一个彩色单元格

我有此代码可在工作表代码中使用:

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

但是在我的模块中,我将第二行替换为:

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 个答案:

答案 0 :(得分:2)

凤凰城,您说您正在尝试找到最后一个彩色单元格。但是在您的情况下,您要针对颜色为{strong>白色的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.,所以请不要忘记在需要时进行更改。 我希望这可以解决您当前的问题,或者至少可以为您指明正确的方向。