Excel按颜色VBA计数不随更改而更新?
我在Excel中有一些VBA,它可以计算一系列单元格是否包含参考单元格的颜色,效果很好。但改变该范围内任何单元格的颜色都不会更新计数的总数 理想情况下,我希望代码更新与引用匹配的彩色单元格的数量,并在更改单元格颜色时更新计数的总和 我曾尝试在If语句中添加Else语句,这样,如果某个单元格是“空白”的,或者使用“paint pot”按钮填充单元格时颜色被“清除”,它将扣除一个数字,但这不起作用Excel按颜色VBA计数不随更改而更新?,excel,vba,Excel,Vba,我在Excel中有一些VBA,它可以计算一系列单元格是否包含参考单元格的颜色,效果很好。但改变该范围内任何单元格的颜色都不会更新计数的总数 理想情况下,我希望代码更新与引用匹配的彩色单元格的数量,并在更改单元格颜色时更新计数的总和 我曾尝试在If语句中添加Else语句,这样,如果某个单元格是“空白”的,或者使用“paint pot”按钮填充单元格时颜色被“清除”,它将扣除一个数字,但这不起作用 Sub Colourif() End Sub Function CountColorIf(rSamp
Sub Colourif()
End Sub
Function CountColorIf(rSample As Range, rArea As Range) As Long
Dim rAreaCell As Range
Dim lMatchColor As Long
Dim lCounter As Long
lMatchColor = rSample.Interior.Color
For Each rAreaCell In rArea
If rAreaCell.Interior.Color = lMatchColor Then
lCounter = lCounter + 1
End If
Next rAreaCell
CountColorIf = lCounter
End Function
如果我使用“paint pot”图标更改填充范围中的一个单元格,使其显示“clear”(清除),则不会更改填充了参考颜色的单元格数
如果您能提供一些建议,告诉我如何确保当单元格填充从参考颜色更改时,此代码自动更新总和,我将不胜感激。不幸的是,格式更改似乎不会触发任何标准Excel事件处理程序。接近目标的是工作表的选择更改事件。在工作表的代码模块中,输入:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub
然后更改CountColorIf
的定义,使其开始:
Function CountColorIf(rSample As Range, rArea As Range) As Long
Application.Volatile
然后,如果某个单元格的颜色发生了更改,则当您移动到另一个单元格时,计数就会更新
另一个想法是使用Application.OnTime
运行sub,每隔几秒钟触发重新计票,但这仍然不会导致在您更改颜色后立即更新
在编辑时由于没有可针对的FormatChange
事件,因此使用SelectionChange
作为代理并不理想。您在评论中提到的一个问题是,这将在复制粘贴行为的中间着火,在这种情况下,所得的工作表计算将从复制粘贴模式中获得Excel。解决该特定问题的一个方法是将代码更改为:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = 0 Then Me.Calculate
End Sub
如果此代码是供您个人使用的,一个简单的解决方案是保持
Application.Volatile
,但要完全摆脱事件处理程序,养成在更改单元格颜色时点击F9
的习惯。这会将重新计算限制在您需要的时候,而您需要付出所需的代价。您是否希望在更改单元格或更改单元格并重新运行代码时发生更改?如果子颜色有什么意义?它没有可执行语句。在任何情况下,更改单元格颜色都不会触发工作表计算,这可能是您的问题。@Gareth-我确实希望在单元格更改时进行更改,而不必重新运行代码,就像标准Excel公式一样,我想@John,我错了,我错把它放进去了,或者至少忘了删除此子项。所以我需要触发工作表计算?我将对此进行调查,谢谢你的评论谢谢你John,我将尝试使用此代码,看看会发生什么,然后报告。嗨John,这非常有效。我将工作表\u SelectionChange sub添加到工作表中,并更新了模块代码,现在一切正常!!!@约翰,我后悔这个解决方案复制粘贴不再有效?!?我选择要复制的单元格,移动到另一个单元格,现在粘贴不可用?任何建议都将不胜感激:-)@MarkHutchins问得好。请参见编辑。请注意,使用编辑功能时,如果您都更改了单元格的颜色,然后立即复制它,则在粘贴之后才会重新计算该函数。感谢您的更新。我确实尝试了If Application.CutCopyMode=False,但在尝试“撤消”或Ctrl+Z时Excel崩溃了!