创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议的一个变种。 假设我们有A1A100的数据。

我们可以使用双击事件来:

  • 通过细胞的文本
  • 迫使重新计算

在工作表代码区域中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 

双击感兴趣的单元格将会触发它并强制重新计算。

因为它是工作表代码,所以安装和自动使用非常简单:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. 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必须启用这个工作!