Excel打开或保存时要触发的公式

我在Excel中有几个定制的(VBA)公式。 例子是

= isfileExists(c3) = isReadOnly(c3) 

有多个调用这些函数(200 /列)

由于涉及到沉重的VBA,这些文件正在减慢文件速度。 我只想在用户打开文件或只保存文件时运行上述公式!

我怎样才能继续做到这一点,而不触摸“启用/禁用自动计算”? (请注意,我知道如何编写事件函数,但我正在寻找一个想法放在他们/任何地方)

我的想法是,添加一个' infront公式,当用户打开/保存, ' (撇号)将被删除使用macros; 因此公式会计算。 还有更简单的build议吗?

非常感谢!

您可以将公式结果caching在Global(或函数内部的Static)字典对象中:一旦您可以使用caching的结果而不是重复文件检查,就检查了文件)

 Public Function ExpensiveCheck(fpath As String) As Boolean Static dict As Object, ans As Boolean 'create the dictionary if not already created If dict Is Nothing Then Set dict = CreateObject("scripting.dictionary") End If If Not dict.exists(fpath) Then ans = (Dir(fpath, vbNormal) <> "") 'do your checking here dict.Add fpath, ans End If ExpensiveCheck = dict(fpath) End Function 

当会话结束时,dict将会丢失,因此公式应该总是在您打开文件时刷新caching。

缺点是如果你想在被检查文件发生一些变化之后更新输出,你可能需要一些机制来清除/刷新caching。

如果你不希望你的UDF和其余的工作表单元格一起计算,那么你不需要UDF; 使他们Private ,或坚持Option Private Module在他们声明的标准模块的顶部,使他们不可用作自定义工作表函数。

然后处理Workbook.OpenWorkbook.BeforeSave事件,并让这两个处理程序调用一些Private Sub ,它负责写入您目前拥有这些UDF的单元格。

这样,只有在工作簿打开并保存之前,才能计算这些值。

产生磁盘I / O的UDF并不理想:对macros进行处理。