Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la
Guía de supervivencia.
Las macros no son fáciles pero si te interesa la programación para OpenOffice/LibreOffice lee los párrafos citados en una respuesta anterior.
...Para aprender a programar en OpenOffice/LibreOffice...
Este es el código para LibreOffice Calc Basic. Si hay algún error es totalmente involuntario. Haz pruebas...
Código: Seleccionar todo
REM ***** BASIC *****
Option Explicit
'En BASIC prefiero declarar las variables explícitamente para prevenir errores
Sub Iterar()
'
' Valor de Cuota para interes deudor
' Macro para LibreOffice Calc
' Iteracion
'
'Declaración de variables
Dim HojaActiva As Object
'Si estas variables no son de Tipo MONEDA modificar por la que corresponda (DOUBLE, LONG, ...)
Dim Limite As Currency
Dim Delta As Currency
'Accedemos a la hoja activa
HojaActiva = ThisComponent.getCurrentController().getActiveSheet()
'En LibreOffice Calc Basic las variables objeto deben referenciarse siempre
With HojaActiva
'ActiveWorkbook.Unprotect "DCGN"
.unProtect("DCGN")
'limite es el saldo de capital de la cuota posterior a la ingresada
'Limite = Cells(6, 10).Value
'En LibreOffice Calc Basic el acceso a celdas por su posición es (columna, fila) y, además,
'comienzan en 0 (cero), no en 1
Limite = .getCellByPosition(9, 5).getValue()
'Delta = Cells(10, 5).Value
Delta = .getCellByPosition(4, 9).getValue()
'1ro
If Limite > 1000000 Then
'Aunque existe "While...Wend" es preferible usar "Do While...Loop"
Do While Limite > 1000000
Delta = Delta + 10000
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
ElseIf Limite < -1000000 Then
Do While Limite < -1000000
Delta = Delta - 10000
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
Else
Delta = Delta
End If
'2do
If Limite > 10000 Then
Do While Limite > 1000
Delta = Delta + 100
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
ElseIf Limite < -10000 Then
Do While Limite < -1000
Delta = Delta - 100
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
Else
Delta = Delta
End If
'3ro
If Limite > 1000 Then
Do While Limite > 1000
Delta = Delta + 1
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
ElseIf Limite < -1000 Then
Do While Limite < -1000
Delta = Delta - 1
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'Limite = Cells(6, 10).Value
Limite = .getCellByPosition(9, 5).getValue()
Loop
Else
Delta = Delta
End If
'Cells(10, 5).Value = Delta
.getCellByPosition(4, 9).setValue(Delta)
'MsgBox (Simulación Terminada - Calculo del valor de la cuota)
MsgBox "Simulación Terminada - Calculo del valor de la cuota", MB_OK + MB_ICONINFORMATION, "¡Atención!"
'ActiveWorkbook.Protect "DCGN"
.Protect("DCGN")
End With
'
End Sub
Por cierto, modifica tu firma porque no existe "openoffice 6.3".
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.