Acho que a chamada de função deve ser:
Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
Acabei de alterar as ocorrências de c
para Target
, o que acho que fará o que você está descrevendo. O erro 'Object required' está sendo lançado porque c
não foi instanciado para nada - você não pode recuperar um membro de algo que não é um objeto.
EDIT, para resolver o texto da célula que não está mudando:
Gostaria de saber se o texto da célula permaneceria apenas o número. A correção será algo como isso, 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 desativar o tratamento de eventos sempre que você usar o VBA para editar o conteúdo de uma célula dentro de um evento como esse, caso contrário, você corre o risco de um loop infinito. Eu deveria ter pensado nisso inicialmente; mas, parece que a aplicação de um hiperlink para a célula não aciona Worksheet_Change
.
Observe que, se você excluir um hiperlink de uma célula, a célula permanecerá formatada como 'sublinhada' e 'cor da fonte azul'. Para seu caso de uso, onde a coluna sempre será links para tickets ou células em branco, isso provavelmente é aceitável?