En la entrada anterior insertábamos imágenes directamente a las celdas desde una carpeta auxiliar. Esta opción es muy útil si vamos a incorporar imágenes de alta calidad y así no incrementamos el peso del libro.
Pero el inconveniente que presenta este modelo es que si deseamos enviar el libro a terceros, también tenemos que adjuntar la carpeta con las imágenes.
En cambio, en esta entrada veremos otro modelo que nos permite insertar las imágenes en el mismo libro, asignándoles un nombre apropiado para luego relacionarlas con los registros a utilizar.
Para esto, utilicé como ejemplo un modelo de factura, una tabla de productos y una hoja con las imágenes de los productos.
Private Sub Worksheet_Change(ByVal Target As Range)'----- IMPORTANTE: ESTE CÓDIGO se utilizará con imágenes previamente insertadas en la hoja imgProd'y se le asigna el nombre correspondiente al producto.'Si la factura solo se utilizará para impresión (Pdf o impresora) no es necesario subirlas al'libro y en ese caso utilizar el código colocado en hoja Img9 (2). Recordar que al enviar'copia de la factura por mail o whatsapp las imágenes no se verán salvo que también se adjunte'la carpeta que las contenga.'-------------------------------------------------'por cambio en celdas B11:B14 se busca la imagen que coincida con el valor seleccionadoIf Intersect(Range("B11:B14"), Target) Is Nothing Then Exit SubIf Target.Count > 1 Then Exit Sub'se quita la imagen anteriorFor Each sh In ActiveSheet.ShapesIf sh.Type = 11 Or sh.Type = 13 ThenIf sh.Top = Target.Top Then sh.Delete: Exit ForEnd IfNext shIf Target.Value = "" Then Exit Subfoto = Target.ValueApplication.ScreenUpdating = False'se controla posible error por no encontrar la imagenOn Error Resume NextSheets("imgProd").SelectActiveSheet.Shapes.Range(Array(foto)).SelectSelection.CopySheets("Factura").SelectRange("F" & Target.Row).SelectActiveSheet.Paste'estando la imagen seleccionada se ajusta su dimensión a la celda de la misma filaSelection.ShapeRange.LockAspectRatio = msoFalse 'NO mantiene proporciónWith Selection.Top = Target.Top.Left = Range("F" & Target.Row).Left + 1.Height = Range("F" & Target.Row).Height.Width = Range("F" & Target.Row).WidthEnd With'pasa a fila siguienteTarget.Offset(1, 0).SelectEnd Sub
No hay comentarios.:
Publicar un comentario