Me he dado cuenta de que en LibreOffice, programando macros, la instrucción Redim modifica el valor de la variable que se está usando para redimensionar. Adjunto un trozo de código de un programa que estoy haciendo:
...
n = Hoja.getCellByPosition(1,0).Value
MsgBox "n=" & n
Redim A(n,n)
Redim Ifil(n)
Redim Icol(n)
' Introducir datos de la matriz en hoja
MsgBox "Rellenar matriz a partir de B2 y aceptar"
MsgBox "n=" & n
...
Pues bien en este código, al no funcionar el programa inserté las dos instrucciones MsgBox para controlar el valor de n. Y resulta que el valor es distinto antes y después de Redim.
Por ejemplo si al principio es n=3, después de Redim me da n=7. Si borro una de las dos instrucciones sobre Ifil o Icol me da respectivamente antes y después 3/6. Si borro las dos 3/5. Si borro la referida a A me da 3/5. Si borro todas n se mantiene 3/3.
Parece que cada vez que n interviene en un redimensionamiento aumenta +1. Y esto sucede tanto si n es local a la subrutina como si la declaro Global fuera de la misma.
Esto es bastante chungo porque uso posteriormente n en el programa, y claro me descontrola todo porque interviene en varios bucles.
¿Le ha pasado a alguien? ¿Tiene solución? Se me ocurre recargar n después de cada Redim, pero claro es bastante chapucero. Además no sé si al dimensionar la matriz A me la dimensiona n x n o n x n+1 porque no sé si al redimensionar A también aumenta una unidad entre una y otra dimensión.
¿Alguna idea o consejo?
[RESUELTO] Redim modifica las variables
[RESUELTO] Redim modifica las variables
Última edición por mauricio el Mar May 15, 2018 2:55 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
Razón: Marcar icono de resuelto
LibreOffice Versi??n: 5.4.6.2 (x64)
Windows 8.1
Windows 8.1
Re: LibreOffice-Macros: Redim modifica las variables de dime
No puedo reproducir el error, en el siguiente código, n sigue valiendo 10 despues del Redim
Asegurate de no estar modificando el valor de n en algún otro proceso, de todos modos es mala idea usar los mismos nombres de variables para cosas diferentes.
Saludos
Código: Seleccionar todo
Dim n As Integer
Dim m(5)
n = 10
MsgBox n
MsgBox UBound(m)
ReDim m(n)
MsgBox n
MsgBox UBound(m)
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: LibreOffice-Macros: Redim modifica las variables de dime
La verdad no lo entiendo. Efectivamente tu código funciona bien. Pero no sólo eso sino que el código que ayer no me funcionaba, hoy sí funciona correctamente. Ahora que lo recuerdo, ayer mientras trabajaba hubo un momento en que se atascó el ordenador y salió momentaneamente en el título de la pestaña el "Libreoffice (no responde)" pero se repuso y siguió funcionando. Igual fue eso. El caso es que hoy el código si fuciona correctamente y n no varía después de Redim. En fin, misterios de la informática.
NOTA: no es que use n para varias cosas, n es el orden de una matriz; es un programa para invertir matrices -por el método de Gauss-Jordan- y hay que extender varios bucles sobre filas y columnas (n). Por lo demás el programa ya funciona.
Gracias por tu interés.
Un saludo.
NOTA: no es que use n para varias cosas, n es el orden de una matriz; es un programa para invertir matrices -por el método de Gauss-Jordan- y hay que extender varios bucles sobre filas y columnas (n). Por lo demás el programa ya funciona.
Gracias por tu interés.
Un saludo.
LibreOffice Versi??n: 5.4.6.2 (x64)
Windows 8.1
Windows 8.1
Re: [RESUELTO] Redim modifica las variables
En mi experiencia, reitero lo de "mi experiencia", todas, todas las implementaciones de Basic son algo "incompletas", por decirlo de alguna manera...
Usa Python.
Saludos
Usa Python.
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro