.
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.
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 Word, como ejecutar una macro dependiendo del valor de una celda, pasar datos de listbox a hoja de Excel, buscar en listbox mientras escribes en textbox, crear indice a hojas del mismo libro y al menú principal, conectar 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.Rowbusco = 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
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
.
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