Está en la página 1de 39

VISUAL BASIC

VARIABLES Y TIPOS DE DATOS

1 - Introducción

Todos los lenguajes utilizan este sistema o metodología para la programación de aplicaciones,
pero varían la forma en que se utilizan, su sintaxis etc.

Cuando uno recién empieza a programar, parece muy complicado entender estos temas, pero con
la práctica todo se va aclarando.

Lo bueno de comprender los fundamentos de la programación, es que nos permite luego poder
programar en casi cualquier lenguaje, porque la forma de programar en general no varía
demasiado, lo que cambia en cada uno de ellos es su sintaxis y funciones y cosas propias del
lenguaje. Aunque tampoco es tan así, ya que esto no significa que por que uno sea experto por
ejemplo programando en lenguaje C, lo sea en Visual Basic y Viceversa.

 2 - Las Variables

Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen la
propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a cualquier tipo de
datos, por ejemplo un nombre, una fecha, un color, un número etc.

A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear una
variable llamada fecha y esta almacenará una fecha. A los nombres de las variables se los
denomina identificadores. Cuando creamos variables, tenemos que tratar de asignarles un
nombre que se relacione con el tipo de dato que queremos almacenar. Por ejemplo no tendría
mucho sentido crear una variable llamada m y allí guardar o almacenar un nombre o un apellido,
por que cuando echemos vista al código resultaría más difícil deducir que tipo de dato estoy
guardando. Por ejemplo en este último caso sería mucho más lógico crear una variable llamada
“nombres” y allí guardar "Luciano", "Pedro", "Natalia" etc.

En visual basic a las variables conviene declararlas, o sea, avisarle a vb que vamos a utilizar
dichas variables. A estas se las declara en el comienzo del código y se les antepone la palabra
reservada Dim, luego el nombre que nosotros queramos y seguido el tipo de dato que
almacenará, por ejemplo si quiero almacenar en una variable llamada Numero

Dim numero As Integer

 La palabra Integer le avisa a visual basic que voy a guardar un número entero. Después de
declararla le podemos asignar un valor con el operador "=", ejemplo:

Dim numero As Integer

numero = 1500

Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo integer, no
podríamos almacenar en ella una cadena de caracteres como por ejemplo un nombre o cualquier
otro tipo de datos que no sea un número entero. Si sucedería esto nuestro programa daría un
error en tiempo de ejecución, mostrándonos un feo cartel diciéndoos que no coinciden los tipos de
datos.

1
 3 - Tipos de datos:

Los tipos de datos, indican el tipo de valor que puede almacenar una variable. Los principales
tipos de datos:

Números enteros: dentro de los números enteros tenemos varios tipos de datos dependiendo el
rango que queramos utilizar:

 Byte: puede almacenar números enteros dentro del rango desde 0 a 255
 Integer: puede almacenar números enteros dentro del rango -32.768 a 32.767
 Long: puede almacenar números enteros dentro del rango -2.147.483.648 hasta
2.147.483.648 .

Números decimales: para almacenar números decimales contamos con los siguientes tipos de
datos:

 Single: almacena números decimales en el rango +/- 1e-45 hasta 3e38


 Double: desde +/- 5e-324 hasta 1.8e308

Cadenas de caracteres: las cadenas de caracteres se definen con la palabra String y tienen un
rango de hasta 2 billones de caracteres.

Tipos de valores lógicos: para almacenar tipos de valores lógicos como verdadero o falso, se
utiliza la palabra Boolean y sus 2 posibles valores son True (verdadero) y False (falso).

Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date

Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de valor, pero ocupan
más memoria.

Nota: hay mas tipos de datos, incluso nosotros podemos crear los nuestros.

 4 - Constantes:

Las constantes, como las variables, se utilizan para guardar datos y valores para nuestro
programa, pero a diferencia de estas últimas (las variables), el contenido que almacenen no
cambia, siempre es constante.

A diferencia de las variables que se declaran con la palabra Dim, las Constantes se declaran con
la palabra Const.

Ejemplo:

Const numero = 53

En la línea anterior he creado una constante, que la llamé numero y va a almacenar un número , y
este valor, cuando se ejecute mi programa se mantendrá invariable.

2
 Un ejemplo:

 1 - En la siguiente línea se declaran 2 tipos de variables de tipo Integer llamadas num1 y num2.
Luego se les asigna un valor a cada una y luego las sumamos, y mediante la función MsgBox que
es una función de Visual Basic para mostrar mensajes, mostramos el resultado de esa suma.

Coloca un botón (CommandButton) llamado Command1. Hacé dobleClick sobre el botón para que
se abra la ventana de código de Visual Basic. Dentro del procedimiento Click pega este código:

 Dim num1 As Integer


Dim num2 As Integer

num1 = 10
num2 = 20

'se mostrará un mensaje con la suma de las variables con el resultado 30


MsgBox num1 + num2

 Al ejecutar el programa, se puede ver como se presenta una caja de mensaje con el resultado al
sumar las 2 variables num1 y num2

2 - Ahora vamos a declarar y crear 2 variables de tipo String, es decir vamos a almacenar
cadenas de caracteres en cada una de ellas. En el ejemplo se crean 2 variables, una llamada
nombre y otra apellido. Después le asignamos un valor, y por ultimo mostramos las variables con
un mensaje usando la función MsgBox como en el ejemplo anterior. Pero antes hay que aclarar
algo importante, las cadenas en visual basic se encierran entre comillas dobles como podés ver en
el ejemplo, de lo contrario se va a producir un error.

Dim nombre As String


Dim apellido As String
'le establecemos valores
nombre = "Carlos"
apellido = "Peres"

'mostramos un mensaje con el valor de las variables


MsgBox nombre
MsgBox apellido

 3 - Ahora un ejemplo que produce un error en tiempo de ejecución. Creamos 2 variables


exactamente igual que en el ejemplo anterior, pero en vez de declarar las variables nombre y
apellido como de tipo String lo hacemos como de tipo Integer.

 Dim Nombre As Integer


Dim Apellido As Integer
'Le establecemos valores numéricos
Nombre = "Carlos"
Apellido = "Peres"

Si pruebas el ejemplo, visual basic te mostrará un mensaje de error como el siguiente: "no
coinciden los tipos de datos":

3
 

...ya que las variables están declaradas como de tipo Integer, y le estás asignando un tipo de dato
que no lo acepta.

4 - Un ejemplo que almacena un número en una variable de tipo Byte (números de 0 a 255).
Primero declaramos la variable y le damos un nombre, por ejemplo si queremos almacenar el
número 88 hacemos por ejemplo así.

Dim Edad As Byte

 Para asignarle un valor a esa variable:

Edad = 88

 Para mostrar el valor de la variable Edad en un control TextBox cuando presionamos un botón
Command1, sería de esta manera:

Private Sub Command1_Click()


'Declaramos la variable
Dim Edad As Byte

'Le asignamos un valor que no sea inferior a 0 ni mayor a 255


Edad = 88

'Lo mostramos en el control llamado Text1


Text1 = Edad
End Sub

 Si probaras cambiando el valor 88 por ejemplo a 300, ocurriría lo mismo que en el ejemplo
anterior, es decir un Error 13 en tiempo de ejecución "No coinciden los tipos de datos"

 5 - Estructuras de control:

Las estructuras de control se utilizan para controlar el flujo del programa en una rutina o función.
Mediante ellas podemos controlar, mediante una condición, que se ejecute una determinada línea
o bloque de líneas de código .. o que no se ejecuten.

 Estructura If - Then - Else

Esta estructura permite mediante una condición, que se ejecute o no se ejecute determinada tarea
o línea de código.

4
Por ejemplo supongamos que tenemos en un formulario un control Label con la propiedad
Caption con el valor 50

If Label1.Caption = "50" Then


msgbox "mi label tiene un valor de 50"
else
msgbox "mi label NO tiene un valor de 50"
end if

 Esto traducido al español significaría lo siguiente:

Si (If) la propiedad caption del label1 que tengo en el formulario es igual (=) a "50" entonces ( Then)
que muestre un determinado mensaje, si no (Else) que muestre el otro mensaje.

En conclusión lo que hace esta estructura es evaluar una condición, si se cumple, que se ejecute
determinada tarea. si no se cumple, se ejecutará las líneas de código que estén bajo la cláusula
Else. Luego tenemos que cerrar la estructura con la palabra end if.

Tenemos que aclarar que no es obligatorio usar If y else juntos en la misma cláusula. Por
ejemplo podríamos utilizar solo una estructura If sin else. Por ejemplo:

Private Sub Command1_Click()


'Si la propiedad caption del Label1 es "Hola" entonces se termina el programa
If Label1.Caption = "Hola" Then

   
   End

End If

'Si no, se prosigue con esta línea

MsgBox "No se ejecutó el bloque If Anterior porque el Caption del control Label1 no era Hola"

End Sub

 Coloca un Label1 y un Command1. En la propiedad caption del Label1 escribe "Hola". Al ejecutar
el programa y presionar el Command1, se termina el programa con la sentencia End de Visual
Basic (End sirve para finalizar completamente la ejecución de nuestro programa). En cambio si
ahora le cambia el caption al Label1 y volvés a ejecutar el proyecto, podés ver que la instrucción
End no se ejecuta, si no que la pasa por alto y sigue con las restantes líneas, en este caso ejecuta
la función MsgBox con el mensaje.

 Estructura While - Wend

Esta estructura de control repetirá sin detenerse un determinado código mientras se cumpla una
condición.

Por ejemplo supongamos que tenemos una variable llamada x que tiene un valor de 100.

while x = 100
...se ejecutan todas las líneas de código que estén aquí
wend

5
 Esto traducido al español significaría lo siguiente:

Mientras (While) la variable x sea igual a 100, y no cambie su valor, se formará un bucle
interminable, hasta que x cambie a cualquier otro valor disto de 100. Si x cambia el valor, por
ejemplo a 234 saldría del bucle While - wend y seguiría ejecutando el resto del código, si es que
hay mas código o instrucciones a ejecutar.

Un ejemplo, agrega un Command1 al formulario y un control Text1. Cuando ejecutemos el


ejemplo, se deberá escribir un número dentro del control textBox. Entonces se creará un bucle
While, que mostrará en el Caption del formulario, es decir en la barra de título, el intervalo desde 0
hasta el número que hayamos ingresado en el Text1. Es decir si ingresamos el número 9000, en el
caption del formulario se imprimirán los número desde 0 hasta 9000.

Para hacer esto, dentro del bucle While pondremos una variable llamada Contador, que en cada
pasada se incrementará en 1, pero cuando la variable Contador sea igual al número que haya en
el Text1, se finalizará el bucle y se mostrará un mensaje que finalizó el mismo

Private Sub Command1_Click()


Dim contador  As Integer 'Declaramos la variable

While contador <> Text1

'Mostramos en el formulario el valor de la variable contador


Me.Caption = contador

'Incrementamos la variable en 1
contador = contador + 1
Wend

MsgBox "Terminó el bucle"

End Sub

Estructura For - next

La estructura es utilizada para generar una repetición de instrucciones o bucle, pero no evalúa una
condición como en el caso del bucle While, si no que lo hace entre un número inicial y un número
final que le debemos indicar al mismo.

Por ejemplo, tenemos un formulario con un Label1 y declaramos una variable de tipo integer
llamada "contador" como en el caso anterior

Private Sub Command1_Click()


Dim contador As Integer

For contador = 0 To 1000

    Label1.Caption = contador

Next contador

End Sub

6
 Esto traducido significaría lo siguiente:

Primero, tenemos una variable llamada "contador". Mediante el bucle For - next podemos
controlar la cantidad de veces que queremos repetir un determinado proceso o instrucción. Esta
posee un principio y un fin, en este caso el principio sería 0 y el fin 1000, de manera que la variable
contador se incrementará en 1 hasta que llegue a 1000, y repetirá 1000 veces todas las
instrucciones que estén bajo la cláusula For-next. En este caso nuestro control Label1 mostraría el
contenido de la variable contador

Para ver en forma detallada y paso a paso esto, pongamos un ejemplo que lo que hace es repetir
10 veces (desde el 1 hasta el 10 en el intervalo del bucle For) y mostrará un mensaje con el valor
de la variable Contador. Una ves que llegue a 10, terminará.

Colocá un Command1. Doble Click en el botón para escribir dentro del procedimiento que se
ejecutará cuando lo presionemos. El código:

Dim contador As Integer

For contador = 1 To 10

    MsgBox "La variable Contador vale: " & contador

Next contador

MsgBox "Fin del bucle For"

 Estructura Select case

La estructura Select Case se suele utilizar para evitar el uso de muchas cláusulas If y de esta
manera no tener que anidarlas. La claúsula Select evalúa una condición y las cláusulas case
contienen valores, si el valor que contiene la cláusula case es igual a la condición que se evaluó,
ejecutará las instrucciones en dicha cláusula.

