我想在表格末尾添加一行,并自动替换行的颜色。我这里有代码,但行未添加到表中,而是添加到了活动表中。我不知道如何正确遍历表中的行。
Private Sub CommandButton2_Click()
Dim lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).row
Rows(lr + 1).Insert
Dim lrow As Excel.ListRow
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("WorkZone")
For Each lrow In tbl.ListRows
If Cells.Interior.Color = RGB(0, 0, 0) And Cells.row Mod 2 = 0 Then
Cells.Interior.Color = RGB(242, 242, 242)
End If
Next lrow
End Sub
答案 0 :(得分:2)
我建议不要在For Each
循环上循环,因为在索引上看到要更新的行更为明显。
通过仅指定 .Cells
,即可指定工作表中的所有单元格!为了解决这个问题,我通常建议将其更改为.cells( <row>, <column> ).Interior ...
,但是由于您实际上只查看表中的一行,因此可以使用ListObects.ListRows( <row> )
来访问表中的某些行。
我还更改了将行添加到表末尾的方式,因为对我来说,使用内置的ListRows.Add
函数更有意义,因为像上面一样,您实际上只是想访问表而不是整个表。
Private Sub CommandButton2_Click()
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("WorkZone")
tbl.ListRows.Add (tbl.ListRows.count + 1)
Dim i As Long
For i = 1 To tbl.ListRows.count
With tbl.ListRows(i).Range
If i Mod 2 <> 0 Then
.Interior.color = RGB(242, 242, 242)
End If
End With
Next i
End Sub
答案 1 :(得分:2)
Sub AlternateRows()
Dim lst As ListObject, lstRow As ListRow
Set lst = Sheets("Sheet1").ListObjects("Table1")
lst.ListRows.Add '//Add row
For Each lstRow In lst.ListRows
lstRow.Range.Interior.Color = _
IIf(lstRow.Index Mod 2 = 0, vbRed, vbGreen) '//Color rows
Next
End Sub