[RESUELTO]Averiguar fila del últ registro ... en otro libro

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO]Averiguar fila del últ registro ... en otro libro

Notapor Chelo2 » Vie Oct 27, 2017 8:58 pm

Federico aportó un ejemplo de lo que estaba buscando y funcionó perfecto. Pero quise hacer la adaptación de la macro para buscar lo mismo pero en otro libro ods y me da error.

No se si hay algo qyue estoy haciendo mal en la adaptación o si es que el código sirve sólo cuando se trata del mismo archivo.

El código adaptado es el siguiente:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "\\WS34400009\D\OPEN_SUR\CAMBJURIS_PRUEBA.ods"

      oDoc = AbrirArchivo (Ruta, True, "02081938", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
      'BUSCA EL CUIT EN LA BASE DE Cambios
      oHoja= oDoc.Sheets.getByName("Concluidos")
      'oHoja.isVisible = "True"
      
      oHoja.unProtect ( "02081938" )
      UltFila= UltimaFila(oHoja)+1
      'MsgBox "La fila es  "&UltFila
      oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
        document = oDoc.CurrentController.Frame
          dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
        dim args1(2) as new com.sun.star.beans.PropertyValue
       args1(0).Name = "ToPoint"
         args1(0).Value = oBuscarEn    '"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()
        consulta = sele.queryContentCells(21)
        filas = consulta.getCount - 1
        Fil = (sele(filas).getCellAddress.row + 1)
        msgbox Fil   
end sub


Adjunto el archivo donde habilité un segundo botón vinulado a esta macro.

Ya probé de todo... pero no doy en la tecla. Les agradezco cualquier sugerencia.

Un saludo desde Buenos Aires.

Chelo2
Adjuntos
UltimaFila_con_condicion.ods
(14 KiB) 56 veces
Última edición por Chelo2 el Mié Nov 01, 2017 5:43 pm, editado 1 vez en total
OpenOffice 4.1.3 en Windows 7
Chelo2
 
Mensajes: 100
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Vie Oct 27, 2017 9:36 pm

A mi me funciona bien, entiendo que usas AOO 4.1.3
Asegúrate que haya una hoja llamada "Concluidos" en el archivo siguiente:
Código: Seleccionar todo   Expandir vistaContraer vista
Ruta= "C:\Users\Federico\Downloads\CAMBJURIS_PRUEBA.ods"

¿Que error te marca?

En caso de ..... agrega esta linea:

Fil = (sele(filas).getCellAddress.row + 1)
oDoc.Close(true)
msgbox Fil

Saludos, Federico.
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: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor mauricio » Sab Oct 28, 2017 4:19 am

¿Vi mal o ya no es necesario la ruta en formato URL?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5874
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Lun Oct 30, 2017 3:10 am

ummm, es cierto, no lo había notado, pero en este caso funciona bien :D
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!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor Chelo2 » Lun Oct 30, 2017 9:22 pm

Pude ver que funciona en otro libro siempre y cuando la hoja "Concluidos" sea la primera. Si no lo es da error. No encuentra el dato buscado, lo cual me hace pensar que no está buscando en "Concluidos".

El tema es que no me doy cuenta como modificar en el código que pasó Federico, para que busque en la Hoja "Concluidos" y no en la primera hoja.

Un saludo.

Chelo2
OpenOffice 4.1.3 en Windows 7
Chelo2
 
Mensajes: 100
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor mauricio » Lun Oct 30, 2017 9:40 pm

No usen dispatcher, a la larga solo trae código más largo, difícil de mantener y depurar.

Los método de búsqueda están documentados:
https://wiki.openoffice.org/wiki/ES/Man ... reemplazar

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5874
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Lun Oct 30, 2017 10:30 pm

Adicionalmente a lo comentado por mauricio:
chelo2, estas sumando la fecha, la fecha no se suma :D
Insisto, en las pruebas que he hecho si funciona normalmente.
A ver así:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "C:\Users\Federico\Downloads\CAMBJURIS_PRUEBA.ods"

      oDoc = AbrirArchivo (Ruta, True, "02081938", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
      'BUSCA EL CUIT EN LA BASE DE Cambios
      oHoja= oDoc.Sheets.getByName("Concluidos")
      'oHoja.isVisible = "True"
      
      oHoja.unProtect ( "02081938" )
      UltFila= UltimaFila(oHoja)+1
      'MsgBox "La fila es  "&UltFila
      oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
        document = oDoc.CurrentController.Frame
          dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
        dim args1(2) as new com.sun.star.beans.PropertyValue
       args1(0).Name = "ToPoint"
         args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()       
        consulta = sele.queryContentCells(21)
        filas = consulta.RowDescriptions
        fila = UBound(filas)
        oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
end sub

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!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor Chelo2 » Mar Oct 31, 2017 3:16 pm

La última propuesta de Federico, funciona pero al igual que la anterior, sólo cuando la Hoja del otro libro donde quiero buscar, en este caso "Concluidos", sea la primera hoja y no haya una anterior.

Respecto de la propuesta de Mauricio que dijo se lo realizara con el método de búsqueda, fue mi primer intento hacerlo de esa manera, pero no logré seleccionar el último registro encontrado para poder sacar cual es el N° de fila. No se que habré hecho mal que mi pregunta original no quedó en el hilo y ahora no se puede ver.

Con respecto a lo de la suma de fechas ¿?¿?, no se a que te refieres porque no hay ninguna fecha en el código.. :lol:

Remito nuevamente un ejemplo de los dos libros con las diferentes alternativas propuestas, y la que intenté hacer con el descriptor de búsqueda y reemplazo, que si bien no quiero reemplazar nada, lo hice reemplazando por el mismo valor, en mi hipótesis de que quizá allí al llegar al último reemplazo, pudiera efectuar la selección, pero tampoco lo logré. Obviamente que algo o mucho debo estar haciendo mal pero no me doy cuanta por lo que agradecería si me lo pueden señalar.

Un saludo desde Buenos aires.

Chelo2
Adjuntos
Libro_2.ods
(9.71 KiB) 64 veces
UltimaFila_con_condicion.ods
(14.63 KiB) 64 veces
OpenOffice 4.1.3 en Windows 7
Chelo2
 
Mensajes: 100
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Mar Oct 31, 2017 6:50 pm

En el archivo "UltimaFila_con_condicion.ods" tienes un botón con texto que dice "Buscar en otro libro" que con los archivos que dice mi firma funciona correctamente, no importando la posición de la hoja, si es la primera, la ultima o en medio.
Entiendo que el Libro_2 es abierto, se localiza la fila y después se cierra, obvio, agrega esta instruccion arriba de msgbox replace(filas(fila), "Fila ", "")
Código: Seleccionar todo   Expandir vistaContraer vista
oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
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: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor Chelo2 » Mar Oct 31, 2017 7:31 pm

Es rarísimo!!!... Tanto en mi notebook de mi casa, como la pc de mi oficina, en los dos lugares no me funciona y tiene el mismo comportamiento.

Me da el mensaje:

"No se encontró la expresión buscada."

y luego se posiciona en el MsgBox final y dice:

"Tipo de Dato o valor inadmisible. Indice fuera de área definida."

Si no cierro el Libro_2, puedo ver que el cursor queda posicionado en la Hoja1, como si la búsqueda la realizara en esa hoja y no en "Concluídos".

Por otra parte, si cambio la posición de la hoja "Concluidos" a la primera, ahí sí efectúa la búsqueda y me dice el n° de fila sin ningún error.

Todo sea por completar otros campos de la del último registro, para lo cual necesito saber el N° de fila. Salvo que haya otra forma que no estoy contemplando.

Por las dudas, dejo el hilo abierto por si surge alguna otra sugerencia.

Un saludo.

Chelo2
OpenOffice 4.1.3 en Windows 7
Chelo2
 
Mensajes: 100
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Mar Oct 31, 2017 8:14 pm

A ver así.
Asumo que abres Libro_2.ods, encuentras la fila y cierras otra vez el Libro_2.ods
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "C:\Users\Federico\Downloads\Libro_2.ods"

      oDoc = AbrirArchivo (Ruta, False, "", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
      'BUSCA EL CUIT EN LA BASE DE Cambios
      oHoja= oDoc.Sheets.getByName("Concluidos")
      'oHoja.isVisible = "True"
     
      'oHoja.unProtect ( "" )
      UltFila= UltimaFila(oHoja)+1
      'MsgBox "La fila es  "&UltFila
      oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
        document = oDoc.CurrentController.Frame
          dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
        dim args1(2) as new com.sun.star.beans.PropertyValue
       args1(0).Name = "ToPoint"
         args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()       
        consulta = sele.queryContentCells(21)
        filas = consulta.RowDescriptions
        fila = UBound(filas)
     
       If fila = -1 Then       
       oDoc.Close(true)
       Exit Sub
       Else
       oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
       End If
end sub
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: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor fornelasa » Mar Oct 31, 2017 10:06 pm

Según yo, es mas fácil usar una formula matricial para este trabajo, supongamos que en A1 anotamos el dato a buscar y en B1 queremos el resultado de la ultima coincidencia, entonces en B1 escribimos esta formula matricial:
Código: Seleccionar todo   Expandir vistaContraer vista
=MAX(SI(A1='file:///C:/Users/Federico/Downloads/Libro_2.ods'#$Concluidos.B1:B240;FILA(B1:B240);""))

Algo como lo anterior debería funcionar.
Saludos, Federico.
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: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Notapor Chelo2 » Mié Nov 01, 2017 5:42 pm

Hola Federico.... Te cuento que la última propuesta tampoco funcionó dándome el mismo mensaje de que no encontraba la búsqueda. pero se ve que hoy me levanté con un poco más de luces que estos días... :lol: :lol: .y probé de activar la hoja en la que quería buscar:

Código: Seleccionar todo   Expandir vistaContraer vista
'La activamos
   oDoc.getCurrentController.setActiveSheet(oHoja)


Y ahí SIIIIIIIIII ... funcionóooooo....

Te agradezco muchísimo tu aporte y tu compromiso con todos los integrantes del foro, aun con los que entendemos poco y nada de este mundo de la programación, pero tenemos ganas de aprender.

Un abrazo desde Argentina y pego el código completo por si alguna otra persona le puesa ser útil.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
   cadena = InputBox("Dato a buscar ....", "Busqueda")
         
   Ruta= "D:\Libro_2.ods"
   oDoc = AbrirArchivo (Ruta, False,, 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
   'BUSCA EL CUIT EN LA BASE DE Cambios
   oHoja= oDoc.Sheets.getByName("Concluidos")
   
   'La activamos
   oDoc.getCurrentController.setActiveSheet(oHoja)     

   UltFila= UltimaFila(oHoja)+1
   'MsgBox "La fila es  "&UltFila
   oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
   document = oDoc.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
   dim args1(2) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
    args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
       
       sele = oDoc.getCurrentSelection()       
       consulta = sele.queryContentCells(21)
       filas = consulta.RowDescriptions
       fila = UBound(filas)
     
       If fila = -1 Then       
       'oDoc.Close(true)
       Exit Sub
       Else
        msgbox replace(filas(fila), "Fila ", "")
       End If
       
        'VOLVEMOS A ACTIVAR LA HOJA 1
        oHoja= oDoc.Sheets.getByName("Hoja1")
         'La activamos
      oDoc.getCurrentController.setActiveSheet(oHoja)
      'oDoc.Close(true)   
end sub


Chelo2
OpenOffice 4.1.3 en Windows 7
Chelo2
 
Mensajes: 100
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados