2012-05-24 35 views
0

我有一个关于Excel VBA中的宏的问题。 我想在Excel有色细胞的数量,所以我写了下面的代码:VBA - 需要仅在过滤后报告可见单元格的单元格格式

Application.ScreenUpdating = False 
x = Range("D2:Y46").Select 

For Each d In Selection 
    d.Select 
    If Selection.Interior.Color = 15773696 Then 
     Count = Count + 1 
    End If 
Next 

Application.ScreenUpdating = True 
Range("C53").Select 
Selection = Count 

它工作正常,但也有一些行隐藏,因为标题过滤器。

当我使用上面的代码时,它也显示隐藏单元格的输出,但我不希望结果包含隐藏的单元格。我只需要筛选标题后的可见单元格的结果。

有没有办法做到这一点?

+4

请参阅此链接http://support.microsoft.com/kb/150363。或者,你也可以使用'Range(“D2:Y46”)。SpecialCells(xlCellTypeVisible)';) –

回答

1

我修改了你的代码来完成你的要求,但也提高了效率;在做某事之前,你通常不需要使用Select单元格。

Option Explicit 

Sub CountCellsByColor() 

Dim d As Range, x As Range 
Dim Count As Integer 
Application.ScreenUpdating = False 

Set x = Range("D2:Y46") 

For Each d In x 
    If d.Interior.Color = 15773696 And Not d.Rows.Hidden And Not d.Columns.Hidden Then 
     Count = Count + 1 
    End If 
Next 

Application.ScreenUpdating = True 
Range("C53").Value = Count 


End Sub 

Not d.Rows.Hidden检查将返回True如果该行还没有被过滤掉(隐藏)。

+1

+1也可以检查隐藏列,以防万一...如果d.Interior.Color = 15773696而不是d.Columns.Hidden而不是d.Rows.Hidden – datatoo

+0

@datatoo有效的点...纠正我的答案。 – Gaffi

+1

我可能会提到,我测试了@Gaffi提供的内容,并首先将范围内的interior.color设置为15773696,但实际上显示为16763904.因此,如果您在另一台机器上测试interior.color,代码可能会没有正确检测硬编码的颜色。 – datatoo

相关问题