¿Cómo pasar datos a una subrutina o función?
Imaginemos que necesitamos una subrutina que presente un mensaje variable en función de nuestras necesidades. ¿Podemos definir qué mensaje va a presentar?
Si de alguna forma le enviamos el mensaje a la subrutina, podrá hacerlo.
Para enviar el mensaje, primero lo tendremos que colocar en un recipiente, que utilizará la subrutina para presentar el mensaje. Ese recipiente en BASIC se llama variable. Una variable es un recipiente que puede contener diferentes cosas.
Veamos cómo deberíamos escribir ese código:
Sub PintaMensaje( MiMensaje ) MsgBox MiMensaje End Sub
Hemos creado una nueva subrutina, que añadiremos justo tras finalizar la rutina Main, que hemos llamado PintaMensaje. Dentro del juego de paréntesis de la subrutina hemos agregado una palabra: MiMensaje. Esa palabra es un argumento que enviamos a la subrutina. Ese argumento es una variable que se cargará con el valor que nosotros deseamos.
Y ¿cómo cargamos el mensaje que nosotros deseamos en la variable? Vamos a modificar nuestra subrutina Main como ves a continuación:
Sub Main() PintaMensaje "Hola, buenos días" PintaMensaje "Hasta luego, ¡que trabajes poco y te cunda mucho!" End Sub Sub PintaMensaje( MiMensaje ) MsgBox MiMensaje End Sub
Si ejecutas la macro Main procederá a ejecutar las órdenes que contiene secuencialmente. Primero llamará a la subrutina PintaMensaje, enviándole un texto que, como ves, hemos encerrado entre comillas dobles.
En pantalla verás algo como ésto:
Tras hacer clic sobre el botón Aceptar, la subrutina Main que estaba a la espera ejecuta la segunda orden, enviando a la subrutina PintaMensaje otro texto, que también está encerrado entre comillas dobles. En pantalla se presenta algo como ésto:
De nuevo hacemos clic sobre el botón Aceptar. La subrutina Main ya ha ejecutado todas sus órdenes, así que la macro ha finalizado, y no hará nada más.
Por lo tanto, para enviar un dato a una subrutina, debemos escribir entre los paréntesis el nombre de la variable que contendrá ese dato, y luego, utilizarlo. ¿Cómo?
Seguro que lo has visto. La instrucción MsgBox que antes pintaba un texto entre comillas, ahora recibe la variable MiMensaje, y será el contenido de la variable lo que pinte en pantalla.
Exactamente lo mismo haremos en el caso de que deseemos enviar un dato a una función.
Enviar varios datos a una subrutina o a una función
Si necesitas enviar varios datos a una subrutina o a una función, deberás añadir los argumentos necesarios entre los paréntesis de la misma, separados por una coma.
Cuidado, si utilizas Calc, a la hora de separar argumentos se utilizan puntos y comas. En BASIC se utilizan comas. Bueno, esto es para OpenOffice en versión Español de España. Puede ser que en función de tu configuración regional sea al contrario. El caso es que si utilizas una cosa en Calc, es la otra en OOo Basic |
Veamos un ejemplo: Vamos a enviar tres mensajes a nuestra subrutina PintaMensaje. ¡Atento a los cambios!
Sub Main() PintaMensaje "Hola", "¿Qué tal?", "¡Hasta luego!" End Sub Sub PintaMensaje( Primero, Segundo, Ultimo) MsgBox Primero MsgBox Segundo MsgBox Ultimo End Sub
Como ves, la subrutina PintaMensaje ahora recibe tres datos, que carga en tres variables, llamadas Primero, Segundo y Ultimo, y que escribimos dentro de los paréntesis separados por comas.
Hemos agregado una instrucción MsgBox para que pinte cada mensaje, cada una de ellas con una de las variables que necesitamos para que reciban los tres datos.
Mientras tanto, la subrutina Main tiene ahora una sóla instrucción, que llama a PintaMensaje y le envía tres datos, que separamos por comas.
¿Te gustaría que además de mostrarse el mensaje sonase un pitido en tu ordenador?
Activa los altavoces, y prueba con éste código:
Sub Main() PintaMensaje "Hola, buenos días" PintaMensaje "Hasta luego, ¡que trabajes poco y te cunda mucho!" End Sub Sub PintaMensaje( MiMensaje ) Beep MsgBox MiMensaje End Sub
Y con este otro:
Sub Main() PintaMensaje "Hola", "¿Qué tal?", "¡Hasta luego!" End Sub Sub PintaMensaje( Primero, Segundo, Ultimo) Beep MsgBox Primero Beep MsgBox Segundo Beep MsgBox Ultimo End Sub