No sé donde colocar este tema; el subforo de Programación está orientado VBA, Jave, etc. Creo que aquí cuadra mejor.
Tengo LibreOffice y usando macros en Calc con lenguaje OOoBasic no funciona correctamente la instrucción If con Else. Se supone que es en su versión más simple
If (condición) Then [bloque instrucciones] Else [bloque instrucciones]
Pero no funciona. Da error de Else sin If.
¿Le pasa a alguien más? ¿Es un fallo de LibreOffice?
Solamente funciona la versión simple If... Then
En cuanto se mete un Else ya no va, así sea la versión simple Con un solo Else como la versión compleja con ElseIf... Else
Lo mismo si se pone EndIf (o End If) al final del primer If que si no se pone. Es poner un solo Else y ya da error de Else sin If, aunque el primer If esté claro.
¿En OpenOffice pasa lo mismo? Lo digo por cerrar LibreOffice y pasarme al otro, pero es que creo que ya anda de capa caída con poca gente y sin soporte.
Cita de: novicio en 13 Mayo 2018, 13:41 PM
Tengo LibreOffice y usando macros en Calc con lenguaje OOoBasic
Si realmente estás utilizando
LibreOffice, que no
OpenOffice, entonces al parecer el lenguaje de scripting que estás usando es
LibreOffice BASIC (como indica en su página web: https://help.libreoffice.org/Common/Scripting ), no
OpenOffice.org BASIC (
OOo BASIC). Solo lo comento para hablar con propiedad. En principio no debería haber diferencias tan importantes como para crear problemas de compatibilidad entre un script escrito en un dialecto y el otro, de hecho quizás no exista diferencia alguna más que el nombre, pero quien sabe, podrían tener algunas pequeñas diferencias entre si...
De todas formas la sintaxis de una condicional en cualquier dialecto
BASIC no debería cambiar... ¿te has asegurado de estar utilizando esta sintaxis?:
If (Expresión) Then
Else
End If
Aquí tienes más ejemplos (para
OOo BASIC):
- https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Branching
Por cierto, el tal
LibreOffice no te indica cual es exactamente el error?... ¿solo te dice "error" y ya está?. ¿Has probado a escribir la macro/script en otro de los lenguajes soportados como por ejemplo javascript o Python?.
Saludos.
LibreOffice sí me dice el error, me indica que hay un Else o EndIf sin If.
Lo vemos con un ejemplo tonto. Pongo solamente If...Then y funciona.
(https://imgur.com/cwyAkIS)
Uso If...Then...Else ¡ya no funciona!
Error de sintaxis de BASIC
Else/EndIf sin If
(https://imgur.com/yD0605t)
Da igual si pongo el End If, da el mismo error
(https://imgur.com/HJBfQBP)
EDITO: Por alguna razón las imágenes no se ven, dejo las direcciones:
https://imgur.com/cwyAkIS
https://imgur.com/yD0605t
https://imgur.com/HJBfQBP
En mi comentario anterior acabo de explicarte y mostrarte como debes usar la sintaxis, no solo eso sino que además te indiqué un enlace para que lo leyeses y comprendieses mejor con documentación sobre el uso de If/Then/Else y ejemplos de uso... pero no veo que hayas aplicado el ejemplo que te dije en ninguna de las imágenes que has mostrado...
Sería así:
If x=1 Then
MsgBox("El número es igual a 1.")
Else
MsgBox("El número es distinto a 1.")
End If
Con respecto al error en las imágenes que has mostrado...
En un bloque de condicional multilinea es necesario especificar 'End If' para cerrar el bloque, mientras que si usas la sintaxis de una sola linea no es necesario especificarlo. Creo que de ahí vienen las confusiones que has tenido, el fallo que cometes en la imagen nº2 y nº3 se debe a eso, como te está indicando el error, falta un End If para cerrar el bloque de la condicional multilinea... y aparte de eso también es que estás colocando la sentencia del MsgBox a la derecha de "Then" y "Else", pero como ves en el ejemplo que acabo de mostrarte, arriba especifico la expresión a evaluar, y en la linea de abajo la sentencia del MsgBox... aunque esto no tiene por que ser considerado un error en ese dialecto de BASIC (o si), pero mejor que sigas el ejemplo que se te da...
Si lo que buscas es colocarlo todo en una sola linea... bueno, yo no te recomiendo usar la sintaxis de una linea, ya que aparte de verse horrible (casi rozando el adjetivo Ininteligible) y ser motivo suficiente para acabar haciendo un código espagueti, también es algo que te limita la depuración del código, y te impide añadir un control de errores y te estorbará cuando necesites añadir más sentencias aparte de ese MsgBox, pero bueno, si realmente quieres hacerlo en una linea a pesar de esta recomendación entonces en LibreOffice BASIC deberías poder usar una de las siguientes opciones:
La sintaxis de una linea de condicional IF/Else:
If x=1 Then MsgBox("El número es igual a 1.") Else MsgBox("El número es distinto a 1.")
La función IIf:
IIf(x=1, MsgBox("El número es igual a 1."), MsgBox("El número es distinto a 1."))
O el operador If:
If(x=1, MsgBox("El número es igual a 1."), MsgBox("El número es distinto a 1."))
...de lo contrario, ya te mostré la sintaxis de una condicional multilinea.
Saludos.
Gracias por las molestias que te has tomado Elektro. Efectivamente es que no pensaba yo que el intérprete BASIC fuese tan sensible a que colocases las instrucciones inmediatamente detrá del Then y del Else o que las colocases en otra línea.
Por mi el tema queda cerrado.
Un saludo.