LibreOffice Calc OOoBasic: ERROR Else sin If

Iniciado por novicio, 13 Mayo 2018, 13:41 PM

0 Miembros y 1 Visitante están viendo este tema.

novicio

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.

Eleкtro

#1
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?:

Código (vb) [Seleccionar]
If (Expresión) Then

Else

End If


Aquí tienes más ejemplos (para OOo BASIC):

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.








novicio

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.

Uso If...Then...Else ¡ya no funciona!
Error de sintaxis de BASIC
Else/EndIf sin If

Da igual si pongo el End If, da el mismo error


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

Eleкtro

#3
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í:

Código (vbnet) [Seleccionar]
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:
Código (vbnet) [Seleccionar]
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:
Código (vbnet) [Seleccionar]
IIf(x=1, MsgBox("El número es igual a 1."), MsgBox("El número es distinto a 1."))

O el operador If:
Código (vbnet) [Seleccionar]
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.








novicio

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.