Soy relativamente nuevo en el código VBA en Excel, así que perdónenme si la respuesta es simple (espero que normalmente lo sea). Estoy usando Excel 2010, como referencia. Estoy intentando lograr lo siguiente, con el guión siguiente:
Si se ingresa una cadena numérica (cualquier valor) en cualquier celda dentro de la Columna D, necesito convertirla automáticamente en un Hyerlink que agregue una determinada cadena de dirección antes del valor de la celda de destino y escupe un nombre descriptivo que incluya la celda. valor.
En otras palabras, aquí está el ejemplo de función de Excel que estoy intentando replicar con una macro:
=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")
O, más específicamente (debería mostrar una imagen más clara):
=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")
293136es la cadena numérica de ejemplo que quiero que un usuario pueda escribir en cualquier celda dentro de la Columna D. Cuando lo hagan, quiero que esta celda se convierta en un hipervínculo, usando la cadena numérica como datos base y agregando el resto. de la URL a la izquierda del valor de la celda, luego cree un nombre descriptivo que concatene "Ticket #" con la cadena numérica del valor de la celda. No quiero que mis usuarios tengan que aprender fórmulas de Excel para tener un enlace de referencia, o perder tiempo teniendo que copiar ambos extremos de la función para ajustar los datos de la celda.
Esto es lo que tengo hasta ahora en 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
Estos son los problemas con los que me estoy encontrando:
1.) Si intento ejecutar la fórmula tal como está, aparece un error de compilación. 2.) Si elimino el , Target.Value
final de la cadena del hipervínculo, aparece el error 424, "Objeto requerido".
¿Qué estoy haciendo mal y/o cómo puedo crear una macro para realizar la función deseada? Una buena hora de búsqueda en Google y de echar un vistazo a algunas publicaciones de StackOverflow me llevó a lo que tengo ahora, que todavía no funciona.
Respuesta1
Creo que la llamada a la función debería ser:
Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
Simplemente cambié ambas apariciones de c
a Target
, lo que creo que hará lo que estás describiendo. El error 'Objeto requerido' se genera porque c
no se ha creado una instancia de nada; no se puede recuperar un miembro de algo que no sea un objeto.
EDITAR, para abordar el texto de la celda que no cambia:
Me preguntaba si el texto de la celda seguiría siendo solo el número. La solución se verá así, creo:
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
Es importante desactivar el manejo de eventos siempre que use VBA para editar el contenido de una celda dentro de un evento como este; de lo contrario, corre el riesgo de un bucle infinito. Debería haber pensado en esto inicialmente; pero parece que aplicar un hipervínculo a la celda no activa Worksheet_Change
.
Tenga en cuenta que si elimina un hipervínculo de una celda, la celda permanecerá formateada como "subrayada" y "color de fuente azul". Para su caso de uso, donde la columna siempre será enlaces a tickets o celdas en blanco, ¿esto probablemente sea aceptable?