Insertar imagen segun valor celda

25/04/2007 - 01:09 por Pepito | Informe spam
Tengo una base de datos en Excel
El cual contiene los nombres de empleados
Deseo que al posesionarse el cursor sobre
el nombre del empleado o codigo aparezca su fotografia
una celda a la derecha del nombre.

Cabe mencionar que son 300 empleados,
solo se debe mostrar una fotografia a la vez
y es la celda activa


La ruta en donde se encuentran las fotos es
"C:\Fotografias\Nombre Archivo y todas son jpg


Encontre es codigo que Fue creado por
HECTOR MIGUEL y muy parecido a lo que
pretendo :

rivate Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$A$1" Then Exit Sub
Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto
As Double
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("La_Foto").Delete
De_donde = "C:\Windows\" & [a1] & ".bmp" 'Aquí va la ruta donde
están las imágenes
If Dir(De_donde) = "" Then Exit Sub
Set Foto = Me.Pictures.Insert(De_donde)
With Me.Range("f1:h10")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub


Casi se ajusta a lo que necesito, con la variante
de que yo lo necesito al señalar el nombre o
codigo, la foto aparezca 1 celda a la derecha..

Ojala tengan alguna idea de cómo adaptarlo.


Gracias..
 

Leer las respuestas

#1 Juan M
25/04/2007 - 15:00 | Informe spam
Hola Pepito

Si casi se adapta a lo que tu quieres te puedo comentar un poco el codigo y
tu mismo puedes modificarlo en función de tus pretensiones mas específicas
ya que nos indicas

...la foto aparezca 1 celda a la derecha..
pero, ¿derecha de dónde?

Para que código se ejecute cuando señalas el nombre o el código deberías
situar el código en el evento de la hoja SelectionChange.
En la primera línea del código deberías tener en cuenta que se ejecute en
función de que señales las columnas del nombre y del código.
Debes tener en cuenta como se llama el archivo que contiene la foto, para
poder cargarla, con lo que sería recomendable que destinases una columna
para almacenar ese nombre.

Si no te aclaras con el código y nos aportas los detalles de los rangos
empleados se podría modificar.

Comento el código (espero con el permiso del autor)

Private Sub Worksheet_Change(ByVal Target As Range)
'El codigo se ejecuta cuando se cambie algo en una celda
'Si quieres que sea cuando se apunte a otra celda debes

If Not Target.Address = "$A$1" Then Exit Sub
'Comprueba que la celda cambiada sea la A1
'Si no lo es no ejecuta el codigo

Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, _
Alto As Double
'Declaracion de variables

Application.ScreenUpdating = False
'Evita el refresco de la pantalla

On Error Resume Next
'Control de errores

Me.Shapes("La_Foto").Delete
'Borra la foto (si esta existiera antes) si no existe saltaria un error
'por eso el control

De_donde = "C:\Windows\" & [a1] & ".bmp" 'Aquí va la ruta donde
están las imágenes
'En esta variable almacenas la ruta de la foto, el nombre viene dado en a1
' y la extension es bmp

If Dir(De_donde) = "" Then Exit Sub
'Si el archivo no existe finaliza el programa

Set Foto = Me.Pictures.Insert(De_donde)
'Crea la foto

With Me.Range("f1:h10")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
'Define un rango donde se va a insertar la foto

With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
'Define el nombre de la foto y la situa en el rango anterior

Set Foto = Nothing
'Elimina el objeto
End Sub

Un saludo,
Juan


==Consulta original

"Pepito" escribió en el mensaje
Tengo una base de datos en Excel
El cual contiene los nombres de empleados
Deseo que al posesionarse el cursor sobre
el nombre del empleado o codigo aparezca su fotografia
una celda a la derecha del nombre.

Cabe mencionar que son 300 empleados,
solo se debe mostrar una fotografia a la vez
y es la celda activa


La ruta en donde se encuentran las fotos es
"C:\Fotografias\Nombre Archivo y todas son jpg


Encontre es codigo que Fue creado por
HECTOR MIGUEL y muy parecido a lo que
pretendo :

rivate Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$A$1" Then Exit Sub
Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto
As Double
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("La_Foto").Delete
De_donde = "C:\Windows\" & [a1] & ".bmp" 'Aquí va la ruta donde
están las imágenes
If Dir(De_donde) = "" Then Exit Sub
Set Foto = Me.Pictures.Insert(De_donde)
With Me.Range("f1:h10")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub


Casi se ajusta a lo que necesito, con la variante
de que yo lo necesito al señalar el nombre o
codigo, la foto aparezca 1 celda a la derecha..

Ojala tengan alguna idea de cómo adaptarlo.


Gracias..

Preguntas similares