es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for 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:

    Function GenerateHyperlink(NameFile As String)
        Dim MyStr As String
    
        MyStr = "C:\Test\2. Test\" & NameFile
    
        With ActiveCell
            .Parent.Hyperlinks.Add anchor:=.EntireRow.Cells(1), Address:=MyStr, TextToDisplay:="Abrir archivo"
        End With
    
        GenerateHyperlink = MyStr
    End Function
    

    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.

Comments are closed.