I need to permanently store the instantaneous value of some cells, B4 and B5.
My problem is when the cell contents change, so do my stored variables, but I want the variables to retain the values they first pick up when the "Record_Instantaneous_Values" macro is run, even after new data is manually entered into B4 and B5 - basically to build up a permanent record of what value B4 and B5 had whenever the macro is called.
Here's what I have
' Global Variables....
Global FirstCell
Global SecondCell
' ...
Sub Record_Instantaneous_Values
FirstCell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition( 1, 3 )
SecondCell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition( 1, 4 )
End Sub
Sub Peek_at_stored_values
Print "FirstCell = "; FirstCell.value; ", "; "SecondCell = ";SecondCell.value
End Sub
The fact there's an "undo" function in LO, means cell contents at a particular instant can be stored (in some array presumably). While not wanting to delve into the depths of that, there must be some simple way to achieve what I need, but how?
Here is Basic code that stores the values in a global variable.
Type RecordedCellType
col As Integer
row As Integer
val As Single 'floating point value of cell
init As Boolean 'has the value been initially recorded?
End Type
Const NUM_CELLS_TO_RECORD = 2
Global CellValues
Sub Initialize_Recorded_Values
Dim CellValuesLocal(NUM_CELLS_TO_RECORD) As New RecordedCellType
CellValues = CellValuesLocal
For CellNum = 1 to NUM_CELLS_TO_RECORD
CellValues(CellNum).init = False
Next
CellValues(1).col = 1
CellValues(1).row = 3
CellValues(2).col = 1
CellValues(2).row = 4
Call Peek_at_stored_values
End Sub
Sub Record_Instantaneous_Values
oSheet = ThisComponent.CurrentController.ActiveSheet
For CellNum = 1 to NUM_CELLS_TO_RECORD
With CellValues(CellNum)
If .init = False Then
oCell = oSheet.getCellByPosition(.col, .row)
.val = oCell.getValue()
.init = True
End If
End With
Next
Call Peek_at_stored_values
End Sub
Sub Peek_at_stored_values
String sDisplay
For CellNum = 1 to NUM_CELLS_TO_RECORD
With CellValues(CellNum)
sDisplay = sDisplay & "Cell(" & .col & _
"," & .row & ") "
If .init = True Then
sDisplay = sDisplay & "= " & .val
Else
sDisplay = sDisplay & "not initialized"
End If
End With
If CellNum < NUM_CELLS_TO_RECORD Then
sDisplay = sDisplay & CHR$(13) 'newline
End If
Next
MsgBox sDisplay
End Sub