创build在格式更改时运行的易变的Excel函数
我是创buildExcel函数的新手,我需要创build一个函数来获取一系列单元格,并计算不是删除线的单元格的值的总和。
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
这个函数可以正常工作,但是我不明白为什么当通过或去除通过时,结果不会自动刷新。 我必须再次执行该function。
我读了一些关于Application.Volatile
,但这只适用于价值变化。 我需要在格式更改时触发该function。
扩大我的评论。 如果你添加
Application.Volatile
到你的函数定义(按照惯例,作为第一行),然后在工作表的代码模块中有:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.Calculate End Sub
然后任何时候改变select,所有易失性函数将被重新计算。 如果您只是更改所选单元格的删除线并保持该单元格被选中,将不会进行任何重新计算,但是当您移动到另一个单元格时,您的function可能会更新。
作为一个警告,触发Application.Calculate
所有的时间可以减慢Excel。 根据你的情况,这可能不是一个适当的解决scheme。
这是约翰极好的build议的一个变种。 假设我们有A1到A100的数据。
我们可以使用双击事件来:
- 通过细胞的文本
- 迫使重新计算
在工作表代码区域中input以下事件macros:
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
双击感兴趣的单元格将会触发它并强制重新计算。
因为它是工作表代码,所以安装和自动使用非常简单:
- 右键单击Excel窗口底部附近的选项卡名称
- select查看代码 – 这会popup一个VBE窗口
- 粘贴东西,closuresVBE窗口
如果您有任何疑问,请先在试用工作表上尝试。
如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除macros:
- 调出上面的VBE窗口
- 清除代码
- closuresVBE窗口
要了解有关macros的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件macros(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
macros必须启用这个工作!