[RESUELTO] Duda con Macro para filtrado de múltiples paginas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

[RESUELTO] Duda con Macro para filtrado de múltiples paginas

Mensaje por MartyMcfly »

Modo Paciencia= ON

Buenas y santas, iniciando en el Foro, saludos a todos y los felicito por el gran trabajo desinteresado que hacen.

Utilizo OpenOffice hace poco tiempo, y estoy empezando a incurcionar con Macros, si bien siempre entro al Foro para buscar un centro y miro bastante el libro de Mauricio (genio :bravo: ) pero no pude implementar sus codigos en la Hoja que estoy utilizando.

Mi consulta es la siguiente:

Tengo un Libro con multiple hojas, todas las hojas tienen la misma tabla, mismo encabezado, en la misma ubicacion, pero difieren en sus datos. Lo que necesitaba era, en la primer hoja, tener un buscador que, por el critério del valor de la primer columna, busque los datos coincidientes en todas las paginas del Libro, las actuales y las futuras, y me devuelva el valos de las celdas adyacentes

Gracias a una Macro compartida por el amigo @Fornelasa pude hacer funcionar dicho buscador de datos.

Ahora las dudas (abajo dejo el código y un Libro de ejemplo):

1- Es necesario que para que "busque" en cada hoja del libro tenga que agregar oSheet = oDocument.Sheets(1), oSheet = oDocument.Sheets(2), oSheet = oDocument.Sheets(3), oSheet = oDocument.Sheets(4) o habrá algun comodin para que que busque en infinitas paginas?

2- Cuando realizo una busqueda me arroja correctamente el dato, pero, si el dato esta repetido en varias Hoja solo lista lo encontrado de una sola, pero si en esa hoja el dato esta repetido, si, lista todos los encontrados. Que le debería agregar al código para que me liste "el dato" buscado en las xxHojas y los repetidos en una misma Hoja?

3- Si o si, en el resultado de la busqueda, siempre me va a arrojar el encabezado de la tabla?

4- "Flags"? "SVDFN"?

Debo tener mil preguntas más, pero recien estoy empezando y me nutro de sus experiencias y contribuciones en el Foro, ténganmen paciencia.


Dejo el código que estoy utilizado:

Código: Seleccionar todo

Sub GenerarFiltro()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
Borrar
oDocument = ThisComponent
oSheet = oDocument.Sheets(1)
oSheet = oDocument.Sheets(2)
oSheet = oDocument.Sheets(3)
oSheet = oDocument.Sheets(4)
oSheet = oDocument.Sheets(5)
oSheet = oDocument.Sheets(6)
oSheet = oDocument.Sheets(7)
oSheet = oDocument.Sheets(8)
oSheet = oDocument.Sheets(9)
oRange = oSheet.GetCellRangeByName("A4:L4000")
oSheet2 = oDocument.Sheets(0)
oCrite = oSheet2.GetCellRangeByName("A4:A5")
With Salida
.Sheet = 0
.Column = 0
.Row = 8
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
oSheet = oDocument.Sheets(1)
oRange = oSheet.GetCellRangeByName("A4:L4000")
oSheet2 = oDocument.Sheets(0)
oCrite = oSheet2.GetCellRangeByName("A4:A5")
With Salida
.Sheet = 0
.Column = 0
.Row = 8
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
End Sub



sub Borrar
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$10:$L$21"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDFN"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
end sub
Última edición por MartyMcfly el Vie Mar 09, 2018 3:41 am, editado 1 vez en total.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por xiseme »

Bienvenid@

Así, a «bote pronto»... Repetir en todas las hojas menos la primera(0)

Código: Seleccionar todo

For i =1 To ThisComponent.Sheets.Count - 1
...
Next i

Código: Seleccionar todo

Sub GenerarFiltro()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
Borrar
oDocument = ThisComponent

For i =1 To ThisComponent.Sheets.Count - 1
	oSheet = oDocument.Sheets(i)
	oRange = oSheet.GetCellRangeByName("A4:L4000")
	oSheet2 = oDocument.Sheets(0)
	oCrite = oSheet2.GetCellRangeByName("A4:A5")
	With Salida
	.Sheet = 0
	.Column = 0
	.Row = 8
	End With
	Generar = oCrite.CreateFilterDescriptorByObject(oRange)
	Generar.CopyOutputData = True
	Generar.OutputPosition = Salida
	Generar.UseRegularExpressions = True
	oRange.Filter(Generar)
	oSheet = oDocument.Sheets(i)
	oRange = oSheet.GetCellRangeByName("A4:L4000")
	oSheet2 = oDocument.Sheets(0)
	oCrite = oSheet2.GetCellRangeByName("A4:A5")
	With Salida
	.Sheet = 0
	.Column = 0
	.Row = 8
	End With
	Generar = oCrite.CreateFilterDescriptorByObject(oRange)
	Generar.CopyOutputData = True
	Generar.OutputPosition = Salida
	Generar.UseRegularExpressions = True
	oRange.Filter(Generar)
Next i
End Sub
Para todo lo demás : el libro de Mauricio
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
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por MartyMcfly »

Xiseme muchas gracias por la respuesta.

Agregue la linea que me pasaste a mi código y ahora busca correctamente en todas las hojas del Libro, perfecto.

Lo que si, sigo con el tema de que me liste los resultados repetidos que hay en las distintas paginas, ya que solo lista lo que encuentra en la ultima, es decir, seguramente lista todos los resultados encontrados repetidos pero los sobreescribe porque el rango de salida es siempre el mismo. Encuentra el valor buscado en la Hoja 1 y si el valor coincide con el de otra pagina se sobreescribe con este último.

Vere si puede deducir algo con el libro de Don Mauricio.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por fornelasa »

Parece que deseas hacer un filtro avanzado de varias hojas.
Aquí un ejemplo, fíjate bien en la estructura de datos (es importante), filtra los mayores a 50 años.
Si hubieras enviado un archivo ejemplo hubiera sido más fácil poder ayudarte.
Al correr la macro no debe existir la hoja "UniónDeDatos"
Ojala puedas adaptarlo a tus necesidades.
Saludos.
Adjuntos
FiltrarVariasHojas.ods
Filtrar varias hojas
(14.6 KiB) Descargado 139 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por MartyMcfly »

Fornelasa gracias por la respuesta.

había cargado un Libro de ejemplo, no se que paso.

ahí va:
Filtro multiples paginas.ods
(18.83 KiB) Descargado 144 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por fornelasa »

Por eso..... :roll:
Digo..... la macro no es una oda a las buenas técnicas de programación además de que falta depurarla pero ...... :mrgreen:
Saludos
Adjuntos
Filtro multiples paginas.ods
(18.48 KiB) Descargado 133 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por fornelasa »

Lo mismo con una macro más depurada.
Saludos.
Adjuntos
FiltroAvanzadoVariasHojas.ods
Filtro avanzado varias hojas
(18.67 KiB) Descargado 132 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por MartyMcfly »

:bravo:

Perfecto!

El filtrado lo utilizo únicamente para los datos de la columna "A" y que vizualice los de las celdas contiguas a la derecha, tal cual funciona. También sobre escribe los datos, genial, yo le estaba por agregar un boton, con otra función, para limpiar la tabla generada. Voy a intentar comprender todo el código a ver si caigo la proxima con algo más resuelto :lol: .

Pregunta: el parpadeo que hace al explorar todas las hojas es algo normal? o me pasa a mi solo.

Muchisimas gracias por la ayuda y el tiempo.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por fornelasa »

De nuevo, una macro todavía más depurada y sin parpadeo. Versión 4.
Saludos.
Adjuntos
FiltroAvanzadoVariasHojas_II.ods
release 4
(18.63 KiB) Descargado 141 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Mensaje por MartyMcfly »

Ahora quedo perfecta, pero me dejaste con la intriga jajaj, que producia el parpadeo en la anterior?

Muchimas gracias por la ayuda!! :super: :super:
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO]Duda con Macro para filtrado de multiples pagi

Mensaje por MartyMcfly »

Hoy, queriendo exigirle un poco más, agregue a una de las hojas una columna más, y extendi en rengo de busqueda en el código de la columna "L" a la "Z", por si tuviera una tabla más larga o con otro encabezado y arrojo error, Type: com.sun.star.uno.RuntimeException, sera porque el rango de busqueda no es igual al criterio. Creo que en un principio mientras el encabezado del critério sea igual al de las demas tablas no importaba si tenian 2 columnas o 25 columnas, te las listaba igual.
FiltroAvanzadoVariasHojas_II.ods
(23.66 KiB) Descargado 139 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Duda con Macro para filtrado de multiples pag

Mensaje por fornelasa »

Hola, el archivo es un ejemplo que tiene el objeto de ser una guía para darnos una idea de como hacerlo, no es una macro hecha exactamente a la medida de nuestras necesidades. Si la estudiamos podemos fácilmente acomodarla a lo que requerimos, ejemplo:

Código: Seleccionar todo

cursor.collapseToSize(13,5)
oRange = oSheet.GetCellRangeByName("A5:M7000")
Etc
Ojala puedas adaptarla a lo que deseas.

Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder