Melhorando a Volatilidade de uma UDF

0

Eu tenho um minúsculo UDF () que retorna o Address :

de um hiperlink
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

Então, se eu colocar:

http://www.cnn.com

na célula A1 , recebo:

Agora, se eu selecionar A1 , clique na barra de fórmulas e mude cnn para fox , B1 não muda!

Eu tenho que re-Selecionar A1 , tocar F2 e então Enter .

Como eu corrijo isso? ?

(se for importante, estou usando o Excel 2007 em uma máquina Win 7)

    
por Gary's Student 01.10.2016 / 01:33

1 resposta

2

Uma solução alternativa seria forçar um cálculo usando um evento de alteração da planilha.

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

E, claro, você pode remover o Application.Volatile do UDF.

O UDF parece ser acionado pela mudança em A1, que é esperada desde que A1 seja referenciado no argumento. Mas, no momento em que é executado, a coleção Hyperlinks ainda não foi atualizada. E, se você tiver um ponto de interrupção, poderá observar que o cursor ainda está na barra de fórmulas. Talvez tenha a ver com o modo como os hiperlinks são armazenados e referenciados.

    
por 01.10.2016 / 15:01