Sunteți pe pagina 1din 10

Subrutinas de cdigo, procedimientos y funciones en vb

Subrutinas de cdigo

Se denomina subrutina a una porcin de cdigo que tiene como principal funcin
ejecutar una determinada tarea. Estas tienen un nombre para poder identificarlas y
luego poder llamarlas para poder utilizarlas.

Las subrutinas tienen un principio y un fin y estas pueden tener distinto tipo de
alcance, o sea pueden ser de tipo privadas o pblicas.

En el siguiente ejemplo se muestra una subrutina que crea visual basic


automticamente cuando en un formulario insertamos un botn llamado Command1
y desde la ventana de eventos seleccionamos el evento click del mismo

Private Sub Command1_Click()

End Sub

Ahora, si colocamos por ejemplo un control TextBox llamado TextPedidos y hacemos


doble click sobre el mismo, se crea el procedimiento por defecto para los TextBox,
que es el evento Change

Private Sub TextPedidos_Change()

End Sub

En estos 2 ltimos ejemplos tenemos una subrutina o procedimiento de tipo Privado,


esto quiere decir que la podemos utilizar solo en el formulario o mdulo donde est
declarada o escrita

La palabra sub le sigue el nombre de la rutina que la identifica. En este caso


Command1_click() y en el otro ejemplo TxtPedidos_Change().

Si quisiramos que estos procedimientos se puedan llamar desde otro formulario, lo


que tendramos que hacer es cambiar el alcance del procedimiento, en ves de Private
Sub cambiarlo por Public Sub. si hacemos esto, ese procedimiento de cdigo puede
ser utilizado desde cualquier parte del proyecto.
Subrutinas y Procedimientos propios

Tambin podemos crear nuestros propios Procedimientos y Subrutinas de cdigo


para ejecutar una determinada tarea.

Para crear un procedimiento de cdigo se debe escribir la palabra Private


sub o Public sub (depende el alcance), seguida del nombre del procedimiento (un
nombre que queramos) y los parmetros, si es que le enviaremos parmetros (los
parmetros son opcionales). Adems el procedimiento debe ser escrito en un lugar
vaco de la ventana de cdigo, es decir nno se puede crear un procedimiento dentro
de otro

Un ejemplo para crear un procedimiento:

Private Sub ProcedimientoBorrar()

label1 = ""
label2 = ""
label3 = ""

End Sub

En este ejemplo creamos un procedimiento muy simple que tendr la funcin


especfica de borrar el contenido de 3 controles label.

Pero ahora te preguntars como hago para que se ejecute el procedimiento que he
creado ?.

Muy fcil. Solo debemos escribir el nombre del procedimiento en el lugar donde
queremos que se ejecute. Por ejemplo supongamos que tenemos un formulario con
3 controles Label (Label1, Label2 y Label3), Tambin un Commandbutton llamado
Command1 y en la ventana de cdigo hemos escrito el procedimiento del ejemplo
anterior. Si nosotros queremos llamar al procedimiento, que borrar el contenido de
los label cuando hagamos click en el Command1 lo haramos as:

Private Sub command1_click()

ProcedimientoBorrar

End Sub

Al presionar el Command1 visual basic detectara el nombre ProcedimientoBorrar, y


automticamente saltara al lugar donde creamos el procedimiento y ejecutara las
lneas de cdigo que haya en ese procedimiento.
Tambin podemos llamar a un procedimiento utilizando la palabra Call, que quiere
decir llamar, seguida del nombre del procedimiento, pero en este caso si utilizamos
call y nuestro procedimiento contiene parmetros, debemos pasarlos entre
parntesis ( los parmetros de procedimientos y funciones se explican a
continuacin)

una vez que se ha terminado de ejecutar las instrucciones que estn dentro del
bloque del procedimiento, volvera a la lnea siguiente de donde fue llamado el
mismo, y ejecutara todas las lneas restantes de cdigo. En este caso no ejecutara
nada mas por que no hemos puesto ninguna otra instruccin debajo de
ProcedimientoBorrar.

La principal ventaja de crear procedimientos de cdigo es que evita tener que escribir
varias veces las mismas instrucciones en un programa, el cdigo se hace mucho mas
funcional y entendible, se pueden dividir un problema (una rutina), en varios
procedimientos y probarlos independientemente, y adems la posibilidad de enviar
parmetros a los procedimientos

Pasar parmetros a los procedimientos:

Se utilizan los parmetros en los procedimientos para que el procedimiento no


