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 ) 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