Dim Nombre As String

Nombre = Text1

Select Case Nombre

  Case "Jorge"

       MsgBox "Se ejecutó la cláusula case: " & Nombre


  Case "Pedro"

       MsgBox "Se ejecutó la cláusula case: " & Nombre

  Case "Carolina"

       MsgBox "Se ejecutó la cláusula case: " & Nombre

End Select

 Esta estructura es muy práctica. En el ejemplo anterior, la cláusula Select case contiene como
condición el valor de la variable llamada Nombre. Esa Variable toma el valor que tenga un control

7
Text1, entonces buscará en todas las cláusulas case, y si encuentra una igual a la condición,
ejecutará solo las instrucciones de la cláusula case que tenga el mismo valor, por ejemplo si
ingresara el nombre "Martín" no se ejecutará ninguna cláusula Case. En cambio si ingreso "Jorge"
se ejecutará solo las instrucciones que estén en la sección Case "Jorge" y asi...

En el caso anterior solo hemos colocado un valor para cada Case. Si quisieramos colocar mas
valores podríamos hacerlo de esta forma:

Private Sub Form_Load()

Dim x As Integer

x = 10 'Le ponemos un valor a x

Select Case x

Case 5, 10
MsgBox "Se ejecutó el case que tiene el 5 y el 10"
'Se ejecuta esta sección

Case 15, 20
'Esto no se ejecuta
Case 25, 30
'Esto tampoco
End Select

End Sub

 es decir que podemos listar los valores en los Case separados por comas. En el caso anterior se
ejecutará el case 5, 10 ya que la variable x vale 10

 6 - Operadores de Visual basic

Los operadores nos permiten operar, validar, comparar, asignar, distinguir, etc.., los datos e
instrucciones de código de nuestros programas. A continuación los operadores más importantes.

 Operadores aritméticos

Estos operadores nos permiten trabajar con cálculos matemáticos como la suma (+), resta (-),
división (/) y multiplicación (*).

Ejemplos:

a=5
b = 15
c = a + b ' en este caso la variable c contendría el valor 20

ganancia = 500
perdida = 200
total = ganancia - perdida 'la variable total pasaría a valer 300

x = 100
y = 20

8
z = x / y ' La Variable z vale 5

x = 100
y = 20

z = x * y ' La Variable z vale 2000

  Operadores lógicos

Se utilizan en expresiones para devolver resultados del tipo True o False, es decir Verdadero o
falso. Los más comunes son el operador And y el operador Or

Ejemplos:

 If (x = 10) And (nombre = "maría") Then

'solo se ejecutará el código dentro de este bloque IF si la variable


'x vale 10 y la variable nombre es igual a maría

End If

If (m = 10) Or (nombre = "pedro") Then

'el código se ejecutará si por lo menos una variable es correcta


'es decir si por lo menos se cumple una condición

End If

 Operadores de comparación

Los operadores de comparación se utilizan para comparar expresiones de cualquier tipo. Los más
importantes son: El operador de igualdad (=), menor que (<), mayor que (>), distinto a(<>)

Ejemplos:

If label1.Caption = "06/08/1978" Then

'si el control label1 en su caption contiene esa fecha


'se ejecutará el código que este aquí

End If

if x > 6 then
'si la variable x es mayor que 6 se ejecutará el código que este aquí
end if

If país <> "Estados unidos" Then


'si la variable país es distinta a "Estados unidos" se ejecutará el código
End If

9
While c <= 87

'mientras la variable c sea menor o igual a 87 se ejecutará


'el bucle While

Wend

 Por último quedaría por ver el operador de concatenación (&) que se utiliza para unir cadenas
de caracteres.

Por ejemplo:

nombre = "Jose"
apellido = "Peralta"

nombrecompleto = nombre & apellido

'La variable nombrecompleto pasaría a contener la unión de las otras dos variables
'es decir Jose Peralta

 Nota: hay muchos más operadores en Visual Basic, estos son los básicos.

SUBRUTINAS DE CÓDIGO, PROCEDIMIENTOS Y FUNCIONES EN VB

1 - Subrutinas de código

Se denomina subrutina a una porción de código que tiene como principal función 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 públicas.

En el siguiente ejemplo se muestra una subrutina que crea visual basic automáticamente cuando
en un formulario insertamos un botón 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

10
 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 módulo 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 quisiéramos que estos procedimientos se puedan llamar desde otro formulario, lo que
tendríamos que hacer es cambiar el alcance del procedimiento, en vez de Private Sub cambiarlo
por Public Sub. si hacemos esto, ese procedimiento de código puede ser utilizado desde cualquier
parte del proyecto.

Subrutinas y Procedimientos propios

 También podemos crear nuestros propios Procedimientos y Subrutinas de código para ejecutar
una determinada tarea.

Para crear un procedimiento de código se debe escribir la palabra Private sub o Public sub
(depende el alcance), seguida del nombre del procedimiento (un nombre que queramos) y los
parámetros, si es que le enviaremos parámetros (los parámetros son opcionales). Además el
procedimiento debe ser escrito en un lugar vacío de la ventana de código, es decir no 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 función específica de borrar
el contenido de 3 controles label.

¿ Pero ahora te preguntarás como hago para que se ejecute el procedimiento que he creado ?.

Muy fácil. 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), También un Commandbutton llamado Command1 y en la ventana de código
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 haríamos así:

 Private Sub command1_click()

ProcedimientoBorrar

End Sub

11
 Al presionar el Command1 visual basic detectaría el nombre ProcedimientoBorrar, y
automáticamente saltaría al lugar donde creamos el procedimiento y ejecutaría las líneas de código
que haya en ese procedimiento.

También 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 parámetros, debemos pasarlos entre paréntesis ( los parámetros de procedimientos y
funciones se explican a continuación)

una vez que se ha terminado de ejecutar las instrucciones que estén dentro del bloque del
procedimiento, volvería a la línea siguiente de donde fue llamado el mismo, y ejecutaría todas las
líneas restantes de código. En este caso no ejecutaría nada más por que no hemos puesto ninguna
otra instrucción debajo de ProcedimientoBorrar.

La principal ventaja de crear procedimientos de código es que evita tener que escribir varias veces
las mismas instrucciones en un programa, el código se hace mucho más funcional y entendible, se
pueden dividir un problema (una rutina), en varios procedimientos y probarlos independientemente,
y además la posibilidad de enviar parámetros a los procedimientos

1.1 - Pasar parámetros a los procedimientos:

