Mauricio,

Simplemente !magistral!

Si efectivamente, en base a tus explicaciones, lo que yo buscaba era el
"area de usuario"

De nuevo mis felicitaciones y gracias

Saludos

Mauricio Baeza escribió en mensaje <[email protected]>...
>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
>
>
>
>
>
>--
>__________________________________
>Todo lo que no es dado es perdido




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Responder a