El jue, 18-06-2009 a las 08:34 -0500, Mauricio Baeza escribió:
> Antonio Martinez escribió:
> > Buscando por ahi encontre una posible solucion que todavia no he
> > implementad
> Parece ser que no viste mi respuesta, la vuelvo a enviar...
> 
> Hola Antonio...
> Hola a todos...
> 
> Para conocer, tanto el "rango actual" de datos, como el "área de 
> usuario", que como sabes, son dos cosas diferentes, tienes que hacer uso 
> de un "cursor", de la siguiente manera:
> 
> Primero; ¿que es un cursor? (copio de mis apuntes): Un cursor, es un 
> objeto que nos permite movernos por la hoja entera o dentro de un rango 
> especificado sin afectar o modificar al rango a partir del cual se crea. 
> Lo más usual es crearlo a partir de un rango para desplazarse dentro de 
> el, pero además tiene métodos muy útiles para expandir por ejemplo a la 
> región actual, que como sabes, es el rango de celdas “con datos” 
> delimitado por filas y columnas en blanco, la región actual es un 
> concepto sumamente, útil y poderoso cuando se programa...
> 
> Los siguiente ejemplos, hacen uso de la siguiente función personalizada 
> para conocer el rango de datos pasado como argumento:
> 
> Function DireccionRango(Rango As Object) As String
> Dim sTmp As String
> 
> Select Case Rango.getImplementationName()
> Case "ScCellObj"
> sTmp = Rango.getSpreadsheet.getName() & "." & _
> Rango.getColumns().getByIndex(0).getName() & _
> Rango.getCellAddress.Row + 1
> Case "ScCellRangeObj", "ScCellCursorObj"
> sTmp = Rango.getSpreadsheet.getName() & "." & _
> Rango.getColumns().getByIndex(0).getName() & _
> Rango.getRangeAddress.StartRow + 1 & ":" & _
> Rango.getColumns().getByIndex(Rango.getColumns().getCount()-1).getName() & _
> Rango.getRangeAddress.EndRow + 1
> Case "ScCellRangesObj"
> sTmp = Join( Split(Rango.getRangeAddressesAsString(),";"),Chr(13) )
> End Select
> DireccionRango = sTmp
> 
> End Function
> 
> 
> En el siguiente ejemplo, creamos un cursor a partir de la celda actual y 
> obtenemos diversa información de el:
> 
> Sub Cursores1()
> Dim oSel As Object
> Dim oCursor As Object
> 
> 'Partimos de la seleccion
> oSel = ThisComponent.getCurrentSelection()
> 'Solo si es una sola celda
> If oSel.getImplementationName() = "ScCellObj" Then
> 'Mostramos la direccion de la celda seleccionada
> MsgBox DireccionRango( oSel )
> 
> 'Creamos un cursor a partir de esta celda
> oCursor = oSel.getSpreadSheet().createCursorByRange( oSel )
> 'Verificamos que apunten a la misma celda
> MsgBox DireccionRango( oCursor )
> 
> 'Nos movemos al inicio de la region actual
> oCursor.gotoStart()
> MsgBox DireccionRango( oCursor )
> 
> 'Nos movemos al final
> oCursor.gotoEnd()
> MsgBox DireccionRango( oCursor )
> 
> 'Expandismo el cursor a toda la region actual
> oCursor.collapseToCurrentRegion()
> MsgBox DireccionRango( oCursor )
> 
> 'Mostramos de nuevo la direccion de la celda seleccionada
> 'observa que esta no se a movido
> MsgBox DireccionRango( oSel )
> Else
> MsgBox "Selecciona solo una celda"
> End If
> End Sub
> 
> 
> En una hoja de calculo, el “área de usuario”, es aquel rango 
> “efectivamente” usado, es muy dinámico pues varia de acuerdo a su uso y 
> eliminación, en una hoja nueva el inicio y el final de esta área siempre 
> será el mismo, la celda A1, si tienes “una” sola celda usada, esta, será 
> el inicio y el fin de tu área de usuario, la cosa cambia en cuanto 
> tienes dos o más celdas usadas, la regla es: el inicio de tu área de 
> usuario será la celda (“con datos”) que este más cercana al extremo 
> superior izquierdo de la hoja y el final será la celda (“con datos”) que 
> este más cercana al extremo inferior derecho de dicha hoja, y digo que 
> es dinámica, por que si eliminas datos o celdas, esta área se ira 
> ajustando conforme a estos cambios.
> 
> Sub Cursores13()
> Dim oSel As Object
> Dim oCursor As Object
> 
> oSel = ThisComponent.getCurrentSelection()
> If oSel.getImplementationName() = "ScCellObj" Then
> 
> oCursor = oSel.getSpreadSheet().createCursorByRange( oSel )
> 
> 'Vamos al inicio del area usada, el argumento False, evita que se
> 'expanda la selección del rango
> oCursor.gotoStartOfUsedArea( False )
> MsgBox DireccionRango( oCursor )
> 
> 'Ahora vamos al final
> oCursor.gotoEndOfUsedArea( False )
> MsgBox DireccionRango( oCursor )
> 
> Else
> MsgBox "Selecciona solo una celda"
> End If
> End Sub
> 
> 
> Saludos a todos...
> 
> Mauricio

Buen aporte, gracias.
-- 
Saludos, 
Mauricio J. Adonis C.
----------------------------------------------------------------------------
Usuario Linux  # 482032
Usuario Ubuntu #  25554
Ubuntu Code of Conduct - 1.0.1 signatario
(FD9329AC66C0907805831BF8E8D0B29A3AE3D244)
----------------------------------------------------------------------------

Attachment: signature.asc
Description: Esto es una parte de mensaje firmado digitalmente

Responder a