Vincular imagenes.

26/11/2007 - 10:25 por Antonio | Informe spam
Buenas. Buscando por la red encontre un ejemplo para vincular imagenes en
una hoja de excel. Me sirve, pero se debe mejorar un poco y yo de
programación estoy pez. He intentado mejorarlo pero no lo consigo. El caso
seria que yo quiero vincular 5 imagenes en distintos rangos y que para cada
rango tome el valor de de busqueda de distintas celdas. Os pego el código
que he intentado mejorar y que no funciona porque solo vincula la imagen de
la celda A11 y si en F11 pongo el mismo valor se ve otra imagen sino nada.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto, Foto_2 As Object, Arriba As Double, Izquierda As Double, Ancho
As Double, Alto As Double
Dim Ruta, Ruta_2 As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [a11] Then Exit Sub
Me.Shapes("Foto").Delete
Ruta = ThisWorkbook.Path & "\Imagenes\" & [a11] & ".jpg"
Set Foto = Me.Pictures.Insert(Ruta)
With Me.Range("b2:c8")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With

On Error Resume Next
If Not Target = [f11] Then Exit Sub
Me.Shapes("Foto_2").Delete
Ruta_2 = ThisWorkbook.Path & "\Imagenes\" & [f11] & ".jpg"
Set Foto_2 = Me.Pictures.Insert(Ruta_2)
With Me.Range("g2:h8")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto_2
.Name = "Foto_2"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
End Sub

Haber que me podeis decir.
 

Leer las respuestas

#1 Héctor Miguel
27/11/2007 - 06:20 | Informe spam
hola, Antonio !

... por la red encontre un ejemplo para vincular imagenes en una hoja de excel.
Me sirve, pero se debe mejorar un poco y yo de programacion estoy pez. He intentado mejorarlo pero no lo consigo.
... quiero vincular 5 imagenes en distintos rangos y que para cada rango tome el valor de de busqueda de distintas celdas.
Os pego el codigo que he intentado mejorar y que no funciona porque solo vincula la imagen de la celda A11
y si en F11 pongo el mismo valor se ve otra imagen sino nada.



1) los "parches" que le haces al codigo impiden que llegue a leer la instruccion para la celda F11
ya que si la celda que se modifica NO es la primera (A11) entra en accion la parte que dice:
-> If Not Target = [a11] Then Exit Sub

2) si comentas en que celdas se da el cambio para cada una de las 5 imagenes
y en que rango necesitas "encuadrar" cada una de las 5 imagenes
sera mas facil encontrar la forma de adaptar el codigo que encontraste para cubrir tus requerimientos ;)

saludos,
hector.

__ el codigo expuesto __
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto, Foto_2 As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim Ruta, Ruta_2 As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [a11] Then Exit Sub
Me.Shapes("Foto").Delete
Ruta = ThisWorkbook.Path & "\Imagenes\" & [a11] & ".jpg"
Set Foto = Me.Pictures.Insert(Ruta)
With Me.Range("b2:c8")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With

On Error Resume Next
If Not Target = [f11] Then Exit Sub
Me.Shapes("Foto_2").Delete
Ruta_2 = ThisWorkbook.Path & "\Imagenes\" & [f11] & ".jpg"
Set Foto_2 = Me.Pictures.Insert(Ruta_2)
With Me.Range("g2:h8")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto_2
.Name = "Foto_2"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
End Sub

Preguntas similares