如何计算使用VBA的任何背景颜色的所有单元格?

我正在尝试简单地计算具有背景色的列中的所有单元格。 任何颜色都不重要。 我用这个代码使用了一个模块:

Function CountCcolor(range_data As Range) As Long Dim datax As Range For Each datax In range_data If datax.Interior.ColorIndex <> xlNone Then CountCcolor = CountCcolor + 1 End If Next datax End Function 

这在我第一次使用这个公式的时候效果很好。 它不再反应,当我改变填写表格。 每当用户编辑一个单元格时,我怎样才能优化这个function?

您可以使用下面的代码在相关的Worksheet_Change事件中刷新整个工作簿:

 Private Sub Worksheet_Change(ByVal Target As Range) Application.Calculation = xlCalculationManual Application.Calculation = xlCalculationAutomatic End Sub 

没有事件是由填充单元触发的。 因此,我build议下面的工作表macros

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Sh.Calculate End Sub 

除了你的macros。 推理:在填充范围之后,您将(最终)select该表单上的其他单元格。 此时,重新计算总和。 这是不理想的,因为它没有更新, 你select的范围,它可能是计算密集型的。