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.

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Antonio
27/11/2007 - 09:46 | Informe spam
Gracias por la solución me funciono con eliminar esa línea del codigo.

Saludos.

"Héctor Miguel" escribió en el mensaje
news:
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





Respuesta Responder a este mensaje
#3 Antonio
27/11/2007 - 13:02 | Informe spam
Haber como puedo mejorara el código. Os cuento de esta forma vinculo
imagenes, pero el archivo al cerrarlo pesa mucho pq se quendan las imagenes,
como puedo hacer para que al cerra excel las imagenes no aumenten el tamaño
del archivo y al abrirlo que refresque los datos paar que se vena las
imagenes.

Saludos
"Antonio" escribió en el mensaje
news:u$
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.




Respuesta Responder a este mensaje
#4 Héctor Miguel
27/11/2007 - 23:53 | Informe spam
hola, Antonio !

... de esta forma vinculo imagenes, pero el archivo al cerrarlo pesa mucho pq se quendan las imagenes
como puedo hacer para que al cerra excel las imagenes no aumenten el tamano del archivo
y al abrirlo que refresque los datos paar que se vena las imagenes...



1) para reducir (en lo posible) el tamano y peso del archivo, te sugeriria usar objetos picture incrustados en la hoja

2) por lo tocante al manejo de imagenes incrustadas en hojas de calculo, revisa las siguientes conversaciones:
http://tinyurl.com/26xbql
http://tinyurl.com/lo7zo
http://tinyurl.com/ytkk2x

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida