Hola comunidad, nuevamente acudo a vuestra ayuda. Resuta que estoy
intentando hacer en una macro lo que puedo hacer con el puntero del mouse
pero no puedo conseguirlo.

Ejemplo de lo que hago con el mouse: selecciono las celdas C4:E4, copio su
contenido (el cual son fórmulas), selecciono las celdas G8:I15, pego su
contenido. De esta forma lo que logro es -en un solo paso- copiar las
formulas de las primeras celdas en todas las celdas de la segunda selección.

Bueno, a lo mejor que llegué fue a esto:


---------------------------- CÓDIGO
------------------------------------------------------------------
Dim CopyRangoOrigen As New com.sun.star.table.CellRangeAddress
Dim CopyRangoDestino As New com.sun.star.table.CellAddress

    For i = 1 to 8
        CopyRangoOrigen.Sheet = 0
        CopyRangoOrigen.StartColumn = 2        'Columna C
        CopyRangoOrigen.StartRow = 3            'Fila 4
        CopyRangoOrigen.EndColumn = 4            'Columna E
        CopyRangoOrigen.EndRow = 3                'Fila 4

    iProxLineaVacia = oHoja1.GetCellRangeByName("A1").Value   'En esta celda
hay una fórmula que devuelve el número de la siguiente fila vacía.

        CopyRangoDestino.Sheet = 0
        CopyRangoDestino.Column = 6            'Columna G
        CopyRangoDestino.Row = iProxLineaVacia    'Próxima fila vacía
(suponemos que al inicio la condición se cumple en la fila 8)

        oHoja1.CopyRange(CopyRangoDestino, CopyRangoOrigen)
    Next

---------------------------------------------- FIN CÓDIGO
--------------------------------------------------------------------

Es decir, acá lo que haría sería más o menos esto: selecciono el contenido
de las celdas C4:E4, lo copio, selecciono la celda G8 y pego, y así 8 veces.

En este ejemplo no hay demasiados problemas ya que el número de repeticiones
no es tan elevado, pero se complica cuando estas repeticiones aumentan en
gran cantidad. ¡¡Y ni que pensar si este proceso se debería volver a hacer
en algún otro lugar del código!!

También estuve analizando esto otro:

-------------------------------- CÓDIGO
------------------------------------------
    oRangoOrigen = oHoja1.getCellRangeByName( "C4:E4" )
    oRangoDestino = oHoja1.getCellRangeByPosition( "G8:I15" )
    oRangoDestino.setDataArray( oRangoOrigen.getDataArray() )
-------------------------------- FIN CÓDIGO
------------------------------------

Pero esto únicamente me permite copiar los datos en el mismo tamaño de rango
que el origen, es decir, así como está, daría error.


¿Alguna sugerencia?


Desde ya, muchas gracias.



Leonardo.

Responder a