宏运行两次时,每隔一行着色会出现问题

时间:2019-08-02 12:13:07

标签: excel vba

我有一个宏,每隔一行阴影。当我两次运行子程序时,它会遮盖每一行。我尝试的新代码继续使“ B”列的阴影消失,然后为其余列的每一行着色。

Sub ShadeEveryOtherRow()

Dim LastRow As Long
Dim Wa As Worksheet
Dim a As Integer

Set Wa = ThisWorkbook.Sheets("Analysis")
With Wa
    For a = 2 To 15
        LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastRow Step 2
            .Cells(i, a).Interior.Color = VBA.RGB(221, 221, 221)
        Next i
    Next a

End With

End Sub

尝试将其添加到i =语句上方

If i = 3 Or 5 Or 7 Or 9 Then
    Exit Sub
End If

2 个答案:

答案 0 :(得分:2)

方法1-VBA:

Option Explicit

Sub ShadeEveryOtherRow()

    Dim LastRow As Long, i As Long
    Dim Wa As Worksheet

    Set Wa = ThisWorkbook.Sheets("Analysis")

    With Wa

        LastRow = .Cells(Rows.Count, "A").End(xlUp).Row

        For i = 2 To LastRow Step 2
            .Range(Cells(i, 2), Cells(i, 15)).Interior.Color = VBA.RGB(221, 221, 221)
        Next i

    End With

End Sub

方法2-将范围转换为表格

  1. 选择整个范围-主页标签-样式部分-设置为表格格式-选择一种样式

答案 1 :(得分:1)

您可以使用条件格式来代替宏。

添加条件格式=AND(MOD(ROW(),2)=0, COUNTA($A:$A)>=ROW())并设置单元格的格式,以便它们填充您的RGB值。

enter image description here enter image description here

然后将其应用于您的范围$B:$O

enter image description here

为您提供结果 enter image description here

如果添加/删除了行,这将自动更新,而您不必每次都手动运行它。如果A列中没有任何空白单元格,这将起作用,否则,您将不得不更改公式以找到列的最后一行

如果您想使用宏方式,我将使用以下类似的方法修改代码以设置偶数和奇数行

Sub ShadeEveryOtherRow()
    Dim LastRow As Long
    Dim Wa As Worksheet
    Dim i As Long

    Set Wa = ThisWorkbook.Sheets("Analysis")
    With Wa
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 1 To LastRow
            With .Range(.Cells(i, 2), .Cells(i, 15))
                If i Mod 2 = 0 Then
                    .Interior.Color = VBA.RGB(221, 221, 221)
                Else
                    .Interior.Color = xlNone
                End If
            End With
        Next i
    End With
End Sub

这将确保删除所有奇数行。但是,我个人更喜欢条件格式化路线。