DaZ*_*aZn 5 excel vba excel-vba
我有一个包含一些合并单元格的表格,我希望通过VBA代码从第一行开始为每一行着色.
多数民众赞成我是如何尝试的:
Sub test()
Dim Zeile As Long
With Tabelle2
For Zeile = 1 To .UsedRange(Rows.Count).End(xlUp).Row Step 2
.Range(.Cells(Zeile, 1),.Cells(Zeile,8)).Interior.ColorIndex= 15
Next
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
该表如下所示:
应该是这样的:
先感谢您!
我相信你正在寻找这样的东西.
我们添加一个布尔标志,以便我们可以使用它来回翻转(cf).
我们可以Resize的MergeArea,而不是细胞值本身.
如果有合并的单元格,则会考虑该区域 - 如果没有,则不会.
然后,将潜在的MergeArea细胞计数添加到行计数器(Zeile).
Sub ColorEveryOther()
Dim cf As Boolean
Dim Zeile As Long
Dim lr As Long
lr = ActiveSheet.UsedRange.Rows.CountLarge
For Zeile = 1 To lr
If Not cf Then Range("A" & Zeile).MergeArea.Resize(, 8).Interior.ColorIndex = 15
Zeile = (Zeile + Range("A" & Zeile).MergeArea.Cells.CountLarge) - 1
cf = Not cf
Next Zeile
End Sub
Run Code Online (Sandbox Code Playgroud)
结果:
编辑:
这是您的代码更新.
我还清理了以前的代码.
Sub test()
Dim Zeile As Long
Dim cf As Boolean
With Tabelle2
For Zeile = 1 To .UsedRange(Rows.Count).End(xlUp).Row
If cf = False Then .Cells(Zeile, 1).MergeArea.Resize(, 8).Interior.ColorIndex = 15
Zeile = (Zeile + .Cells(Zeile, 1).MergeArea.Cells.CountLarge) - 1
cf = Not cf
Next
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
评论解释:
cf = Not cf 只是一个捷径:
If cf = True Then
cf = False
Else
cf = True
End If
Run Code Online (Sandbox Code Playgroud)
让我们设置cf = False并完成它.
cf = Not False = True
cf = Not True = False
我希望解释是足够的:)
这样做的原因是我们不能只是MODRow,因为它可能会因变量而变化.