Erros do Excel Macro Hyperlink.Add

Erros do Excel Macro Hyperlink.Add

Sou relativamente novo no código VBA do Excel, então, perdoe-me se a resposta for simples (espero que geralmente seja). Estou usando o Excel 2010, para referência. Estou tentando realizar o seguinte, com o script seguinte:

Se uma sequência numérica (qualquer valor) for inserida em qualquer célula da Coluna D, preciso convertê-la automaticamente em um Hyerlink que anexaria uma determinada sequência de endereço antes do valor da célula de destino e cuspiria um nome amigável que incluísse a célula valor.

Em outras palavras, aqui está o exemplo de função do Excel que estou tentando replicar com uma macro:

=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")

Ou, mais especificamente (deveria pintar uma imagem mais clara):

=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")

293136é o exemplo de sequência numérica que desejo que um usuário possa digitar em qualquer célula da coluna D. Quando o fizerem, desejo que essa célula seja convertida em um hiperlink, usando a sequência numérica como dados base, anexando o restante do URL à esquerda do valor da célula e, em seguida, crie um nome amigável que concatene "Ticket #" com a sequência numérica do valor da célula. Não quero que meus usuários tenham que aprender fórmulas do Excel para ter um link de referência ou perder tempo tendo que copiar as duas extremidades da função para envolver os dados da célula.

Aqui está o que tenho até agora no VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeLimit As Range
Set rangeLimit = Range("D:D")
If Not Intersect(rangeLimit, Target) Is Nothing Then
    If Target <> "" Then
         Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & c.Value, TextToDisplay:="Ticket #" & c.Value, Target.Value
    End If
End If
End Sub

Aqui estão os problemas que estou enfrentando:

1.) Se eu tentar executar a fórmula como está, recebo um erro de compilação. 2.) Se eu remover o , Target.Valuefinal da string do hiperlink, recebo um erro 424, erro "Objeto necessário".

O que estou fazendo de errado e/ou como posso criar uma macro para executar a função desejada? Uma boa hora de pesquisa no Google e uma olhada em algumas postagens do StackOverflow me levaram ao que tenho agora, que ainda não funciona.

Responder1

Acho que a chamada de função deveria ser:

Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value

Acabei de alterar as duas ocorrências de cto Target, o que acho que fará o que você está descrevendo. O erro 'Objeto necessário' está sendo gerado porque cnão foi instanciado para nada - você não pode recuperar um membro de algo que não seja um objeto.

EDIT, para endereçar o texto da célula que não muda:

Eu me perguntei se o texto da célula permaneceria apenas o número. A correção será mais ou menos assim, eu acho:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rangeLimit As Range
    Set rangeLimit = Range("D:D")
    If Not Intersect(rangeLimit, Target) Is Nothing Then
        If IsNumeric(Target) And Not IsEmpty(Target) Then ' This condition should avoid munging of already-existing links, though if any tickets might be non-numeric it won't work properly.
             Application.EnableEvents = False  ' Must turn off event handling
             Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
             Target.Formula = "Ticket #" & Target.Value ' Should actually change the displayed text
             Application.EnableEvents = True
        End If
    End If
End Sub

É importante desligar o tratamento de eventos sempre que você usar o VBA para editar o conteúdo de uma célula dentro de um evento como este, caso contrário você corre o risco de um loop infinito. Eu deveria ter pensado nisso inicialmente; mas parece que aplicar um hiperlink à célula não aciona Worksheet_Change.

Observe que se você excluir um hiperlink de uma célula, a célula permanecerá formatada como 'sublinhado' e 'cor de fonte azul'. Para o seu caso de uso, onde a coluna sempre conterá links para tickets ou células em branco, isso provavelmente é aceitável?

informação relacionada