我的电子表格中有一堆不同的UDF(不易变形),我想知道是否可以使用另一个名为“Refresh”的UDF来刷新工作表上使用的所有UDF?
由于涉及的数据量很多,我不想制作任何我的UDF标题,但是有一个可以刷新它们的按钮可以解决我的问题,任何帮助/代码都将不胜感激。
这是UDF:
Function HexCode(cell As Range) As String
HexCode = Right("000000" & Hex(cell.Interior.Color), 6)
End Function
答案 0 :(得分:1)
识别包含UDF的单元格并重新计算它们?这很简单:只需使用下面的RefreshUDF()宏。
从函数中刷新这些单元格,作为工作表“计算树”的一部分在工作表上重新计算?的禁止的<!/强>
我已将RefreshUDF编码为子例程,因为Excel不允许您这样做:单元格中的函数不能通过除了将单元格自身的值传递到计算树的依赖关系链之外的任何方法来更改其他单元格的值。 / p>
...除了您可以捕获WorksheetChange()事件并使用它来读取目标单元格并运行RefreshUDF。注意这一点,你可能会发现它反复运行(或者更糟糕的是,有一个循环),如果你正在改变一个'先例'细胞将值输入目标细胞。
下面的代码会很慢:有几种可用的优化,从设置计算开始到手动,这样每个单元格刷新都不会重新计算整个工作表;但它会让你开始:
Public Sub RefreshUDF(UDFname as string, Optional wsh as Excel.Worksheet)明显的要点:
Dim myCell As Excel.Range
If wsh Is Nothing Then Set wsh = ActiveSheet End If
For Each myCell In wsh.UsedRange If IsError(myCell) Then ' No action Else If Instr(1, myCell.Formula, UDFname & "(", vbTextCompare) Then myCell.Calculate End If End If Next myCell
End Sub
首先,您可能有另一个具有非常相似名称的函数 - “ExtendedHexCode”而不是“HexCode” - 此函数将重新计算它们。
其次,这不会很好地处理合并的单元格和数组公式。
第三,如果你真的对单元格的内部颜色感兴趣,你可能会惊讶地听到条件格式化不改变这个属性 - 单元格改变颜色,但格式条件的显示颜色不是同一属性作为Interior.Color。
另外:我要问 - 你抬头看Application.Volatile = False
了吗?这应该是你的函数的第一行......你可能会发现具有条件格式的单元格是易变的,无论你做什么。