es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Macro para almacenar datos de valor de celdas y retener el valor incluso cuando el contenido de la celda cambia.

Necesito almacenar de forma permanente el valor instantáneo de algunas celdas, B4 y B5.

Mi problema es que cuando el contenido de las celdas cambia, también lo hacen mis variables almacenadas, pero quiero que las variables mantengan los valores que tomaron por primera vez cuando se ejecuta la macro “Registrar valores instantáneos”, incluso después de introducir nuevos datos manualmente en B4 y B5, básicamente para construir un registro permanente de qué valor tenían B4 y B5 cada vez que se llama a la macro.

Esto es lo que tengo:

' Variables globales...
Global FirstCell
Global SecondCell
' ...

Sub RecordarValoresInstantáneos
FirstCell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition( 1, 3 )
SecondCell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition( 1, 4 )
End Sub

Sub ConsultarValoresAlmacenados
Print "FirstCell = "; FirstCell.value; ", "; "SecondCell = ";SecondCell.value
End Sub

El hecho de que haya una función “deshacer” en LO significa que el contenido de las celdas en un instante particular puede ser almacenado (en algún array presumiblemente). Aunque no quiero profundizar en eso, debe haber alguna manera sencilla de lograr lo que necesito, ¿pero cómo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para almacenar permanentemente el valor instantáneo de las celdas B4 y B5 en LibreOffice Calc, puedes crear variables globales y usar una macro para registrar los valores de las celdas en un instante específico. Para asegurarte de que estos valores se mantengan estáticos, puedes escribir los valores en una ubicación separada en la hoja de cálculo, como una hoja oculta o una hoja que no se utiliza para ingresar datos.

    Aquí tienes un ejemplo de cómo puedes modificar el código proporcionado para lograr esto:

    ' Variables globales para almacenar el valor de B4 y B5
    Global FirstCellValue
    Global SecondCellValue
    
    Sub Record_Instantaneous_Values()
        ' Obtener la hoja activa
        oSheet = ThisComponent.CurrentController.ActiveSheet
    
        ' Registrar el valor de las celdas B4 y B5
        FirstCellValue = oSheet.getCellRangeByName("B4").getValue()
        SecondCellValue = oSheet.getCellRangeByName("B5").getValue()
    
        ' Escribir los valores en una hoja oculta para asegurarse de que se conserven
        oHiddenSheet = ThisComponent.getSheets().getByName("HiddenSheet")
        oHiddenSheet.getCellByPosition(0,0).setValue(FirstCellValue)
        oHiddenSheet.getCellByPosition(1,0).setValue(SecondCellValue)
    End Sub
    
    Sub Peek_at_stored_values()
        ' Obtener los valores previamente registrados
        FirstCellValue = ThisComponent.getSheets().getByName("HiddenSheet").getCellByPosition(0,0).getValue()
        SecondCellValue = ThisComponent.getSheets().getByName("HiddenSheet").getCellByPosition(1,0).getValue()
    
        ' Mostrar los valores
        Print "FirstCell = "; FirstCellValue; ", "; "SecondCell = "; SecondCellValue
    End Sub
    

    En este código modificado, los valores de las celdas B4 y B5 se registran cuando se llama a la macro Record_Instantaneous_Values y los valores se escriben en una hoja oculta. La macro Peek_at_stored_values lee los valores de la hoja oculta y los muestra.

    Al escribir los valores registrados en una hoja separada, los valores no se ven afectados por los cambios en las celdas originales B4 y B5, lo que te permite tener un registro permanente de sus valores.

Comments are closed.