La función devuelve #VALUE cuando debería devolver un Hipervínculo.
Construí una función:
Function GenerateHyperlink(NameFile as string)
MyStr = "C:\Test\2. Test\" & NameFile
With ActiveSheet
.Hyperlinks.Add anchor:=Range(ThisWorkbook.FullName & "#" & ActiveCell.Parent.Name & "!" & ActiveCell.Address), Address:=MyStr, TextToDisplay:="Abrir archivo"
End With
GenerateHyperlink = MyStr
End Function
Esto es lo que escribo en la celda:
=GenerateHyperlink(A2)
Esto pone en la celda: #VALUE!
Y cuando escribo en la ventana inmediata:
? GenerateHyperLink("Test.pdf")
Muestra el hipervínculo en la celda.
¿Qué me estoy perdiendo?
Edición después de los comentarios, hice lo siguiente:
Function GenerateHyperlink(NameFile as string) as string
MyStr = "C:\Test\2. Test\" & NameFile
ActiveCell.Parent.Evaluate "DefineHy(" & ActiveCell.Address & "," & MyStr & "," & "Esto es una prueba" & ")"
GenerateHyperlink = MyStr
End Function
sub DefineHy(ThisCell as string, ThisPath as string, ThisString as string)
With ActiveSheet
.Hyperlinks.Add anchor:=Range(ThisCell), Address:=ThisPath, TextToDisplay:=ThisString
End With
End With
End Sub
Esto devuelve una String
y no un HyperLink
davy.ai
El problema con la función inicial es que está devolviendo un valor de tipo cadena (MyStr) en lugar de crear un objeto de hipervínculo real.
Para crear un objeto de hipervínculo, la función necesita agregarlo a la hoja de cálculo utilizando el método
.Hyperlinks.Add
. Además, la celda ancla debe ser especificada como un objeto de rango, no como una cadena.Aquí hay una versión actualizada de la función que crea un objeto de hipervínculo en la celda activa:
La parte
.EntireRow.Cells(1)
especifica la primera celda de la fila actual como el ancla para el hipervínculo.Ten en cuenta que esta función asume que la celda activa está en la fila donde se debe crear el hipervínculo. Si deseas especificar una celda ancla diferente, debes modificar la función en consecuencia.