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 sobre “Seleccionar celdas, rangos, rangos con nombre, filas o columnas desde una macro en Calc”

  1. cesar Contestar

    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

  2. SalvaDCH Autor del artículoContestar

    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

  3. JRS Contestar

    Help me!!

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

  4. SalvaDCH Autor del artículoContestar

    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 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *