Seleccionar celdas, rangos, rangos con nombre, filas o columnas desde una macro en Calc

Estas tres funciones que te presentamos te permiten seleccionar celdas, rangos, rangos con nombre, filas o columnas de Calc desde una macro en OOo Basic.

El sistema es sencillo, y conocido para seleccionar filas, rangos o rangos con nombre, en cuyo caso siempre se utiliza la misma instrucción: getCelRangeByName. El rango indicado (B8, o B8:C14, o un rango con nombre) quedará inmediatamente seleccionado en la hoja activa.

No es tan sencillo para seleccionar filas o columnas. Habitualmente, los programadores seleccionan un rango de celdas, como por ejemplo, para seleccionar la columna B seleccionan el rango B1:B65536. Pero esto puede resultar muy peligroso, sobre todo, en la actual carrera entre las suites en cuanto al número de columnas y de filas, que en la versión 3.3 son unas pocas más... exactamente 1.048.576 filas.

Por lo tanto es mejor utilizar otro sistema; el que aquí presentamos seleccionará todas las filas (o columnas) que ocupe el rango indicado. Por ejemplo, el rango C4:C8 seleccionará las filas 4 a la 8.

public sub SeleccionarRango( cRango as string )
' cRango puede ser una celda A1, un rango A1:B3, o un rango con nombre
dim oRango as object

    oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( cRango )
    ThisComponent.getCurrentController.select( oRango )
   
end sub

public function SeleccionarFila( cRango as string )
' Selecciona las filas donde se situa cRango
' cRango puede ser una celda A1, un rango A1:B3, o un rango con nombre
dim oHoja   as object
dim dispatcher as object

    SeleccionarRango( cRango )
    oHoja = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(oHoja, ".uno:SelectRow", "", 0, Array())

end Function

public function SeleccionarColumna( cRango as string )
' Selecciona las columnas donde se situa cRango
' cRango puede ser una celda A1, un rango A1:B3, o un rango con nombre
dim oHoja   as object
dim dispatcher as object

    SeleccionarRango( cRango )
    oHoja = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(oHoja, ".uno:SelectColumn", "", 0, Array())

end Function

4 comentarios

Comentario De: cesar [Visitante]

Buenos dias
humm ejecuto el codigo y me dice que el argumento no es opcional un error de ooo basic que puede ser ?
gracias por sus escritos de programacion en ooo

03.09.13 @ 20:24 Reply to this comment
Comentario De: [Miembro]

Debes indicar un argumento para que se ejecuten las funciones, por ejemplo:

SeleccionarRango("B2:H12") selecciona las celdas B2 a H12
SeleccionarFila("B2") selecciona la fila 2
SeleccionarColumna("H12") selecciona la columna H

La selección no se muestra, pero si luego, por ejemplo, lo rellenas con un fondo, puedes comprobar que efectivamente quedan seleccionadas.

Saludos

03.09.13 @ 22:57 Reply to this comment
Comentario De: JRS [Visitante]

Help me!!

Necesito configurar una macro que seleccione únicamente hasta donde encuentre la última celda con valor y en base a ello graficar.

21.04.14 @ 23:38 Reply to this comment
Comentario De: [Miembro]

JRS: Mejor pásate por el Foro Oficial y allí quizás encontremos la forma de ayudarte con la macro.
No olvides adjuntar lo que ya llevas hecho, para que sepan que lo estás intentando :)

22.04.14 @ 12:16 Reply to this comment


Form is loading...