Hacer un macro para filtrar filas

Discute sobre la aplicación de hojas de cálculo
Responder
jjlasarte
Mensajes: 3
Registrado: Sab Nov 25, 2017 10:02 pm

Hacer un macro para filtrar filas

Mensaje por jjlasarte »

Hola, quiero hacer un macro para filtrar filas con un filtro avanzado. Lo que pretendo es que al ejecutar la macro (con un botón), las filas se filtren con los criterios especificados en la tabla de condiciones. El problema es que creo la macro (Datos --> Filtro avanzado...), los datos se filtran, pero cuando vuelvo a ejecutar la macro es como si no se hubiese grabado y no funciona.

Gracias
OpenOffice 4.1.4 en Windows 10
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Hacer un macro para filtrar filas

Mensaje por xiseme »

Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Hacer un macro para filtrar filas

Mensaje por mauricio »

y por supuesto la completa documentación de este tema:
https://wiki.openoffice.org/wiki/ES/Man ... trar_datos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
jjlasarte
Mensajes: 3
Registrado: Sab Nov 25, 2017 10:02 pm

Re: Hacer un macro para filtrar filas

Mensaje por jjlasarte »

Gracias por la ayuda, me va un poco grande porque no entiendo mucho de esto. He podido apañarlo con un código del libro de Mauricio.
Ahora el problema es que no sé cómo hacer para que vuelvan a aparecer todos los registros.

Gracias de nuevo

Este es el código que he utilizado:

Código: Seleccionar todo

Sub Filtrar()
Dim oDoc As Object
Dim oRangosBD As Object
Dim oBaseDatos As Object
Dim oDestino As Object
Dim oCriterios As Object
Dim oDesFiltro As Object

	oDoc = ThisComponent
	oRangosBD = oDoc.DataBaseRanges()
	'Nos aseguramos de que existen nuestros tres rangos
	If oRangosBD.hasByName( "BaseDatos" ) And oRangosBD.hasByName( "Criterios" ) And oRangosBD.hasByName( "Destino" ) Then
		'Obtenemos una referencia a los rangos origen
		oBaseDatos = oRangosBD.getByName( "BaseDatos" ).ReferredCells()
		oCriterios = oRangosBD.getByName( "Criterios" ).ReferredCells()
	oDestino = oRangosBD.getByName( "Destino" ).ReferredCells.getCellByPosition( 0,0 ).getCellAddress()
		
		'Obtenemos el descriptor del filtro del rango de criterios a partir del rango de datos
		oDesFiltro = oCriterios.createFilterDescriptorByObject( oBaseDatos )
		'Sin duplicados
		oDesFiltro.SkipDuplicates = False
		'Que pueda usar expresiones regulares
		oDesFiltro.UseRegularExpressions = False
		'Queremos el resultado en otra posición
		oDesFiltro.CopyOutputData= False
		'Le indicamos donde
		'oDesFiltro.OutputPosition = oDestino
		'El rango contiene encabezados de campos
		oDesFiltro.ContainsHeader = True
		
		'Filtramos con las opciones seleccionadas		
		oBaseDatos.filter( oDesFiltro )		
	Else
		MsgBox "El rango de datos no existe"
	End If
End sub
OpenOffice 4.1.4 en Windows 10
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Hacer un macro para filtrar filas

Mensaje por xiseme »

Tal vez...

Código: Seleccionar todo

Sub quitafiltros
MostrarFilas(oBaseDatos)
End Sub

Sub MostrarFilas(oRango)
'Mostra todas las filas = quitar filtros
	oRango.getRows.Isvisible = True
End Sub 
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
jjlasarte
Mensajes: 3
Registrado: Sab Nov 25, 2017 10:02 pm

Re: Hacer un macro para filtrar filas

Mensaje por jjlasarte »

Estos no me funcionan :-(

Gracias de todas formas.
OpenOffice 4.1.4 en Windows 10
Responder