sábado, 22 de junio de 2024

82 - Mostrar un rango Excel en un control de Imagen de un Userform

 Siguiendo con el tema iniciado en el VIDEO Nº 81, aquí veremos como subir esa imagen creada de un rango filtrado de una hoja Excel, a un control Image de un Userform.
Nuestro libro contará con una hoja de datos (en el ejemplo corresponde a una Tabla) y un Userform.
En un módulo tendremos la subrutina que llamará a ese formulario. Puede ser asignada a un botón o ser llamada desde el menú Desarrollador/Programador.

Sub llamaUF()

Range("B4").Select

'se quita el posible autofiltro, mostrando la tabla completa.

If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData

UserForm1.Show

End Sub

El formulario de registro, además de los controles necesarios para esa tarea, contará con un control Image (para mostrar la imagen del rango filtrado) y un control ComboBox desde donde seleccionaremos el criterio a filtrar. 

Al abrir el Userform, en el evento Initialize ejecutaremos unas instrucciones para obtener la lista de criterios sin duplicados y ordenada. En este ejemplo se trata de la columna C (segunda columna de la Tabla de datos).

Private Sub UserForm_Initialize()

'armar lista única de la col c

Call ListaValoresUnicos

'rellenar el combobox

For i = 5 To Range("M" & Rows.Count).End(xlUp).Row

    ComboBox1.AddItem Range("M" & i)

Next i

End Sub


Sub ListaValoresUnicos()     'para la hoja Lista1 con la Tabla4

'se pasa la col C a un rango auxiliar y se le quitan los duplicados

Range("Tabla4[[CALIBRE]]").Copy Destination:=[M5]

ActiveSheet.Range("$M$5:$M$" & Range("M" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo

'se ordena el rango auxiliar para presentarlo en el desplegable

ActiveWorkbook.Worksheets("Lista1").Sort.SortFields.Clear

x = Range("M" & Rows.Count).End(xlUp).Row

ActiveWorkbook.Worksheets("Lista1").Range("M5:M" & x).Sort _

    Key1:=Range("M5:M" & x), Order1:=xlAscending, Header:=xlGuess

End Sub

En el evento Click del ComboBox ejecutaremos la macro principal, la de la Creación y Exportación de la imagen. Se filtrará la hoja por el criterio seleccionado, se tomará una captura o imagen del rango obtenido y la guardará como archivo de imagen 'jpg' en una subcarpeta (en el mismo directorio que el libro activo). A continuación se establece la propiedad Picture del control Image con la ruta y nombre del archivo de imagen guardado.

Private Sub ComboBox1_Click()

If ComboBox1.Value = "" Then Exit Sub

'se filtra la col C de la hoja activa

ActiveSheet.ListObjects(1).Range.AutoFilter Field:=2, Criteria1:=ComboBox1.Text

'se exporta el rango como imagen

Call exportaImagen(ComboBox1.Text, ActiveSheet.Name)

'se indica la misma ruta y nombre de archivo que se usaron en la macro de exportación

ruta = ThisWorkbook.Path & "/IMG/"

archi = ComboBox1.Text & ".jpg"             'no se permite png

'se sube la imagen al control Image1

With Image1

    .Picture = LoadPicture(ruta & archi)

    .PictureSizeMode = fmPictureSizeModeClip           'ver * 

    .PictureAlignment = fmPictureAlignmentTopLeft

End With

End Sub


* Las propiedades de ubicación pueden ser establecidas desde el modo diseño

   


La macro exportaImagen se encuentra en la entrada del tema anterior


También se puede descargar libro desde aquí o solicitarlo a mi correo de Gmail.


Acceso al VIDEO Nº 82 desde aquí.



No hay comentarios.:

Publicar un comentario