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),则
。很好。谢谢