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.Open
和Workbook.BeforeSave
事件,并让这两个处理程序调用一些Private Sub
,它负责写入您目前拥有这些UDF的单元格。
这样,只有在工作簿打开并保存之前,才能计算这些值。
产生磁盘I / O的UDF并不理想:对macros进行处理。