创建格式更改时运行的易失性Excel函数
我不熟悉创建Excel函数,我需要创建一个函数,该函数接受一系列单元格,并计算未删除单元格的值之和创建格式更改时运行的易失性Excel函数,excel,function,Excel,Function,我不熟悉创建Excel函数,我需要创建一个函数,该函数接受一系列单元格,并计算未删除单元格的值之和 Function SUMNOTSTRIKE(rng As Range) Dim cell As Range For Each cell In rng If Not (cell.Font.StrikeThrough) Then SUMNOTSTRIKE = SUMNOTSTRIKE + cell.Value End If
Function SUMNOTSTRIKE(rng As Range)
Dim cell As Range
For Each cell In rng
If Not (cell.Font.StrikeThrough) Then
SUMNOTSTRIKE = SUMNOTSTRIKE + cell.Value
End If
Next cell
End Function
此功能工作正常,但我不理解为什么在穿透或删除穿透时结果不会自动刷新。我必须再次执行该函数
我读了一些关于
Application.Volatile
,但这只适用于值更改。我需要在格式更改时触发该功能。在我的评论上展开。如果你加上
Application.Volatile
到您的函数定义(按惯例,作为第一行),然后在工作表的代码模块中:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.Calculate
End Sub
然后,只要更改选择,所有易失性函数都将重新计算。如果只更改选定单元格的删除线并保持该单元格处于选定状态,则不会进行任何重新计算,但一旦移动到其他单元格,函数可能会更新
作为警告,始终触发
应用程序.Calculate
可能会减慢Excel的运行速度。根据您的情况,这可能不是一个适当的解决方案。这是John优秀建议的一个变体。假设我们在A1到A100中有数据
我们可以使用双击事件来同时执行以下操作:
- 划过单元格的文本
- 强迫重新计算
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
Cancel = True
Target.Font.Strikethrough = True
Application.CalculateFull
End Sub
双击一个感兴趣的单元格将同时点击该单元格并强制重新计算
由于它是工作表代码,因此安装和自动使用非常容易:
必须启用宏才能使其工作 我认为这是不可能的。您必须找到一个代理(例如,编写一个以选择更改事件为目标的事件处理程序)或者——也许每隔几秒钟自动运行一次您的函数。明白了,谢谢!!它不起作用。该私有函数应在特定位置应用,或自动执行?函数
SUMNOTSTRIKE
应位于标准代码模块中(由VBA编辑器中的Insert>module
创建的模块)对于包含公式的工作表,工作表\u selection change
子项应位于编辑器中已自动存在的工作表代码模块中。我测试了它,它应该工作的描述。THX很多工作!!我喜欢这种方法。它一箭双雕,因为通过通常的用户界面添加删除线有点烦人。