从A5开始,更改范围的Excel 2010 VBA交替行颜色

时间:2014-05-17 12:56:24

标签: excel vba excel-vba

在我的Excel工作表中,我需要在特定范围内应用替代颜色,这些颜色始终在A5中开始并在X列中结束,但每次运行报表时行数都会更改。

在第一个范围的末尾,我需要向下移动2行并将交替的行颜色应用到4行。

我在stackoverflow上找到了以下代码,但到目前为止我只能获得要突出显示的行A5。

Sub AlternateRowColors()
    Dim LastRow As Long

        'LastRow = Range("A1").End(xlDown) 'Row From original code

    'Find the last used row in a Column: column A in this example
    'Dim LastRow As Long
    With ActiveSheet
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

End With

For Each Cell In Range("A5:x" & LastRow) ''change range accordingly
    If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
        Cell.Interior.ColorIndex = 15 ''color to preference
    Else
        Cell.Interior.ColorIndex = xlNone ''color to preference or remove
    End If
Next Cell

End Sub

我一直试图解决这个问题两天,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你的问题,但它听起来就好像它与一个不准确的LastRow有关。请尝试使用此方法。我已经注释掉了你当前的LastRow方法并输入了一个新方法。如果您想要工作表中的绝对最后一行,无论哪一列包含最后一项数据,那么这将对您有所帮助:

Sub AlternateRowColors()
    Dim LastRow As Long

    With ActiveSheet
        'LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    End With

For Each Cell In Range("A5:x" & LastRow) ''change range accordingly
    If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
        Cell.Interior.ColorIndex = 15 ''color to preference
    Else
        Cell.Interior.ColorIndex = xlNone ''color to preference or remove
    End If
Next Cell
End Sub

其他编辑:您询问是否在LastRow之前停止突出显示8行。我们可以在建立之后更改LastRow的值。只需在代码中间添加以下两行(在End With之后,在For Each循环之前):

LastRow = LastRow - 8
If LastRow < 5 Then LastRow = 5

第一行更改LastRow变量;第二行检查LastRow值现在是否小于我们预期的起始行(第5行)。如果它更小,则将其更改为5,因为5是最小值(从第5行开始,在第5行或更高版本结束)。


附加编辑2:你说“LastRow”下面的行是一个合并的行,不会突出显示,但接下来的4行将有不同的突出显示颜色...试试下面的代码。主要的补充是代码的最后一行,它为单个范围着色,如您所描述的四行。但是要使用这行代码,我必须引用真正的LastRow,所以我不得不改变脚本的中间位置 - 它现在创建一个新的'LastRowNew',用于着色备用行,就像之前一样。 / p>

希望这就是你现在所需要的;但如果你的需要不确切,你应该能够根据自己的要求进行调整。希望这有帮助!

Sub AlternateRowColors()
    Dim LastRow As Long

    With ActiveSheet
        'LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    End With

    LastRowNew = LastRow - 8
    If LastRowNew < 5 Then LastRowNew = 5

    For Each Cell In Range("A5:x" & LastRowNew) ''change range accordingly
        If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
            Cell.Interior.ColorIndex = 15 ''color to preference
        Else
            Cell.Interior.ColorIndex = xlNone ''color to preference or remove
        End If
    Next Cell

    Range("A" & (LastRow + 2), Range("X" & (LastRow + 5))).Interior.ColorIndex = 45

End Sub