Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como insertar foto al modificar una celda


.

Trabajar con macro para insertar imágenes o fotos en Excel ha sido tratado en varios ejemplos presentados anteriormente, como en macro para insertar fotosmacro que insertar imágenes en un comentario de excel; también en macro que recorre filas insertando fotos, no obstante ello no se había agregado ningún ejemplo de macro que trate acerca de como insertar una foto al modificar una celda.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
El ejemplo que presento en este post es bastante buscado en los foros que tratan sobre macros de excel, consiste en poder insertar una imagen al modificar una celda, esto tiene mucha utilidad cuando se trabajan con catalogos de producto, ya que agregando el código del mismo en la celda se puede mostrar en una cela una imagen del producto.

Este ejemplo no solo muestra como insertar la celda, sino que además la ubica o centra la foto en la celda correspondiente, la macro obtiene la posición de la celda es decir, altura, medida, alineación a la izquierda y derecha para poder ubicar la foto en la celda que tengamos preparada a tal fin; lo cual torna al mismo muy útil ya que no tenemos que estar ubicando la foto manualmente, lo cual se puede hacer si se desea, pero creo mayoría de los que han creado algún tipo de aplicación donde sea necesario insertar una imagen, requieren que se haga todo automático, lo cual le da un aspecto profesional al libro.

Si en algunos casos no sabemos donde está exactamente la imagen en la computadora, es decir no sabemos el path o dirección del archivo, se puede solucionar agregando que se muestre el explorador de archivos Windows, seleccionar la foto y luego insertarla o seguir realizando el procedimiento determinado, esto te lo explico en  macro abre explorador e inserta fotos y en  abrir el explorador de archivos de Windows  muestro cual es la codificación para poder mostrar y trabajar con el explorador de archivos de Windows.

Analizando el código, vemos que lo primero que se hace es restringir la macro a solamente cambios en la columna A, ya que de lo contrario si cambiásemos cualquier celda se insertaría ala foto, lo cual se aleja de lo que queremos obtener, al producirse el evento es decir una modificación de cualquier celda de la columna a, se busca el dato introducido, en este caso sería el código del producto, en la Hoja2 donde se encuentra un listado de códigos y demás datos, si el código es encontrado coloca la dirección en este caso, pero se puede modificar y ser cualquier dato; en la columna D y en las columnas B y C el resto de los datos relacionados con el registro.

Bien ahora viene el insertado de la foto, lo primero que hace es borrar la foto, ya que si modificamos el código del producto ingresado y no borramos la foto se apilarían una sobre otra las fotos, si bien sería visible la última foto, pero el archivo se pondría muy pesado, ya que habría fotos innecesarias.

Luego lo que se hace es crear un objeto con la celda activa y con la imagen insertada, donde se modifican las propiedades de la foto, entre ellas el nombre, altura, ancho, posición; se modifica el nombre para darle como nombre el número de la celda que se modifica, para luego poder identificar la foto y borrarla cuando sea necesario; el alto y ancho se toman de la celda donde se requiere insertar la foto, como así también la posición, es decir la distancia a la izquierda y hacia arriba, de esta manera se puede posicionar correctamente en la celda destinada a ello.

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo como copiar varias tablas vinculadas de Excel a Wordcomo ejecutar una macro dependiendo del valor de una celdapasar datos de listbox a hoja de Excelbuscar en listbox mientras escribes en textboxcrear indice a hojas del mismo libro y al menú principalconectar Excel con Access e insertar datos y muchos ejemplos más.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

Este ejemplo de macro sobre como insertar foto al modificar una celda, lo puedes descargar desde el link del final; ver su funcionamiento y observar como trabaja permite entender mejor el código que simplemente leer que es lo que hace, desde ya puedes adaptarlo a tus necesidades ya que no tiene ningún tipo de restricción, te recomiendo que veas los otros post que he mencionado ya que te ayudarán a poder adaptar convenientemente el código a lo que cada uno tiene en su libro de Excel o lo que requiere. Desde ya si te gustó o ayudó comparte en las redes sociales desde el botón del final para que otros usuarios puedan beneficiarse también.

Código que se inserta en evento change de Worksheet

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
On Error Resume Next
Dim fila, cw, rh As Integer
Dim path As String
Dim ran As Range
Dim imag As Object
If Target.Column = 1 And Target.Row > 1 Then
fila = Target.Row

busco = Sheets(«Hoja1»).Cells(fila, 1)
Set b = Sheets(«Hoja2»).Columns(1).Find(busco, LookIn:=xlValues, Lookat:=xlWhole)
If Not b Is Nothing Then
Sheets(«Hoja1»).Cells(fila, «B») = b.Offset(0, 1)
Sheets(«Hoja1»).Cells(fila, «C») = b.Offset(0, 2)
Sheets(«Hoja1»).Cells(fila, «D») = b.Offset(0, 3)
End If

Sheets(«Hoja1»).Shapes.Range(Array(«» & fila & «»)).Delete
path = Sheets(«Hoja1»).Cells(fila, 4)
Cells(fila, «E»).Activate
Set ran = ActiveCell
Set imag = Sheets(«Hoja1»).Pictures.Insert(path)
cw = 35 ‘ActiveCell.ColumnWidth ‘imag.Width / 10.67111364
rh = 70 ‘ActiveCell.RowHeight ‘imag.Height / 2
With imag
    .Name = fila
    .Top = ran.Top
    ‘reducimos el alto y ancho de la foto
    .Width = cw
    .Height = rh
    ‘se centra horizontalmente en la celda indicada
    .Left = ran.Left ‘ + (ran.Width – imag.Width) / 2
End With
  ‘damos altura a la fila igual al alto final de la imagen
ActiveCell.RowHeight = imag.Height
ActiveCell.ColumnWidth = 17
End If
Cells(fila + 1, 1).Select
Application.ScreenUpdating = False
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends