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í.