Excel 动态范围

Excel 动态范围,excel,vba,Excel,Vba,我试图找到列的最后一个彩色单元格 我有一个在工作表代码内工作的代码: Dim n As Integer: n = 0 While (Range("A" & n).Interior.Color <> RGB(255, 255, 255)) n = n + 1 Wend Dim n作为整数:n=0 While(范围(“A”&n).Interior.Color RGB(255、255、255)) n=n+1 温德 但在我的模块中,我将第二行替换为: While (Wor

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

我有一个在工作表代码内工作的代码:

Dim n As Integer: n = 0
While (Range("A" & n).Interior.Color <> RGB(255, 255, 255))
    n = n + 1
Wend
Dim n作为整数:n=0
While(范围(“A”&n).Interior.Color RGB(255、255、255))
n=n+1
温德
但在我的模块中,我将第二行替换为:

While (Worksheets("MyWs").Range("A" & n).Interior.Color <> RGB(255, 255,  255))
While(工作表(“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))
While(工作表(“MyWs”).Range(工作表(“MyWs”).Cell(1,n)).Interior.Color RGB(255,255,255))

如果没有成功

菲尼克斯,您会说您正在试图找到最后一个彩色单元格。但在您的情况下,您正在针对颜色为白色的RGB(255、255、255)对单元格进行测试。您需要为无填充颜色使用索引或代码,该颜色可能类似于
.Interior.ColorIndex=xlNone
。因此,即使您没有收到这些错误,您的代码也可能无法按预期的方式工作。我也许能为你的问题提供一个解决方案

在我分享代码之前,请让我注意一些事情。因为我不知道您的数据是什么样子,所以我无法根据您的具体需要定制代码。这是一个基本代码,对每个循环使用我最喜欢的
,但当然,您可以使用您喜欢的任何循环

循环应在彩色单元格中开始,并将继续,直到遇到第一个非彩色单元格。因此,如果列的“中间”有一些非彩色单元格,它将停止循环

请参阅下面的代码:

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.
,所以如果需要,请不要忘记更改它。
我希望这能解决您当前的问题,或者至少能帮您找到正确的方向。

凤凰城,您说您正在试图找到最后一个彩色的单元格。但在您的情况下,您正在针对颜色为白色的RGB(255、255、255)
对单元格进行测试。您需要为无填充颜色使用索引或代码,该颜色可能类似于
.Interior.ColorIndex=xlNone
。因此,即使您没有收到这些错误,您的代码也可能无法按预期的方式工作。我也许能为你的问题提供一个解决方案

在我分享代码之前,请让我注意一些事情。因为我不知道您的数据是什么样子,所以我无法根据您的具体需要定制代码。这是一个基本代码,对每个循环使用我最喜欢的
,但当然,您可以使用您喜欢的任何循环

循环应在彩色单元格中开始,并将继续,直到遇到第一个非彩色单元格。因此,如果列的“中间”有一些非彩色单元格,它将停止循环

请参阅下面的代码:

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.
,所以如果需要,请不要忘记更改它。
我希望这能解决您当前的问题,或者至少能为您指明正确的方向。

您确定这是导致错误的原因吗?我无法使用您问题中描述的相同设置重现您的错误。第一个代码段将不起作用:没有
范围(“A0”)
。行或列索引不能为零。您需要更改
n
的值。。。用
n=1开始
n
您确定这是引发错误的行吗?我无法使用您问题中描述的相同设置重现您的错误。第一个代码段将不起作用:没有
范围(“A0”)
。行或列索引不能为零。您需要更改
n
的值。。。用
n=1
开始
n
条件“If”不起作用(立即为真),但我理解你的做法,所以我用条件替换了它:
If-ActiveSheet.Range(cel.address).Interior.Color=RGB(255,255,255),然后
。很好。感谢“如果”条件不起作用(立即为真),但我理解您的做法,因此我将其替换为条件:
如果ActiveSheet.Range(cel.address.Interior.Color=RGB(255,255,255),则
。很好。谢谢