ejecute siempre las mismas lneas de cdigo y pueda variar, teniendo la posibilidad
de hacerlo mas dinmicamente. En ciertas ocaciones no es necesario enviar
parmetros, pero en otras es prcticamente fundamental. Los parmetros son datos,
casi de cualquier tipo, que se pasan seguido del nombre del procedimiento, y si es
mas de uno deben ir separados por comas (,). Ejemplo:

DatosPersonales "Luciano", 25, "La plata"

En este ejemplo pasamos tres parmetros: El primero es un nombre y es un dato de


tipo String y por ende debe ir entre comillas. El segundo es un nmero y el tercero
tambin un string. , o sea una cadena de caracteres

Pero la cosa no queda ac. Si nosotros vamos a pasar parmetros a un


procedimiento, cuando creamos el procedimiento debemos establecer que tipo de
parmetros va a recibir el mismo. Ejemplo:

Private Sub DatosPersonales(nombre As String, edad As Integer, ciud


ad As String)

Label1 = nombre
Label2 = edad
Label3 = ciudad
End Sub

siguiendo, el ejemplo anterior creamos un procedimiento con tres parmetros.


Cada parmetro se declara como se hace con las variables, o sea que debemos darles
un nombre a la variable y definir el tipo de dato ( sin utilizar la palabra Dim ) que
recibir cuando las llamemos.

Ahora podramos por ejemplo, en el evento click de un Command1, llamar al


procedimiento y pasarle los parmetros.

Coloca un Command1, 3 controles Label, copia en la ventana de cdigo el


procedimiento anterior llamado DatosPersonales, y ahora pega el siguiente cdigo

Private sub command1_click()

DatosPersonales "Luciano", 25, "La plata"

End sub

Al presionar el botn se llamar al procedimiento que habamos creado


anteriormente, y le pasar los valores de los parmetros en el orden en que estn
establecidos declarados en el procedimiento. Esto quiere decir que el primer
parmetro con el valor "Luciano" se almacenar o asignar a la variable nombre , el
valor 25 se le asignar a la variable edad y el ltimo valor a la variable ciudad.

Despus que las variables ya cargaron el valor las podemos utilizar dentro del
procedimiento, como en el ejemplo anterior que le asignamos a un control Label1 el
contenido de la variable nombre, al Label2 el contenido de edad y al Label3 el
contenido de la variable ciudad.

Es muy importante respetar el orden en que pasamos los parmetros en un


procedimiento, por que por ejemplo en el caso anterior si hubisemos pasado los
parmetros de esta forma:

DatosPersonales 25, "Luciano", "La plata"

el segundo parmetro "Luciano" se almacenara en la variable Edad que es de tipo


Integer y se producira un error en tiempo de ejecucin por no coincidir los
tipos de datos, ya que la variable espera un valor numrico de tipo Integer y
nosotros le estamos pasando una cadena de caracteres, un dato de tipo String

Otra cosa importante es que cuando creamos, por ejemplo un procedimiento que va
a recibir 2 parmetros, cuando lo llamemos, no podemos enviarle solo 1 parmetro,
debemos obligatoriamente pasarle los 2 parmetros que hubisemos declarado
en el mismo. Un ejemplo que dara un error en tiempo de ejecucin por no pasar
adecuadamente los parmetros sera:

Private Sub sumar(a As Integer, b As Integer)

Label1 = a + b

End Sub

hasta aqu creamos un procedimiento llamado sumar que recibir 2 parmetros de


tipo Integer, si nosotros llamamos al procedimiento y le pasamos un solo valor, por
ejemplo:

Call sumar ( 456 )

Esto dara un error de compilacin por que el procedimiento espera recibir 2


parmetros ..y nosotros le estamos pasando o enviando solo uno de ellos.

Precisamente el cartel de error que te mostrara visual basic sera el siguiente:

Nota: hay una sentencia llamada Optional que SI permite pasar parmetros de
forma opcional, por ejemplo:

Private Sub Con_Parametro_Opcional(Nombre As String, _


Optional Email As String)

MsgBox Nombre

MsgBox Email
End Sub

Ahora si llamas a la rutina anterior, y omites el parmetro Email, esta no dar error,
por ejemplo:

Call Con_Parametro_Opcional("Maria")

Nota: Los parmetros opcionales, si o si deben estar declarados al final de la lista de


parmetros, por ejemplo esto no se puede hacer:

Private sub una_Rutina ( Optional Email As String, Nombre as String


)

Pasar parmetros por valor y por referencia ( ByVal y ByRef )

los parmetros en las funciones y procedimientos, se pueden enviar de dos maneras:


por Valor y por Referencia.

