Macro Filtro automatico o filtro Estandar.

Discute sobre la aplicación de hojas de cálculo

Macro Filtro automatico o filtro Estandar.

Notapor JoePublic » Dom Sep 27, 2020 11:52 pm

Hola, estoy intentando crear un filtro automático con un solo criterio. No me sirve un "filtro avanzado"
En el Libro de Mauricio "Aprendiendo OOo Basic" enlace libro: https://gitlab.com/mauriciobaeza/libreoffice-macros/tree/master/books
hay una macro para crear un filtro automatico y filtra la tabla por una solo columna con un solo criterio.
Pero al probarlo, solo he conseguido que se active el filtro pero no aparece ningn resultado.
Al ir a comprobar si se cogen los datos que paso con el macro he visto en Menu/Datos/Mas filtros/Filtro Estandar he visto que el nombre por el que quiero filtrar esta en este filtro (vease la imagen)
Entonces no entiendo que falla.
El mismo macro tambien esta aqui: https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConCalc/RangosDeDatos#Filtrar_datos

Alguien lo puede ejecutar y ver que pasa?. He puesto el codigo de la macro aqui abajo y adjunto el archivo tambien.
Gracias.
PD. la variable sNombre = "Direcciones" definí el intervalo en Menu/Datos/definir intervalo/Nombre escribir 'Direcciones' y seleccionar toda la tabla con encabezados incluidos para que funcionara, de lo contrario no encuentra el rango.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Filtro_Automatico()
'Source: https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConCalc/RangosDeDatos#Filtrar_datos

Dim oDoc As Object
Dim oRangosBD As Object
Dim sNombre As String
Dim oRBD As Object
Dim oDesFiltro As Object
Dim mCamposFiltro(0) As New com.sun.star.sheet.TableFilterField

     oDoc = ThisComponent
     oRangosBD = oDoc.DataBaseRanges()
     sNombre = "Direcciones" 'En Menu/Datos/definir intervalo/Nombre escribir 'Direcciones' y seleccionar toda la tabla con encabezados incluidos.
     If oRangosBD.hasByName( sNombre ) Then 'Verificamos que exista el nombre del rango de datos
         oRBD = oRangosBD.getByName( sNombre )
         'Mostramos el autofiltro
         oRBD.AutoFilter = True 'Pone flecha a las columnas del filtro.
               
         oDesFiltro = oRBD.getFilterDescriptor()
         'El campo por el que queremos filtrar
         mCamposFiltro(0).Field = 1 'Columnas empiezan a partir de la 0. El 1 significa que buscara en la columna 2.
         'El tipo de comparación
         mCamposFiltro(0).Operator = com.sun.star.sheet.FilterOperator.EQUAL
         'Si es un número
         mCamposFiltro(0).IsNumeric = False
         'El valor de comparación
         mCamposFiltro(0).StringValue = "nikole"
         'Le pasamos los campos
         oDesFiltro.FilterFields = mCamposFiltro
         'Refrescamos el rango para ver el resultado del filtro
         oRBD.refresh()
     Else
         MsgBox "El rango de datos no existe"
     End If
  End Sub

Adjuntos
Filtro automatico con macro - Test.ods
(16.59 KiB) 7 veces
soffice.bin_NASMZg8bjL.jpg
Esto es lo que aparece en la hoja de Calc. Foto1
soffice.bin_NASMZg8bjL.jpg (40.48 KiB) Visto 54 veces
soffice.bin_GifpxLfqJC.jpg
Foto de lo que aparece despues de realizar el macro. Foto2
soffice.bin_GifpxLfqJC.jpg (27.99 KiB) Visto 54 veces
Usuario apasionado de las hojas de cálculo. Novato aprendiz de macros con OOo Basic y VBA.
LibreOffice Version: 6.4.3.2 (x64) y Sistema Operativo Windows 10 Home.
Avatar de Usuario
JoePublic
 
Mensajes: 4
Registrado: Dom Sep 06, 2020 5:34 pm

Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 4 invitados