2012-05-24 69 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

相關問題