У меня есть крошечный 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

в ячейке А1 я получаю:

Теперь, если я выберу А1, нажмем в строке формул и сменим cnn на fox, B1 не изменится!

Я должен повторно выбрать A1, коснитесь F2, а затем Enter.

Как это исправить ??

(если это имеет значение, я использую Excel 2007 на машине с Win 7)

1 ответ1

2

Одним из обходных путей может быть принудительное вычисление с использованием события изменения рабочего листа.

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

И, конечно же, вы можете удалить Application.Volatile от UDF.

UDF, кажется, вызван изменением A1, которое ожидается, так как A1 указывается в аргументе. Но на момент запуска коллекция Hyperlinks еще не обновлялась. И, если у вас есть точка останова, вы можете заметить, что курсор все еще находится в строке формул. Возможно, это связано со способом хранения и ссылки на гиперссылки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .