Excel VBAmacros可以刷新UDF,而不会使其变得不稳定

我有一堆不同的UDF在我的电子表格(这是不稳定的),我想知道是否有可能有另一个名为“刷新”的UDF将刷新在工作表上使用的所有UDF?

我不希望做任何我的UDF volitle由于涉及的数据量,但有一个button,可以刷新他们将解决我的问题,任何帮助/代码将不胜感激。

这是UDF:

Function HexCode(cell As Range) As String HexCode = Right("000000" & Hex(cell.Interior.Color), 6) End Function 

确定包含您的UDF的单元格并重新计算它们? 这很简单:只需使用下面的RefreshUDF()macros。

刷新函数中的那些单元格,作为表单“计算树”的一部分在表单上重新计算? 严禁使用!

我已经将RefreshUDF编码为子例程,因为Excel不会让您这样做:单元格中的函数不能通过将单元格自身的值传递到计算树的依赖关系链中的任何方法来更改其他单元格的值。

…除了可以捕获WorksheetChange()事件并使用它读取目标单元格并运行RefreshUDF。 注意这一点,如果你正在改变一个“先例”的细胞摄食值进入目标细胞,你可能会发现它反复运行(或者更糟的是,有一个循环)。

下面的代码将很慢:有几个优化可用,从设置计算到手动开始,以便每个单元格刷新不重新计算整个表; 但它会让你开始:

 Public Sub RefreshUDF(UDFname as string,可选wsh as Excel.Worksheet) 
Dim myCell As Excel.Range

如果wsh没有那么 设置wsh = ActiveSheet 万一
对于每个myCell在wsh.UsedRange 如果IsError(myCell)那么 “没有行动 其他 如果Instr(1,myCell.Formula,UDFname&“(”,vbTextCompare)那么 myCell.Calculate 万一 万一 下一个myCell
结束小组

显而易见的一点:

首先,你可能有另一个函数有一个非常相似的名字 – 'ExtendedHexCode',而不是'HexCode' – 这个函数会重新计算它们。

其次,这不会很好地处理合并的单元格和数组公式。

第三,如果你真的对单元格的内部颜色感兴趣,你可能会惊讶地发现这个属性没有被条件格式所改变 – 单元格改变了颜色,但是格式条件的显示颜色和内部属性不是一样的。颜色。

另外:我必须问 – 你抬起头了Application.Volatile = False ? 这应该是你的函数的第一行…你可能会发现,使用条件格式的单元格是不稳定的,不pipe你做什么。