改善 UDF 的波动性

改善 UDF 的波动性

我有一个小小的UDF()返回超链接的Address

Public Function hyperAdd(r As Range) As String
    Application.Volatile

    hyperAdd = "no hyperlink"
    If r.Hyperlinks.Count = 0 Then Exit Function
    hyperAdd = r.Hyperlinks(1).Address
End Function

所以如果我输入:

http://www.cnn.com

在细胞内A1,我得到:

在此处输入图片描述

现在如果我选择A1,单击公式栏,然后更改美国有线电视新闻网狐狸B1没有变化!

我必须重新选择A1,触摸F2然后Enter

我该如何修复此问题??

(如果有关系的话,我在 Win 7 机器上使用 Excel 2007)

答案1

一种解决方法是使用工作表更改事件强制进行计算。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Hyperlinks.Count > 0 Then Application.CalculateFull
End Sub

当然,您可以Application.Volatile从 UDF 中删除。

UDF 似乎是由 A1 中的变化触发的,这是意料之中的,因为 A1 在参数中被引用。但在运行时,超链接集合尚未更新。而且,如果您有一个断点,您可以观察到光标仍然在公式栏中。也许这与超链接的存储和引用方式有关。

相关内容