Se utilizan los parámetros en los procedimientos para que el procedimiento no ejecute siempre las
mismas líneas de código y pueda variar, teniendo la posibilidad de hacerlo más dinámicamente. En
ciertas ocasiones no es necesario enviar parámetros, pero en otras es prácticamente fundamental.
Los parámetros son datos, casi de cualquier tipo, que se pasan seguido del nombre del
procedimiento, y si es más de uno deben ir separados por comas (,). Ejemplo:

DatosPersonales "Luciano", 25, "La plata"

En este ejemplo pasamos tres parámetros: El primero es un nombre y es un dato de tipo String y
por ende debe ir entre comillas. El segundo es un número y el tercero también un string. , o sea
una cadena de caracteres

Pero la cosa no queda acá. Si nosotros vamos a pasar parámetros a un procedimiento, cuando
creamos el procedimiento debemos establecer qué tipo de parámetros va a recibir el mismo.
Ejemplo:

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


String)

Label1 = nombre
Label2 = edad
Label3 = ciudad

End Sub

Siguiendo, el ejemplo anterior creamos un procedimiento con tres parámetros. Cada parámetro se

12
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 podríamos por ejemplo, en el evento click de un Command1, llamar al procedimiento y


pasarle los parámetros.

Coloca un Command1 , 3 controles Label, copia en la ventana de código el procedimiento anterior


llamado DatosPersonales, y ahora pega el siguiente código:

Private sub command1_click()

DatosPersonales "Luciano", 25, "La plata"

End sub

 Al presionar el botón se llamará al procedimiento que habíamos creado anteriormente, y le pasará
los valores de los parámetros en el orden en que estén establecidos declarados en el
procedimiento. Esto quiere decir que el primer parámetro 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.

Después 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 parámetros en un procedimiento, porque
por ejemplo en el caso anterior si hubiésemos pasado los parámetros de esta forma:

 DatosPersonales 25, "Luciano", "La plata"

 El segundo parámetro "Luciano" se almacenaría en la variable Edad que es de tipo Integer y se
produciría un error en tiempo de ejecución por no coincidir los tipos de datos, ya que la
variable espera un valor numérico 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
parámetros, cuando lo llamemos, no podemos enviarle solo 1 parámetro, debemos
obligatoriamente pasarle los 2 parámetros que hubiésemos declarado en el mismo. Un
ejemplo que daría un error en tiempo de ejecución por no pasar adecuadamente los parámetros
sería:

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

Label1 = a + b

End Sub

hasta aquí creamos un procedimiento llamado sumar que recibirá 2 parámetros de tipo Integer, si
nosotros llamamos al procedimiento y le pasamos un solo valor, por ejemplo:

Call sumar ( 456 )

13
 Esto daría un error de compilación por que el procedimiento espera recibir 2 parámetros ..y
nosotros le estamos pasando o enviando solo uno de ellos.

Precisamente el cartel de error que te mostraría visual basic sería el siguiente:

 Nota: hay una sentencia llamada Optional que SI permite pasar parámetros 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 parámetro Email, esta no dará error, por ejemplo:

 Call Con_Parametro_Opcional("Maria")

 Nota: Los parámetros opcionales, si o si deben estar declarados al final de la lista de parámetros,
por ejemplo esto no se puede hacer:

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

 Función IsMissing

Esta función se utiliza cuando utilizamos parámetros opcionales en una función o procedimiento, y
nosotros, dentro del mismo queremos saber y averiguar si se han enviado los parámetros
opcionales

El uso de IsMissing muy simple. Esta función retorna el valor True si NO se ha enviado el
parámetro que queremos comprobar, y devuelve False si el parámetro ha sido enviado:

Por ejemplo , colocar dos CommandButton

 Private Sub Mostrar_Dato(Optional Nombre As Variant)

' Si IsMissing devuelve Verdadero, es por que no se envió


If IsMissing(Nombre) = True Then

14
MsgBox " NO Se ha enviado el parámetro NOMBRE ", vbInformation
Else
MsgBox " Se ha enviado el parámetro NOMBRE ", vbInformation
End If

End Sub

'Acá No se envía el parámetro


Private Sub Command1_Click()
Mostrar_Dato
End Sub

'Acá Si se envía el parámetro

Private Sub Command2_Click()


Mostrar_Dato "María"
End Sub

 1.3 - Pasar parámetros por valor y por referencia ( ByVal y ByRef )

los parámetros en las funciones y procedimientos, se pueden enviar de dos maneras: por Valor y
por Referencia.

Si están declarados como ByVal, los mismos serán por valor, si se declaran como ByRef serán por
referencia.

La diferencia entre uno y otro método de paso de parámetros, es que en ByVal se envía una copia
de la variable, y de esta manera si se efectúa un cambio en el procedimiento, solo tendrá efecto
dentro del procedimiento o función, una vez que termine y finalice el mismo, la variable original
pasará a valer el dato que tenía, es decir no se modifica

En los parámetros enviados por Referencia, lo que se hace es enviar un puntero de la variable
original. Entonces, si en la función o procedimiento se cambia el valor de la variable, el cambio
seguirá manteniéndose una vez que finalice la ejecución del procedimiento o función.

 1.4 - Ejemplo de envío de parámetros por Valor ( ByVal )

 Código de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Valor ( ByVal )

Call Sumar(Un_Valor)

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


MsgBox Un_Valor

15
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 parámetro 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 línea 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 envía una copia de la variable
original y cualquier cambio que se produzca, será solo en el ámbito del procedimiento o función

 1.5 - Ejemplo de envío de parámetros por Referencia ( ByRef )

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

Código

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía 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 código, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO de 100
como en el ejemplo de ByVal.

16
Esto demuestra que al enviar la variable como referencia, si la misma se modifica dentro del
procedimiento o función, 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 parámetro de una función o Rutina ni ByVal, ni ByRef,
se asume que la misma se está enviando como referencia (ByRef).

Es decir lo siguiente recibe el parámetro como Referencia

Sub Sumar(Valor As Long)

.. que es lo mismo a esto:

Sub Sumar(ByRef Valor As Long)

 2 - Las 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 código, en cómo se le pasa los parámetros etc..

La diferencia fundamental con respecto a los procedimientos o subrutinas es que estos, luego de
ejecutar el código 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
código que contienen y luego mueren por decirlo de alguna manera.

 Para declarar o crear una función podríamos escribir lo siguiente:

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

Total = Valor1 + Valor2

End Function

 Seguramente notaste que declaramos la función llamada Total, y al final de los parámetros dice
As Long , esto es por que como dijimos las funciones retornan o devuelven un valor, o sea que en
este caso la función 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 números, cadenas, fechas,
arreglos y vectores.

Para llamar a la función anterior podríamos hacerlo de la siguiente manera:

Label1.caption = Total 502, 1478

 En este caso el control Label1 llamaría a la función Total , la función realizaría la suma de los
valores pasados como parámetros y por último el valor final de la suma se lo asignaría al control
label1.

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

17
3 - Ejercicios de ejemplo sobre procedimientos y funciones

 Estos ejercicios y ejemplos tratan los temas vistos en esta sección, podés descargarlos en los
enlaces de abajo. Los archivos en formato Zip, contienen el código fuente y la descripción de los
mismos en el mismo código fuente.

Ej1: Ejemplo que llama a una subrutina, desde otra subrutina

Begin VB.Form Form1


Caption = "EJERCICIO CON SUBRUTINAS DE CÓDIGO."
ClientHeight = 3240
ClientLeft = 60
ClientTop = 345
ClientWidth = 6060
LinkTopic = "Form1"
ScaleHeight = 3240
ScaleWidth = 6060
StartUpPosition = 2 'CenterScreen
Begin VB.CommandButton Command2
Caption = "Command2"
Enabled = 0 'False
Height = 375
Left = 3960
TabIndex = 2
Top = 2640
Width = 1695
End
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 360
TabIndex = 1
Top = 2640
Width = 1695
End
Begin VB.Line Line1
BorderWidth = 3
X1 = 240
X2 = 5880
Y1 = 2400
Y2 = 2400
End
Begin VB.Label Label1
Caption = $"Form1.frx":0000
Height = 1935
Left = 240
TabIndex = 0
Top = 240
Width = 5655
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True

18
Attribute VB_Exposed = False

' Como podemos ver claramente, tenemos 2 Subrutinas de código. Una para el evento Click del
Command1 y otra para el Command2. .Observa que las instrucciones para mostrar el mensaje con
la función msgbox está escrita en el Command2. Nosotros lo que vamos a hacer es que cuando
presione mos el Command1, salte a ejecutar, o mejor dicho, llame a la subrutina del Command2.
Para hacer esto es muy simple, solo debemos escribir el nombre de la subrutina que queremos
llamar, y Visual Basic saltará a dicha Rutina. Como podrá comprobar presionando cualquiera de los
botones te mostraría el mensaje escrito en la rutina del Command2.
Esto lo podemos hacer con cualquier rutina

'NOTA: Para activar el segundo Formulario cuando eje cutas el programa con F5, debes activarlo
desde la Barra de menú opción Proyecto>Propiedades de proyecto y en la opción Objeto inicial
que te muestra un combo desplegable, elige Form2.

'Command1
Private Sub Command1_Click()
Command2_Click
End Sub

'Command2
Private Sub Command2_Click()
MsgBox "Presione el Command1 y se ejecutaron las instrucciones del Command2", , "Ejercicio de
ejemplo"
End Sub

Ej2: Ejemplo que llama a una subrutina, desde otra subrutina

VERSION 5.00
Begin VB.Form Form2
Caption = "Ejemplo 2"
ClientHeight = 2580
ClientLeft = 60
ClientTop = 345
ClientWidth = 5175
LinkTopic = "Form2"
ScaleHeight = 2580
ScaleWidth = 5175
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 735
Left = 600
TabIndex = 1
Top = 480
Width = 1575
End
Begin VB.FileListBox File1
Height = 1650
Left = 2760
TabIndex = 0
Top = 480
Width = 1935
End
End

19
Attribute VB_Name = "Form2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
File1_Click ' llama a la rutina File1_Click
End Sub
Private Sub File1_Click()
File1.BackColor = vbBlue 'Cambié el color de fondo del control
Form2.BackColor = vbBlack 'Cambié el color de fondo del Form
Command1.Caption = "Llamé a la subrutina File1_Click" ' Cambié la propiedad Caption del Botón
End Sub

Ej3: Ejemplo en el que creamos un procedimiento sencillo para sumar valores

VERSION 5.00

Begin VB.Form Form1


Caption = "EJERCICIO CON SUBRUTINAS DE CÓDIGO."
ClientHeight = 3240
ClientLeft = 60
ClientTop = 345
ClientWidth = 6060
LinkTopic = "Form1"
ScaleHeight = 3240
ScaleWidth = 6060
StartUpPosition = 2 'CenterScreen
Begin VB.CommandButton Command2
Caption = "Command2"
Enabled = 0 'False
Height = 375
Left = 3960
TabIndex = 2
Top = 2640
Width = 1695
End
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 360
TabIndex = 1
Top = 2640
Width = 1695
End
Begin VB.Line Line1
BorderWidth = 3
X1 = 240
X2 = 5880
Y1 = 2400
Y2 = 2400
End
Begin VB.Label Label1
Caption = $"Form1.frx":0000
Height = 1935

20
Left = 240
TabIndex = 0
Top = 240
Width = 5655
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' Como podemos ver claramente, tenemos 2 Subrutinas de código. Una para el evento Click del
Command1 y otra para el Command2. .Observa que las instrucciones para mostrar el mensaje con
la función msgbox está escrita en el Command2.
Nosotros lo que vamos a hacer es que cuando presionemos el Command1, salte a ejecutar, o
mejor dicho, llame a la subrutina del Command2. Para hacer esto es muy simple, solo debemos
escribir el nombre de la subrutina que queremos llamar, y Visual Basic saltará a dicha Rutina.
Como podrá comprobar presionando cualquiera de los botones te mostraría el mensaje escrito en
la rutina del Command2.
Esto lo podemos hacer con cualquier rutina. Para que observes otro ejemplo, dirígete a la ventana
de explorador de proyectos y verás otro formulario llamado Form2, allí tienes otro ejemplo para
analizar. _

'NOTA: Para activar el segundo Formulario cuando eje cutas el programa con F5, debes activarlo
desde la Barra de menú opción Proyecto>Propiedades de proyecto y en la opción Objeto inicial
que te muestra un combo desplegable, elige Form2.

'Command1
Private Sub Command1_Click()
Command2_Click
End Sub

'Command2
Private Sub Command2_Click()
MsgBox "Presione el Command1 y se ejecutaron las instrucciones del Command2", , "Ejercicio de
ejemplo"
End Sub

Ej4: Ejemplo en el que creamos un procedimiento sencillo para sumar valores

VERSION 5.00
Begin VB.Form Form2
Caption = "Ejemplo 2"
ClientHeight = 2580
ClientLeft = 60
ClientTop = 345
ClientWidth = 5175
LinkTopic = "Form2"
ScaleHeight = 2580
ScaleWidth = 5175
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 735
Left = 600
TabIndex = 1

21
Top = 480
Width = 1575
End
Begin VB.FileListBox File1
Height = 1650
Left = 2760
TabIndex = 0
Top = 480
Width = 1935
End
End
Attribute VB_Name = "Form2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
File1_Click ' llama a la rutina File1_Click
End Sub

Private Sub File1_Click()


File1.BackColor = vbBlue 'Cambié el color de fondo del control
Form2.BackColor = vbBlack 'Cambié el color de fondo del Form
Command1.Caption = "Llamé a la subrutina File1_Click" ' Cambié la propiedad Caption del Botón
End Sub

Ej5: Ejemplo que utiliza un procedimiento dentro de otro procedimiento

VERSION 5.00
Begin VB.Form Form1
Caption = "Ejercicio utilizando un procedimiento sin parámetros"
ClientHeight = 3750
ClientLeft = 60
ClientTop = 345
ClientWidth = 6360
LinkTopic = "Form1"
ScaleHeight = 3750
ScaleWidth = 6360
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Llamar al procedimiento SumarTodo"
Height = 855
Left = 4800
TabIndex = 9
Top = 2160
Width = 1215
End
Begin VB.TextBox Text4
Height = 285
Left = 2760
TabIndex = 8
Top = 2880
Width = 1695
End
Begin VB.TextBox Text3
Height = 285

22
Left = 2760
TabIndex = 7
Top = 2520
Width = 1695
End
Begin VB.TextBox Text2
Height = 285
Left = 2760
TabIndex = 6
Top = 2160
Width = 1695
End
Begin VB.TextBox Text1
Height = 285
Left = 2760
TabIndex = 5
Top = 1800
Width = 1695
End
Begin VB.Label Label5
AutoSize = -1 'True
Caption = "Ingrese un número entero:"
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 240
TabIndex = 4
Top = 2880
Width = 2280
End
Begin VB.Label Label4
AutoSize = -1 'True
Caption = "Ingrese un número entero:"
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 240
TabIndex = 3
Top = 2520
Width = 2280
End
Begin VB.Label Label3

23
AutoSize = -1 'True
Caption = "Ingrese un número entero:"
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 240
TabIndex = 2
Top = 2160
Width = 2280
End
Begin VB.Line Line1
X1 = 240
X2 = 6000
Y1 = 1680
Y2 = 1680
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "Ingrese un número entero:"
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 240
TabIndex = 1
Top = 1800
Width = 2280
End
Begin VB.Label Label1
Caption = $"Form1.frx":0000
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1335
Left = 360
TabIndex = 0
Top = 240

24
Width = 5775
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'Como primer paso creamos el procedimiento que sumará el contenido de las cajas de texto, y le
pusimos el nombre SumarTodo.
La línea On error resume next la pusimos por si ingresamos en los TextBox un valor que no sea
numérico y de esta manera ignore el error. _
Luego creamos una variable llamada Total, que almacenará la suma de los valores introducidos.
La palabra Val que está delante de los Text, es una función de Visual Basic que sirve para
transformar un String en un tipo de dato numérico. Esto lo hacemos, debido a que cuando
ingresamos cualquier cosa en un TextBox, Visual Basic asume que estamos ingresando una
cadena de caracteres esto quiere decir que no se da cuenta que estamos ingresando un número,
entonces el trabajo de conversión de tipo de datos lo tenemos que hacer nosotros, ya que si no el
resultado de la suma no sería la esperada. Para sacarte la duda quita la función Val, corre el
programa, y observa los resultados.

'Luego que la variable Total ya almacenó el valor de la suma los mostramos mediante un mensaje
con MsgBox, uniendo la cadena y la variable Total con el operador de concatenación "&"

' Por último, en el evento Click del Command1, colocamos el nombre de nuestro procedimiento y
este lo llamará y ejecutará todas las instrucciones que tenga el mismo.

Private Sub SumarTodo()

On Error Resume Next

Dim Total As Long

Total = Val(Text1) + Val(Text2) + Val(Text3) + Val(Text4)

MsgBox "El resultado de la suma es: " & Total

End Sub

Private Sub Command1_Click()


SumarTodo
End Sub

Ej6: Este ejercicio ejecuta un procedimiento dependiendo de una condición, utilizando una
estructura de control if – then

VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 2850
ClientLeft = 60
ClientTop = 345
ClientWidth = 5670
LinkTopic = "Form1"
ScaleHeight = 2850
ScaleWidth = 5670

25
StartUpPosition = 3 'Windows Default
Begin VB.ComboBox Combo1
Height = 315
ItemData = "Form1.frx":0000
Left = 240
List = "Form1.frx":000A
TabIndex = 1
Text = "Ejecutar"
Top = 2040
Width = 1935
End
Begin VB.CommandButton Command1
Caption = "Aceptar"
Height = 375
Left = 3840
TabIndex = 0
Top = 2040
Width = 1215
End
Begin VB.Label Label2
Caption = $"Form1.frx":0025
Height = 1095
Left = 240
TabIndex = 3
Top = 240
Width = 5175
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "Elige la opción si quieres o no, ejecutar el procedimiento"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = -1 'True
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00FF0000&
Height = 195
Left = 240
TabIndex = 2
Top = 1560
Width = 4845
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

‘Cuando presionemos el botón la estructura IF evaluará la condición. En este caso si el Combo1


dice Ejecutar podemos ver como llamamos al procedimiento "Miprocedimiento". En cambio si dice
No ejecutar, solo mostraremos un mensaje.

26
Private Sub Command1_Click()

If Combo1.Text = "Ejecutar" Then


Miprocedimiento ' Llamamos al procedimiento si la condición es verdadera
End If

If Combo1.Text = "No ejecutar" Then


MsgBox "No llamamos al procedimiento"
End If
End Sub

' Nuestro procedimiento

Private Sub Miprocedimiento()

MsgBox "Ejecutaste el procedimiento" ' Mostramos un mensaje

Label1.Visible = False 'Ocultamos el Label1


Label2.Visible = False 'Ocultamos el Label2
Command1.Visible = False 'Ocultamos el Command1
Combo1.Visible = False 'Ocultamos el Combo1
Form1.WindowState = vbMaximized ' Maximizamos nuestro Formulario
Form1.Caption = "No es tan dificil este ejercicio ¿No?"
End Sub

Ej7: Este ejercicio utiliza un procedimiento que recibe parámetros numéricos y los multiplica

VERSION 5.00
Begin VB.Form Form1
Caption = "Procedimientos con parámetros"
ClientHeight = 3315
ClientLeft = 60
ClientTop = 345
ClientWidth = 5070
LinkTopic = "Form1"
ScaleHeight = 3315
ScaleWidth = 5070
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Pasar los parámetros al procedimiento y mostrar resultado"
Height = 495
Left = 2280
TabIndex = 4
Top = 2040
Width = 2535
End
Begin VB.ComboBox Combo2
Height = 315
Left = 840
TabIndex = 1
Text = "1"
Top = 2760
Width = 1215
End

27
Begin VB.ComboBox Combo1
Height = 315
Left = 840
TabIndex = 0
Text = "1"
Top = 2160
Width = 1215
End
Begin VB.Label Label5
Caption = $"Form1.frx":0000
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1575
Left = 120
TabIndex = 7
Top = 120
Width = 4815
End
Begin VB.Line Line1
BorderWidth = 2
X1 = 120
X2 = 4800
Y1 = 1800
Y2 = 1800
End
Begin VB.Label Label4
AutoSize = -1 'True
BackColor = &H00FF0000&
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H8000000E&
Height = 195
Left = 3720
TabIndex = 6
Top = 2880
Width = 1275
End
Begin VB.Label Label3
AutoSize = -1 'True
Caption = "El resultado es:"
BeginProperty Font
Name = "MS Sans Serif"

28
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 2280
TabIndex = 5
Top = 2880
Width = 1335
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "Valor 2:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 120
TabIndex = 3
Top = 2760
Width = 675
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "Valor 1:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 120
TabIndex = 2
Top = 2280
Width = 675
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

29
' Primer paso creamos un procedimiento que va a recibir 2 parámetros de tipo numérico (Long:
Entero Largo), y estos _parámetros serán los valores que seleccionemos en cada ComboBox. Esto
quiere decir que la variable num1 almacenará en este caso el valor del combo1, y num2 la del
combo2.
Luego le asignamos al control Label4 la multiplicación de num1 y num2

Private Sub Multiplicar(num1 As Long, num2 As Long)

Label4 = num1 * num2

End Sub

'Aquí llamamos al procedimiento y le enviamos parámetros, en este caso el valor que hayamos
seleccionado en los combo

Private Sub Command1_Click()


Multiplicar Combo1.Text, Combo2.Text
End Sub

Private Sub Form_Load()


'Esta estructura For - Next lo que hace es cargar los combos con los valores del 1 al 1000, cuando
cargamos el formulario. Para ello utilizamos una variable de tipo entero que la denominamos i, y le
pusimos un valor de inicio y un valor final para el bucle. Luego por medio del método Additem que
poseen los combos le pasamos como parámetro el valor que va teniendo la variable i en cada
vuelta o ciclo.
Dim i As Integer
For i = 0 To 1000
Combo1.AddItem i
Combo2.AddItem i
Next
End Sub

Ej8: Ejemplo de cómo utilizar un procedimiento que recibe un parámetro de tipo boolean

VERSION 5.00
Begin VB.Form Form1
Caption = "Pasar parámetro de tipo Boolean"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 5610
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 5610
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Llamar al procedimiento y evaluar la condición"
Height = 375
Left = 240
TabIndex = 2
Top = 2640
Width = 3495
End
Begin VB.ComboBox Combo1

30
Height = 315
ItemData = "Form1.frx":0000
Left = 240
List = "Form1.frx":000A
TabIndex = 1
Text = "True"
Top = 2040
Width = 1215
End
Begin VB.PictureBox Picture1
Height = 975
Left = 4200
Picture = "Form1.frx":001B
ScaleHeight = 915
ScaleWidth = 915
TabIndex = 0
Top = 2160
Width = 975
End
Begin VB.Label Label2
Caption = $"Form1.frx":086D
Height = 1335
Left = 240
TabIndex = 4
Top = 120
Width = 5295
End
Begin VB.Label Label1
Caption = "Seleccionar True para mostrar la imágen o False para ocultarla"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 3
Top = 1680
Width = 5415
End
Begin VB.Line Line1
X1 = 120
X2 = 5640
Y1 = 1560
Y2 = 1560
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

31
' Aquí creamos nuestro procedimiento que va a recibir como parámetro un valor Booleano. _

Private Sub MostrarImagen(ValorCombo1 As Boolean)


If ValorCombo1 = True Then
Picture1.Visible = True
Else
Picture1.Visible = False
End If
End Sub
' Aquí mandamos como parámetro el valor del combo
Private Sub Command1_Click()
MostrarImagen (Combo1.Text)
End Sub

Ej 9: Ejemplo que muestra como pasar parámetros de tipo string y algunas cosas más
VERSION 5.00
Begin VB.Form Form1
Caption = "Pasar parámetro de tipo Boolean"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 5610
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 5610
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Llamar al procedimiento y evaluar la condición"
Height = 375
Left = 240
TabIndex = 2
Top = 2640
Width = 3495
End
Begin VB.ComboBox Combo1
Height = 315
ItemData = "Form1.frx":0000
Left = 240
List = "Form1.frx":000A
TabIndex = 1
Text = "True"
Top = 2040
Width = 1215
End
Begin VB.PictureBox Picture1
Height = 975
Left = 4200
Picture = "Form1.frx":001B
ScaleHeight = 915
ScaleWidth = 915
TabIndex = 0
Top = 2160
Width = 975
End
Begin VB.Label Label2

32
Caption = $"Form1.frx":086D
Height = 1335
Left = 240
TabIndex = 4
Top = 120
Width = 5295
End
Begin VB.Label Label1
Caption = "Seleccionar True para mostrar la imágen o False para ocultarla"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 240
TabIndex = 3
Top = 1680
Width = 5415
End
Begin VB.Line Line1
X1 = 120
X2 = 5640
Y1 = 1560
Y2 = 1560
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

' Aquí creamos nuestro procedimiento que va a recibir como parámetro un valor Booleano. _

Private Sub MostrarImagen(ValorCombo1 As Boolean)


If ValorCombo1 = True Then
Picture1.Visible = True
Else
Picture1.Visible = False
End If
End Sub
' Aquí mandamos como parámetro el valor del combo
Private Sub Command1_Click()
MostrarImagen (Combo1.Text)
End Sub

