我想遍历一个excel表,并用颜色标记所有行,找到一个空单元格。这很有效。
但是我想现在指定它应该只搜索的列。 这是实际的代码:
Sub Mark_Empty()
Dim myTable As ListObject
Dim myArray As Variant
Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.DataBodyRange
For Each cell In myArray
If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
Next cell
End Sub
答案 0 :(得分:1)
您可以使用Set myArray = myTable.ListColumns(2).Range
选择特定列而不是整个表格。将2
更改为您需要的任何列。
Sub Mark_Empty()
Dim myTable As ListObject
Dim myArray As Variant
Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.ListColumns(2).Range
For Each cell In myArray
If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
Next cell
End Sub
修改强>
我回到原始解决方案迭代每个单元格,然后使用Case
语句检查列号。只有当列号与IF
中定义的列号相匹配时,才会执行您的初始Case
。
我并不认为它是最好的解决方案,但会做你需要的。
Sub Mark_Empty()
Dim myTable As ListObject
Dim myArray As Variant
Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.DataBodyRange
For Each cell In myArray
Select Case cell.Column
Case 2, 4, 5
If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
End Select
Next cell
End Sub
答案 1 :(得分:0)
属性DataBodyRange
会返回Range
,因此您可以取出Range
并根据需要进一步限制它。
请注意,您要将返回值分配给myArray
,Variant
,因此您应该在使用我的建议之前解决此问题。
另外,ListObject
还有其他有用的属性:
ListColumns,返回“表示ListObject对象中所有列的集合”。
Range,返回“一个Range对象,表示指定列表对象的范围”。
在不了解您希望如何限制使用Range
的情况下,可以说这一切。