我有一个包含一些合并单元格的表格,我希望通过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
表格如下:
应该是这样的:
提前谢谢!
答案 0 :(得分:5)
我相信你正在寻找类似的东西。
我们添加一个布尔标志,以便我们可以使用它来回翻转(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
结果:
修改强>
这是您的代码更新。
我还清理了以前的代码。
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
评论说明:
cf = Not cf
只是以下的快捷方式:
If cf = True Then
cf = False
Else
cf = True
End If
让我们设置cf = False
并完成它。
cf = Not False
= True
cf = Not True
= False
我希望这个解释是足够的:)
这样做的原因是我们不能MOD
行,因为它可能会因变量而发生变化。
答案 1 :(得分:2)
Dim Zeile As Double
Dim WhiteColor As Boolean
WhiteColor = False
Dim RangeSize As Byte
Range("A1").Select
Selection.SpecialCells(xlCellTypeLastCell).Select
Zeile = ActiveCell.Row
Range("A1").Select
Do Until ActiveCell.Row = Zeile + 1
RangeSize = Selection.Count
If WhiteColor = False Then
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row + RangeSize - 1, 8)).Interior.Color = RGB(191, 191, 191)
WhiteColor = True
Else
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row + RangeSize - 1, 8)).Interior.Color = vbWhite
WhiteColor = False
End If
ActiveCell.Offset(1, 0).Select
Loop
我尝试了上面的代码,它对我有用: