Soy relativamente nuevo en el código VBA dentro de Excel, así que perdóneme si la respuesta es simple (espero que generalmente lo sea). Estoy usando Excel 2010, como referencia. Estoy tratando de lograr lo siguiente, con el script siguiente:
Si se ingresa una cadena de números (cualquier valor) en cualquier celda dentro de la Columna D, necesito que esto se convierta automáticamente en un Hyerlink que anexe una determinada cadena de dirección antes del valor de la celda objetivo, y escupe un nombre descriptivo que incluya la celda valor.
En otras palabras, aquí está el ejemplo de la función de Excel que intento replicar con una macro:
=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")
O, más específicamente (debería pintar una imagen más clara):
=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")
293136 es la cadena de números 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 de números como datos base, 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 de número 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 el 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
Aquí están los problemas con los que me encuentro:
1.) Si trato de ejecutar la fórmula tal como está, me sale un error de compilación. 2.) Si elimino el , Target.Value
final de la cadena de hipervínculo, aparece el error 424, error "Objeto requerido".
¿Qué estoy haciendo mal y / o cómo puedo crear una macro para realizar la función deseada? Una buena hora sólida de búsqueda en Google y echar un vistazo a algunas publicaciones de StackOverflow me llevó a lo que tengo ahora, que todavía no funciona.
Worksheet_Change
evento. Es posible que desee agregar un cheque que elTarget.Characters.Count < 10
o algún otro número para evitar la creación repetida de hipervínculos.TextToDisplay
que sea algo diferente al número en sí mismo.Target.Value
regresaráTextToDisplay
y si incluye texto que no sea el número, obtendrá un nuevo hipervínculo.Respuestas:
Creo que la llamada a la función debería ser:
Acabo de cambiar ambas ocurrencias de
c
aTarget
, que creo que hará lo que estás describiendo. El error 'Objeto requerido' se está lanzando porquec
no se ha instanciado a nada; no 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á más o menos así, creo:
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 se dispara
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 es probablemente aceptable?
fuente
TextToDisplay:=
?IsEmpty
prueba, lo que ahora evita que ocurra lo sucio 'Ticket #Ticket #' cuando eliminas una celda.