Si estn declarados como ByVal, los mismos sern por valor, si se declaran como
ByRef sern por referencia.

La diferencia entre uno y otro mtodo de paso de parmetros, es que en ByVal se


enva una copia de la variable, y de esta manera si se efecta un cambio en el
procedimiento, solo tendr efecto dentro del procedimiento o funcin, una ves que
termine y finalice el mismo, la variable original pasar a valer el dato que tena, es
decir no se modifica

En los parmetros enviados por Referencia, lo que se hace es enviar un puntero de


la variable original. Entonces, si en la funcin o procedimiento se cambia el valor de
la variable, el cambio seguir mantenindose una ves que finalice la ejecucin del
procedimiento o funcin.
Ejemplo de envo de parmetros por Valor ( ByVal )

Cdigo de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se enva la variable por Valor ( ByVal )

Call Sumar(Un_Valor)

'Muestra el valor que es 100, ( no se modific en la funcin Sumar )


MsgBox Un_Valor

End Sub

Sub Sumar(ByVal Valor As Long)


'Modifica la variable
Valor = Valor + 100

End Sub

En el ejemplo anterior hay una Sub llamada Sumar que recibe como parmetro una
variable enviada por valor con ByVal ( es decir es una copia de la variable original ).
al presionar el Commmand1.

Al entrar en la Sub Sumar, el dato se modifica ( Valor = Valor + 100). Cuando finaliza
el procedimiento Sumar y retorna a la lnea siguiente de la llamada a la Sub sumar,
muestra mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200
que es el cambio que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).
Con esto queda visto que en realidad al enviarla como ByVal, se enva una copia de
la variable original y cualquier cambio que se produzca, ser solo en el mbito del
procedimiento o funcin

Ejemplo de envo de parmetros por Referencia ( ByRef )

Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se
declara con ByRef ( por Referencia )

Cdigo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se enva la variable por Referencia ( ByRef ) con el valor 100

Call Sumar(Un_Valor)

'Muestra el valor que ahora es 200, ( ya que se modific en la Sub


Sumar)
MsgBox Un_Valor

End Sub

Sub Sumar(ByRef Valor As Long)


'Modifica la variable
Valor = Valor + 100

End Sub

Al probar el cdigo, ahora el Msgox al mostrar el valor de la variable, es de 200, y


NO de 100 como en el ejemplo de ByVal.
Esto demuestra que al enviar la variable como referencia, si la misma se modifica
dentro del procedimiento o funcin, se est modificando la variable REAL, es decir
cualquier cambio que se le haga a la misma, se mantendr, ya que se est
modificando la variable Real ( no es una copia )

Nota Importante: cuando no se indica a un parmetro de una funcin o Rutina ni


ByVal, ni ByRef, se asume que la misma se est enviando como referencia (ByRef).

Es decir lo siguiente recibe el parmetro como Referencia

Sub Sumar(Valor As Long)

.. que es lo mismo a esto:

Sub Sumar(ByRef Valor As Long)

Funciones en visual basic

Las funciones son casi exactamente iguales que los procedimientos con respecto a la
forma en que se los llama y se los crea o declara en el cdigo, en como se le pasa
los parmetros etc..

La diferencia fundamental con respecto a los procedimientos o subrutinas es que


estos, luego de ejecutar el cdigo que tengan en su interior, al final retornan un
valor, y este valor luego lo podemos utilizar para una determinada tarea. En cambio
los procedimientos, solo ejecutan el cdigo que contienen y luego mueren por decirlo
de alguna manera.

Para declarar o crear una funcin podramos escribir lo siguiente:

Private Function Total(Valor1 As Integer, Valor2 As Integer) As Lon


g

Total = Valor1 + Valor2

End Function

Seguramente notaste que declaramos la funcin llamada Total, y al final de los


parmetros dice As Long , esto es por que como dijimos las funciones retornan o
devuelven un valor, o sea que en este caso la funcin es de tipo Long, o mejor dicho
devolver un valor de tipo Long., y luego ese valor devuelto lo podemos utilizar en
otra parte del programa.

Las Funciones pueden retornar casi cualquier tipo de datos, como nmeros,
cadenas, fechas, arreglos y vectores

Para llamar a la funcin anterior podramos hacerlo de la siguiente manera:

Label1.caption = Total 502, 1478

En este caso el control Label1 llamara a la funcin Total , la funcin realizara


la suma de los valores pasados como parmetros y por ltimo el valor final de
la suma se lo asignara al control label1.

Nota : En el siguiente link , hay un ejemplo de una funcin que retorna un array de
tipo string

S-ar putea să vă placă și