En el Libro de Mauricio "Aprendiendo OOo Basic" enlace libro: https://gitlab.com/mauriciobaeza/libreo ... ster/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/Man ... trar_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
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