Ej 10: Ejemplo que muestra una sencilla función que suma 2 variables y luego retorna el
valor, mostrándolo en un control label

33
VERSION 5.00
Begin VB.Form Form1
Caption = "Ejercicio con parámetros de procedimiento"
ClientHeight = 4935
ClientLeft = 60
ClientTop = 345
ClientWidth = 4170
LinkTopic = "Form1"
ScaleHeight = 4935
ScaleWidth = 4170
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command2
Caption = "Nuevo nombre"
Height = 375
Left = 2760
TabIndex = 7
Top = 2040
Width = 1215
End
Begin VB.CommandButton Command1
Caption = "Agregar nombre al control List"
Height = 375
Left = 120
TabIndex = 3
Top = 2400
Width = 2415
End
Begin VB.ListBox List1
Height = 1425
Left = 120
TabIndex = 1
Top = 2880
Width = 2415
End
Begin VB.TextBox Text1
Height = 285
Left = 120
TabIndex = 0
Top = 2040
Width = 2415
End
Begin VB.Label Label4
Caption = $"Form1.frx":0000
Height = 1335
Left = 120
TabIndex = 6
Top = 120
Width = 3975
End
Begin VB.Label Label3
BackColor = &H00FF0000&
Caption = "0"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0

34
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00FFFFFF&
Height = 300
Left = 3000
TabIndex = 5
Top = 4440
Width = 855
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "Cantidad de nombres ingresados:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 195
Left = 120
TabIndex = 4
Top = 4560
Width = 2835
End
Begin VB.Label Label1
Caption = "Ingresar nombres:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 120
TabIndex = 2
Top = 1680
Width = 2055
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' Aquí enviamos como parámetro el contenido de Text1
Private Sub Command1_Click()
ProcedimientoAgregar Text1.Text

35
End Sub

' Aquí creamos nuestro procedimiento para agregar los nombres al control ListBox Como vemos la
variable nombre va a almacenar el valor de Text1 y luego por medio del método AddItem del
ListBox le pasamos como parámetro el valor que tenga la variable nombre.
Para finalizar Colocamos un Control Label(Label3), que llevará la cuenta de los nombres
ingresados. La forma en que el Label3 incrementa el valor es de la siguiente manera:
Como podemos observar, en la propiedad Caption del Label3 le asignamos el 0. Cada vez que se
ejecute el procedimiento para agregar nombres, el Label3 se asigna el mismo valor que tenía antes
de ejecutarse + 1.

Private Sub ProcedimientoAgregar(nombre As String)


Dim contador As Integer
List1.AddItem nombre

Label3 = Label3 + 1
End Sub

Private Sub Command2_Click()


'A esta altura del curso esta línea no merece comentarios
Text1.Text = ""
End Sub

Ej 11: Ejemplo de una función de tipo integer que recibe 2 parámetros

VERSION 5.00
Begin VB.Form Form1
Caption = "Ejercicio con funciones con parámetros"
ClientHeight = 2385
ClientLeft = 60
ClientTop = 345
ClientWidth = 6675
LinkTopic = "Form1"
ScaleHeight = 2385
ScaleWidth = 6675
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Ejecutar la función"
Height = 375
Left = 2520
TabIndex = 0
Top = 1680
Width = 1695
End
Begin VB.Label Label3
Caption = $"Form1.frx":0000
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False

36
EndProperty
Height = 1215
Left = 240
TabIndex = 1
Top = 240
Width = 6135
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

' aquí creamos una función que recibirá 2 parámetros de tipo _


integer. Luego dentro de la función creamos una variable Total _
que almacenará la suma de las variables, y justo antes de termi _
la función, le asignamos el valor que tenga Total a nuestra función.

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


Dim total As Integer

sumar = a + b

End Function
'Luego podemos asignar directamente la función a un control, a una variable o cualquier otro objeto
que se le pueda asignar el valor de la función. En este caso no debemos olvidar pasar
correctamente los parámetros, es decir el orden correcto y el tipo de dato. Aquí el orden de los
parámetros no modificaría el resultado final, ya que obviamente 22 + 42 es igual a 42 + 22 _
Pero si pasáramos un tipo de dato incorrecto, como un String nuestro programa daría error.

Private Sub Command1_Click()


Dim total As Integer
total = sumar(22, 42)
MsgBox "El resultado es: " & total
End Sub

' Nota importante: Si habrás observado cuando creamos la función al final de esta le declaramos el
tipo de dato que devolverá, en este caso "as integer" o sea un número entero. Hay que tener dado
de no confundirnos con el tipo de dato que devolverá la función, por ejemplo en el caso anterior, si
nosotros hubiésemos declarado a la función como Boolean(as Boolean), esta devolvería un dato
de tipo Verdadero o falso, y nosotros se la estamos asignando a una variable de tipo Integer, en
este caso la variable Total, y por ello nos daría un error en tiempo de ejecución.

Ej12: Ejemplo de una función de tipo boolean que es ejecutada de acuerdo a una condición
If.

VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680

37
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.TextBox Text1
Height = 285
Left = 120
TabIndex = 1
Text = "Text1"
Top = 1800
Width = 4335
End
Begin VB.CommandButton Command1
Caption = "Ejecutar la función"
Height = 495
Left = 1200
TabIndex = 0
Top = 2280
Width = 2175
End
Begin VB.Label Label1
Caption = $"Form1.frx":0000
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1455
Left = 120
TabIndex = 2
Top = 240
Width = 4335
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

'Aquí creamos la función MiFuncion que es de tipo Bollean o sea que va a devolver un dato de tipo
verdadero o falso.
Dentro de la función creamos una variable de tipo String y se la signamos al contenido que tenga la
caja de texto.
Luego, mediante una estructura IF, le asignamos el valor a la función. En este caso si la variable
nombre es distinta "<>" a una cadena vacía la función devolverá un valor verdadero. En cambio si
nombre no contiene nada la función retornará un valor False.

Private Function MiFuncion() As Boolean


Dim nombre As String
nombre = Text1

38
If nombre <> "" Then
MiFuncion = True
Else
MiFuncion = False
End If
End Function

'Aquí, al ejecutar la función, la estructura If va a evaluar el valor que retorne la función, mostrando
un determinado mensaje dependiendo del valor de retorno.

Private Sub Command1_Click()


If MiFuncion = True Then
MsgBox "El textBox contiene texto"
Else
MsgBox "El textBox está vacío"
End If
End Sub

39

También podría gustarte