1. Hacer que la macro habilite el filtro de tabla piloto con un filtro que el usuario ingrese a traves de casillas de texto, por fecha, u otro campo que se requiera
2. hacer que el rango de datos que la tabla piloto usa para construirse sea variable, es decir, en este momento se hace con oSheetObj.getCellRangeByName("A1:G7770"), pero la tabla de datos va a crecer con el tiempo.
envio el codigo para que puedan estudiarlo
Código: Seleccionar todo
dim oController as object
dim oSheetObj as object
dim DataCellRange, RangeAddress, Tables, Descriptor, Fields, Field1, Field2, Field3, Field4, Cell
oController = ThisComponent.CurrentController
oSheetObj = ThisComponent.Sheets.getByName("detalle") 'Hoja de donde se extraen los datos para la tabla piloto
'Buscar la manera de encontrar el rango segun el mes que se esta filtrando
DataCellRange = oSheetObj.getCellRangeByName("A1:G7770") 'Se establece el rango de donde se toman los datos
RangeAddress = DataCellRange.RangeAddress
Tables = oSheetObj.DataPilotTables() 'Tables Tiene toda la tabla piloto en la hoja activa
'Elimina la tabla si existe. Previene errores si se corre vairas veces
If Tables.hasByName("NewDataPilot") THEN
Tables.removeByName("NewDataPilot")
End If
Descriptor = Tables.createDataPilotDescriptor() 'Contiene la descripcion de la tabla piloto
Descriptor.ShowFilterButton = true 'Muestra el boton de FILTRO
Descriptor.setSourceRange(RangeAddress) 'El rango de datos es A1:G7770
Fields = Descriptor.getDataPilotFields
'Asignando los campos de filas
Field1 = Fields.getByIndex(4) 'La primra columna con datos es 0
'asigna Enum DataPilotFieldOrientation desde com.sun.star.sheet.DataPilotField
Field1.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
Field2 = Fields.getByIndex(5)
Field2.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
'Asignando los Campos de Columnas
Field3 = Fields.getByIndex(3)
Field3.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.COLUMN
'Asignando campos de Datos
Field4 = Fields.getByIndex(6)
Field4.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.DATA
Field4.Function = com.sun.star.sheet.GeneralFunction.COUNT
Descriptor.RowGrand = "TRUE" 'Turn off the Total line of the Table
Cell = ThisComponent.Sheets.getByName("Tabla Piloto").getCellrangeByName("A2") 'Lugar donde se quiere colocar la tabla piloto
Tables.insertNewByName("NewDataPilot", Cell.CellAddress, Descriptor)
Tables.getByIndex(0).refresh 'Refresca la Tabla Piloto
Editado por el moderador mauricio para quitar el icono de la flama que solo sirve para reportar errores, por favor, es importante leer las normas del foro que haz aceptado al registrarte, gracias