我有一个宏,每隔一行阴影。当我两次运行子程序时,它会遮盖每一行。我尝试的新代码继续使“ 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
答案 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)
您可以使用条件格式来代替宏。
添加条件格式=AND(MOD(ROW(),2)=0, COUNTA($A:$A)>=ROW())
并设置单元格的格式,以便它们填充您的RGB
值。
然后将其应用于您的范围$B:$O
如果添加/删除了行,这将自动更新,而您不必每次都手动运行它。如果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
这将确保删除所有奇数行。但是,我个人更喜欢条件格式化路线。