我有一个小小的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 在参数中被引用。但在运行时,超链接集合尚未更新。而且,如果您有一个断点,您可以观察到光标仍然在公式栏中。也许这与超链接的存储和引用方式有关。