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]
