Agregar hipervínculo a una imagen desde la función
Estoy tratando de hacer una función VBA para añadir una imagen de la ruta del archivo y añadir un hipervínculo a ella.
Necesita ser llamado de una función, no puede ser un Sub.
Function AddHyperlinkedImage()
InsertPictureHyperlink
End Function
Sub InsertPictureHyperlink()
Dim pct As Picture, iLeft#, iTop#
Dim sFile As String
sFile = "C:\somepath\picture.jpg"
If Dir(sFile) = "" Then
Exit Sub
End If
With Range("A1")
.Select
iLeft = .Left: iTop = .Top
End With
Set pct = ActiveSheet.Pictures.Insert(sFile)
pct.Left = iLeft
pct.Top = iTop
With Worksheets("Sheet1")
.Hyperlinks.Add Anchor:=.Shapes(pct.Name), Address:="somexcel.xlsx"
End With
End Sub
Añade la imagen, pero no el hipervínculo. Cuando ejecuto el sub por sí mismo, añade la imagen e hipervínculos.
Pero necesito que esté en forma de una función. No puede ser un botón o algo así. Tengo que ser capaz de llamarlo con =SomeFunction().
Pregunta hecha hace 3 años, 4 meses, 29 días - Por bytebarricade
3 Respuestas:
-
Así que en lugar de un
UDF
puede intentar utilizar unWorksheet_Change
evento que te llamaráInsertPictureHyperlink()
macro. Para asegurar que la macro no se dispare cuando cambie una célula, agregue una condición a sólo enciende la macro cuando se introduce una palabra clave. Aquí la palabra clave seráAddHyperlinkedImage
Private Sub Worksheet_Change(ByVal Target As Range) If Target = "AddHyperlinkedImage" Then Application.EnableEvents = False InsertPictureHyperlink Application.EnableEvents = True End If End Sub
Sub InsertPictureHyperlink() MsgBox "Macro enabled - add your code in this sub" End Sub
Respondida el Dec 18, 2020 a las 10:32 - por javagiant
Votos positivos: 0 | Votos negativos: 0 -
Parece que el problema es que la función
AddHyperlinkedImage
está llamando a la subrutinaInsertPictureHyperlink
, pero necesitas asegurarte de que el hipervínculo se añada correctamente. Para ello, puedes modificar la función para que retorne la imagen con el hipervínculo agregado. Aquí te muestro cómo puedes hacerlo:vba Function AddHyperlinkedImage() Dim pct As Picture Set pct = InsertPictureHyperlink Set AddHyperlinkedImage = pct End Function Function InsertPictureHyperlink() As Picture Dim pct As Picture, iLeft
, iTop#
Dim sFile As String sFile = "C:\somepath\picture.jpg" If Dir(sFile) = "" Then Set InsertPictureHyperlink = Nothing Exit Function End If With Range("A1") .Select iLeft = .Left: iTop = .Top End With Set pct = ActiveSheet.Pictures.Insert(sFile) pct.Left = iLeft pct.Top = iTop With Worksheets("Sheet1") .Hyperlinks.Add Anchor:=.Shapes(pct.Name), Address:="somexcel.xlsx" End With Set InsertPictureHyperlink = pct End FunctionCon estas modificaciones, la función
AddHyperlinkedImage
ahora llama a la funciónInsertPictureHyperlink
y devuelve la imagen con el hipervínculo añadido. Ahora podrás llamar aAddHyperlinkedImage()
en una celda de Excel para insertar la imagen con el hipervínculo.Respondida el Dec 19, 2020 a las 10:30 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema con tu código es que la función
AddHyperlinkedImage
está llamando a la subrutinaInsertPictureHyperlink
, que no devuelve ningún valor. Para convertir la subrutina en una función, debes hacer que devuelva el objeto de imagen creado. Aquí tienes el código modificado:vb Function AddHyperlinkedImage() As Picture Dim pct As Picture, iLeft
, iTop#
Dim sFile As String sFile = "C:\somepath\picture.jpg" If Dir(sFile) = "" Then Exit Function End If With Range("A1") .Select iLeft = .Left: iTop = .Top End With Set pct = ActiveSheet.Pictures.Insert(sFile) pct.Left = iLeft pct.Top = iTop With Worksheets("Sheet1") .Hyperlinks.Add Anchor:=.Shapes(pct.Name), Address:="somexcel.xlsx" End With Set AddHyperlinkedImage = pct End FunctionAhora puedes llamar a esta función usando
=AddHyperlinkedImage()
y devolverá el objeto de imagen que puedes utilizar para manipular aún más la imagen o el hipervínculo.Respondida el Dec 19, 2020 a las 10:43 - por Gemini
Votos positivos: 0 | Votos negativos: 0