我编写了一个 UDF 来计算特定颜色和特定线条样式的单元格,我发布了整个函数:
Function CountTime(rData As Range, cellRefColor As Range) As Variant
Dim indRefColor As Long
Dim cellCurrent As Range
Dim cntRes As Variant
Application.Volatile
cntRes = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Interior.Color Then
cntRes = cntRes + 1
End If
If cellCurrent.Borders(xlDiagonalUp).LineStyle <> xlNone Then
cntRes = cntRes + 0.5
End If
Next cellCurrent
CountTime = cntRes
End Function
现在,我遇到的问题是,当其中一个单元格之一时,公式不会自动计算rData
它的颜色或线条属性是否已更改。
我已经添加了Application.Volatile
,我还尝试通过Worksheet_Change
sub,但是这不起作用,因为 Excel 似乎不考虑更改颜色来更改单元格/工作表。
当用户更改单元格的颜色或线条属性时,有什么方法可以使单元格自动计算和更新rData
?
编辑——已解决
非常感谢 ignotus,ChangeSelection 解决方法足以满足我的目的。没想到这一点。
而且背景信息也很方便,非常感谢。
我认为这是不可能的,但一个相当公平的解决方案是在离开单元格或更改它时重新计算:
Private Sub Worksheet_Change(ByVal Target As Range)
Me.Calculate
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub
或者作为替代方案,在工作表上放置一个按钮来调用Me.Calculate
仅供参考:什么是Me
? Source http://forum.chandoo.org/threads/proper-use-of-me-in-vba.14980/
Me
指的是代码“所在”的父对象。如果您在 Sheet 模块中编写,则Me
将参考该特定表。
Using Me
很方便,因为我们不必担心工作表名称的更改,而且它也使未来的代码读者更容易,因为他们不必记住“主用户窗体”是我们当前正在处理的用户窗体。您可以将相同的方法应用于Me
如果您提供全名,您将能够应用于该对象。
内Sheet1 module
,以下几行的用途相同:
Worksheets("Sheet1").Range("A1").Select
Me.Range("A1").Select
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)