Macros para mostrar varias imágenes según valor de celda

Tengo la siguiente macro que me arroja la fotografía de un empleado el teclear su número de empleado en determinada celda. Me gustaría que fueran varias celdas que arrojaran varias imágenes según en número de empleado en la misma hoja.

¿Cómo puedo hacerlo?

Saludos

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo final
If Target.Address = "$H$9" Then
foto = Target.Value
ActiveSheet.Image1.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto & ".jpg")
End If
Exit Sub
final:
MsgBox "No se ha encontrado la foto"
End Sub

2 Respuestas

Respuesta
4

Necesitas indicarle el nombre del resto de las fotos, supongamos que esa info la tengas en las celdas de al lado:

If Target.Address = "$H$9" Then
foto = Target.Value
ActiveSheet.Image1.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto & ".jpg")
'el resto de las fotos
foto2 = target.offset(0,1).value
ActiveSheet.Image2.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto2 & ".jpg")
'y así con el resto de fotos.
End If

Ahora, debes tener presente que los objetos de imagen se colocan por encima de las celdas no 'dentro' de ellas, por lo que tendrás que darle la ubicación.

Podriamos tomar el extremo superior izquierdo de la celda, quedando las instruciones para cada foto de esta manera (ajusta el nombre de cada control 'Image', 'foto' y target.

foto = Target.Value
ActiveSheet.Image1.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto & ".jpg")
    ActiveSheet.Shapes.Range(Array("Image1")).Select
    ActiveSheet.Shapes("Image1").Left = Target.Left
    ActiveSheet.Shapes("Image1").Top = Target.Top

Ej para 'foto2', con Image2 y Target.offset(0,1)

foto2 = Target.Offset(0,1).Value
ActiveSheet.Image2.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto2 & ".jpg")
ActiveSheet.Shapes.Range(Array("Image2")).Select
ActiveSheet.Shapes("Image2").Left = Target.offset(0,1).Left
ActiveSheet.Shapes("Image2").Top = Target.Offset(0,1).Top

Sdos. Si quedó resuelto no olvides valorar y finalizar la consulta.

Elsa

No me sale =( 

En H9  coloco el numero de empleado y en un control active x de imagen me arroja la foto del empleado ajustada al control active x

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo final
If Target.Address = "$H$9" Then
foto = Target.Value
ActiveSheet.Image1.Picture = LoadPicture("C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\" & foto & ".jpg")
End If
Exit Sub
final:
MsgBox "No se ha encontrado la foto"
End Sub

Supongamos que quisiera visualizar 2 empleados al mismo tiempo, insertar otro control active x de imagen asociado a la celda H10  donde también al colocar otro número de empleado me arroje su foto.

Saludos

O no necesariamente que este alado de la celda sino por ejemplo en la celda z10

Solo podemos tener un evento Worksheet_Change y desde allí controlar todas las celdas donde ingreses el nro de empleado.

También necesitarás saber con certeza qué control dependerá de cada celda.

Me ajusto a tus referencias. Si luego utilizas otras celdas o ref para las imagenes leé los comentarios en la macro para ajustarla.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se controla cambios en H9 y Z10
If Target.Address <> "$H$9" And Target.Address <> "$Z$10" Then Exit Sub
On Error GoTo final
foto = Target.Value
ruta = "C:\Users\JESUS\Documents\RH\9. Marketing y Diseño\Personal\Credenciales\"
'según la celda será el control que se cargue
If Target.Address = "$H$9" Then
    ActiveSheet.Image1.Picture = LoadPicture(ruta & foto & ".jpg")
    ActiveSheet.Shapes.Range(Array("Image1")).Select
    ActiveSheet.Shapes("Image1").Left = Target.Left
    ActiveSheet.Shapes("Image1").Top = Target.Top
ElseIf Target.Address = "$Z$10" Then
    ActiveSheet.Image2.Picture = LoadPicture(ruta & foto & ".jpg")
    ActiveSheet.Shapes.Range(Array("Image2")).Select
    ActiveSheet.Shapes("Image2").Left = Target.Left
    ActiveSheet.Shapes("Image2").Top = Target.Top
'y así con el resto de controles image
End If
Exit Sub
final:
MsgBox "No se ha encontrado la foto"
End Sub

Por supuesto que si tuvieras 20 fotos te desarrollaría un bucle para no repetir algunas instrucciones,,, pero para 2 0 4 controles no justifica.

Sdos

Elsa

¡Gracias!  ¡Eres máster!

Me quiero hacerlo de 10 a 15 fotos por hoja de excel, puedo ir agregando así los 15 comandos sin problema?

Si claro. Tené presente los nombres de los controles y las celdas para ajustar en los 15 grupos.

En otro momento enviame la lista con las celdas y nombre de los controles para ver si te puedo preparar un bucle.

Sdos

Elsa

Respuesta

Echa un vistazo a los ejemplos que te paso te pueden ser de utilidad, todos tratan sobre insertar imágenes en excel

http://www.programarexcel.com/2015/02/insertar-foto-o-imagen-centrando.html http://www.programarexcel.com/2015/02/recorre-filas-inserta-fotos-y-las-ubica.html http://www.programarexcel.com/2014/05/inserta-imagen-en-comentario-de-excel.html Mira 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas