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]