Está en la página 1de 48

Visual Basic - Gua del Estudiante Cap.

1
INTRODUCCION Antecedentes histricos.

El lenguaje de programacin BASIC (Beginner's All purpose Symbolic Instruction Code ) naci
en el ao 1964 como una herramienta destinado a principiantes, buscando una forma sencilla
de realizar programas, empleando un lenguaje casi igual al usado en la vida ordinaria ( en
ingls), y con instrucciones muy sencillas y escasas. Teniendo en cuenta el ao de su
nacimiento, este lenguaje cubra casi todas las necesidades para la ejecucin de programas.
Tngase en cuenta que las mquinas existentes en aquella poca estaban estrenando los
transistores como elementos de conmutacin, los ciclos de trabajo llegaban a la impensable
cifra de 10.000 por segundo y la memoria no pasaba de unos pocos ks en toroides de ferrita.

Los autores fueron los cientficos John G. Kemeny (Budapest, 1926 USA 1992) y Thomas E.
Kurtz (Illinois 1928) Su trabajo original se llam True BASIC.

La evolucin del BASIC por los aos 70 fue escasa, dado el auge que tomaron en aquella
poca lenguajes de alto nivel como el FORTRAN y el COBOL. En 1978 se defini una norma
para unificar los Basics existentes crendose la normativa BASIC STANDARD

Con la aparicin de los primeros ordenadores personales, dedicados comercialmente al


usuario particular, all por la primera mitad de los ochenta, el BASIC resurgi como lenguaje de
programacin pensado para principiantes, y muchos de estos pequeos ordenadores
domsticos lo usaban como nico sistema operativo (Sinclair, Spectrum, Amstrad)

Con la popularizacin del PC, salieron varias versiones del BASIC que funcionaban en este
tipo de ordenadores (Versiones BASICA, GW-BASIC), pero todas estas versiones del BASIC
no hicieron otra cosa que terminar de rematar este lenguaje. Los programadores profesionales
no llegaron a utilizarlo, habida cuenta de las desventajas de este lenguaje respecto a otras
herramientas (PASCAL, C, CLIPPER). El BASIC con estas versiones para PC lleg incluso a
perder crdito entre los profesionales de la informtica.

Las razones para ello eran obvias:

- No era un lenguaje estructurado.


- No existan herramientas de compilacin fiables.
- No dispona de herramientas de intercambio de informacin.
- No tena libreras.
- No se poda acceder al interior de la mquina.
- Un largo etctera de desventajas respecto a otros lenguajes de programacin.

Tal fue ese abandono por parte de los usuarios, que la aparicin del Quick-BASIC de Microsoft,
una versin ya potente del BASIC, que correga casi todos los defectos de las versiones pas
prcticamente inadvertida, a no ser porque las ltimas versiones del sistema operativo MS-
DOS incluan una versin de Quick-BASIC algo recortada (Q-Basic) como un producto mas
dentro de la amplia gama de ficheros ejecutables que acompaan al sistema operativo, y
aprovecha de l el editor de textos (Cada vez que se llama al EDIT estamos corriendo el editor
del Q-Basic).

Esta versin del popular BASIC ya es un lenguaje estructurado, lo que permite crear
programas modularmente, mediante subrutinas y mdulos, capaz de crear programas ya
competitivos con otros lenguajes de alto nivel. Sin embargo llegaba tarde, pues los entornos
MS-DOS estaban ya superados por el entorno grfico Windows.

Sin embargo algo haba en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si
a esto se le aade el entorno grfico Windows, el aprovechamiento al mximo de las

LSB Visual Basic - Gua del Estudiante Captulo 1 Pgina 1


posibilidades de Windows en cuanto a intercambio de informacin, de sus libreras, de sus
drivers y controladores, manejo de bases de datos, etc. el producto resultante puede ser algo
que satisfaga todas las necesidades de programacin en el entorno Windows. La suma de
todas estas cosas es VISUAL - BASIC. Esta herramienta conserva del BASIC de los aos 80
nicamente su nombre y su sencillez, y tras su lanzamiento al mercado, la aceptacin a nivel
profesional hizo borrar por fin el "mal nombre" asociado a la palabra BASIC.

Actualmente (2001) se est comercializando la versin 6.0 de este producto. Desde su salida al
mercado, cada versin supera y mejora la anterior. Dados los buenos resultados a nivel
profesional de este producto, y el apoyo prestado por el fabricante para la formacin de
programadores, Visual-Basic se ha convertido en la primera herramienta de desarrollo de
aplicaciones en entorno Windows.

Es obligado decir sin embargo, que sigue siendo BASIC. No se pueden comparar sus
prestaciones con otros lenguajes cuando deseamos llegar al fondo de la mquina y controlar
uno a uno sus registros. No es ese el fin perseguido con VB y si es necesario llegar a esas
precisiones ser necesario utilizar otro lenguaje que permita bajar el nivel de programacin.
(Visual-C). o realizar libreras (DLLs) que lo hagan. En la mayor parte de las aplicaciones, las
herramientas aportadas por VB son mas que suficiente para lograr un programa fcil de
realizar y de altas prestaciones.

Caractersticas Generales de Visual-Basic

Visual-Basic es una herramienta de diseo de aplicaciones para Windows, en la que estas se


desarrollan en una gran parte a partir del diseo de una interface grfica. En una aplicacin
Visual Basic, el programa est formado por una parte de cdigo puro, y otras partes asociadas
a los objetos que forman la interface grfica.

Es por tanto un termino medio entre la programacin tradicional, formada por una sucesin
lineal de cdigo estructurado, y la programacin orientada a objetos. Combina ambas
tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos
tipos de programacin, debemos inventar una palabra que la defina : PROGRAMACION
VISUAL.

La creacin de un programa bajo Visual Basic lleva los siguientes pasos:

Anlisis . Es el studio de las necesidades que han dado origen a la creacin de ese
programa. Es lo que se se llama Anlisis de la aplicacin. Es la primera fase que debe
tener siempre un programa y es tambien la ms olvidada entre los programadores
noveles. Una aplicacin no se inicia con el teclado, sino sobre un papel.

- Creacin de un interface de usuario. Este interface ser la principal va de


comunicacin hombre mquina, tanto para salida de datos como para entrada. Ser
necesario partir de una o varias ventanas - Formularios - a las que le iremos
aadiendo los controles necesarios.

- Definicin de las propiedades de los controles Se dar la forma, posicin, y


todas las caractersticas necesarias a los controles que hayamos colocado en ese
formulario. Estas propiedades determinarn la forma esttica de los controles, es decir,
como son los controles y para qu sirven.

- Generacin del cdigo asociado a los eventos que ocurran a estos controles. A
la respuesta a estos eventos (click, doble click, una tecla pulsada, etc.) le llamamos
Procedimiento, y deber generarse de acuerdo a las necesidades del programa.

- Generacin del cdigo del programa. Un programa puede hacerse solamente con
la programacin de los distintos procedimientos que acompaan a cada objeto. Sin

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 2


embargo, VB ofrece la posibilidad de establecer un cdigo de programa separado de
estos eventos. Este cdigo puede introducirse en unos bloques llamados Mdulos, en
otros bloques llamados Funciones, y otros llamados Procedimientos. Estos
Procedimientos no responden a un evento acaecido a un control o formulario, sino que
responden a un evento producido durante la ejecucin del programa.

No es necesario entender de momento lo anterior. Visual Basic introduce un concepto nuevo


de programacin, y es necesario cambiar hasta el argot del programador. Posiblemente se le
habrn acumulado demasiados trminos de una sola vez. Es normal. A poco que siga leyendo
ver las cosas mas claras cuando se explique una por una.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 3


VARIABLES. DEFINICION Y ENTORNO

Basic, desde siempre, al contrario de otros sistemas de programacin, no exigi la definicin


previa de una variable. Una variable, como Vd. seguro que conoce, es un nombre que en el
programa le asignamos a un dato. Ese dato podr cambiar. Piense por ejemplo, en un
programa consistente en la toma de datos de los alumnos de un centro escolar. Existirn varias
variables para poder introducir los datos de los alumnos. Estas variables pueden tener nombre
tales como:

Nombre
Apellido1
Apellido2
Direccin
Telfono
Salario

La variable Nombre tomar valores distintos segn vayamos introduciendo los datos de los
distintos alumnos. Es posible, que a lo largo de la ejecucin del programa, esta variable
Nombre valga:

Jos
Pedro
Mara
Luis

Espero que su intuicin o conocimiento anterior le lleve a conocer el concepto de variable. Mas
adelante lo ver mas claro.

Decamos que Basic no exige la definicin previa de las variables. Otras herramientas exigen
que se haga as. Por lo tanto es normal encontrar, en otros sistemas de programacin, que un
programa comienza de la siguiente forma:

Declare Nombre As String Le dice que Nombre es una sucesin de letras


Declare Apellido1 As String
Declare Apellido2 As String
Declare Direccin As String
Declare Telfono As String Le dice que Telfono es una sucesin de letras
Declare Salario As Nmero Le dice que Salario es un nmero

Mediante estas declaraciones, el programa sabe de que tipo de dato se trata y por tanto cmo
debe trabajar con l. En otros sistemas de programacin distintos de Basic, es necesario
realizar esta declaracin antes de introducir una variable.

Basic permite que no se declaren. Cuando a lo largo del programa le introducimos una variable
nueva, asume que es una variable y que el tipo es el adecuado para el valor que le estamos
introduciendo en ese momento.

Por ejemplo, si Basic encuentra estas instrucciones

Salario=50000000
Nombre ="Pedro"
Telfono = "1234567"

entiende que Salario, Nombre y Telfono son variables, que Salario es un nmero (No hemos
metido su valor entre comillas), y que Nombre y Telfono son sucesiones de caracteres
alfanumricos (su valor est entre comillas)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 4


Esta particularidad de no necesitar declarar las variables hace que sea sencillo introducir una
variable nueva. Sin embargo entraa un gran peligro. Imagnese que en un paso posterior del
programa, le mandamos escribir esos tres datos anteriores con la instruccin PRINT

Print Salario
Print Nombre
Print Telwfono

Habr observado en tercer lugar la palabra Telwfono, que por error ha introducido el
programador. Basic interpreta que Telwfono es una variable e ir a leer en memoria el valor
que tiene. No tendr ningn valor. Por lo tanto no escribir nada y encima no dar ningn aviso
de que se ha cometido un error. Nada es gratis en esta vida, y la facilidad para introducir
variables se paga con la posibilidad de un error.

El peligro de no declarar las variables no termina en esa posibilidad de error. Cuando no


declaramos el tipo de variables, Visual Basic supone que la variable es de un tipo que soporta
cualquier tipo de datos : una variable tipo Variant. En ese tipo podr meter cualquier tipo de
variable, pero a costa de ocupar mucho mas espacio en la memoria que si la hubiese
declarado con el tipo correcto para el dato que va a meter en ella.

Basic ha pensado en ese problema, y se puede solucionar con esta que ser la primera
instruccin BASIC que vamos a estudiar:

OPTION EXPLICIT

Obliga a declarar previamente las variables que se vayan a usar. De no haberla


declarado antes de usarla, el programa dar una comunicacin de error.

Esta declaracin debe ponerla al comienzo de la seccin de declaraciones de cada formulario y


mdulo que contenga su aplicacin. Pero no se preocupe de ello puesto que VB lo ha hecho
por Vd. Basta que lo programe en las opciones del VB. Haga click en Herramientas |
Opciones de la barra de men del VB y le aparecer este cuadro, donde debe marcar las
casilla Requerir declaracin de variables. A partir de ahora, ser VB quien ponga la
sentencia Option Explicit en el lugar correcto. (Fig. 1.1)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 5


TIPOS DE VARIABLES

Las variables pueden ser de los siguientes tipos: (El nmero indicado en segundo lugar indica
el nmero de Bytes que ocupa en memoria.)

Booleana (2) Admite los valores 0 y 1, o True (verdadero) y False (falso)


Byte (1) Nmeros enteros, en el rango de 0 a 255
Integer (2) Nmeros enteros en el rango de -32768 a 32767
Long (4) Nmeros enteros en el rango de -2147483648 a 2147483647
Single (4) Punto flotante, simple precisin
Doble (8) Punto flotante, doble precisin.
Currency (8) Entero, con punto decimal fijo (Tpico de monedas)
String (*) Cadenas alfanumricas de longitud variable o fija
Date (8) Fechas
Objet (4) Referencia a objetos
Variant (**) Otros tipos de datos

(*) Una variable tipo String ocupa el mismo nmero de bytes que caracteres tenga la cadena.
(**) Una variable tipo Variant ocupa 16 bytes si se trata de un nmero y 22 bytes + longitud de
la cadena si se trata de un dato tipo cadena de caracteres.

Existen tambin variables definidas por el usuario (Ya ver la sentencia Type). En este tipo de
variables se pueden introducir muchos datos de distinto tipo. Los bytes necesarios para
almacenar esa variable depender de los datos que se hayan definido.

Dentro de las variables Objet (variables que se refieren a objetos) existe una gran variedad
que a estas alturas del curso no debemos complicarnos con ellas. Pero para adelantar algo,
veremos que una variable puede ser del tipo Form - Formulario - , tipo Recordset, etc. etc.

Cada tipo de variable ocupa unos determinados bytes. Si no se define una variable, VB toma
como tipo por defecto para la variable el tipo Variant, tal como citbamos anteriormente. Este
tipo ocupa mas bytes que, por ejemplo, un integer. Si el tipo de dato que vamos a introducir en
una variable es un integer, y no la hemos declarado como tal, VB asumir para esa variable
que es del tipo Variant, lo que le llevar a gastar mas bytes de memoria (16) que los que
necesitara (2) si la hubisemos declarado previamente. Si esa variable va a estar en el rango
de 0 a 255, y no declaramos previamente que la variable va a ser del tipo Byte, o la declaramos
como integer, p. e., estamos desperdiciando memoria RAM y posiblemente, retardando la
ejecucin del programa. Lo mismo podemos decir del resto de las variables, y lo importante
que es declararlas y declararlas bien.

NOTA. Observe en la lista anterior que un dato Booleano ocupa 2 Bytes, mientras que un dato
tipo Byte ocupa un byte. En muchas ocasiones declaramos variables tipo Boolean con la
intencin de que ocupen menos espacio. Paradoja del VB. Si la declaramos como Byte
ocupamos menos espacio en memoria. Declarar una variable como Boolean tiene tambin sus
ventajas (escribir menos cdigo por lo general cuando necesite leer o escribir una variable
tipo Boolean), pero tenga presente esta observacin respecto al tamao de los datos Boolean.

Puede declarar el tipo de la variable mediante un carcter despus del nombre de la variable.
Esta tcnica, obligatoria en Quick-Basic, est en desuso en VB. No es recomendable definir el
tipo de esta forma, pues existe un serio peligro de error. De cualquier forma, eso es potestativo
del programador y de sus costumbres.

Los caracteres que definen cada tipo de variable son:

% Integer & Long ! Single

# Double @ Currency $ String

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 6


Ejemplos Prcticos de declaracin de variables

En Visual Basic, cuando declaramos una variable como String (Cadena de caracteres), no es
necesario declarar su longitud. VB aceptar cualquier nmero de caracteres. Si desea evitar
que se puedan introducir ms de un determinado nmero de caracteres, debe declarar su
nmero. Por ejemplo :

Dim Var1 as String Var1 puede tener cualquier nmero de caracteres

Dim Var2 as String * 15 Var2 puede tener un mximo de 15 caracteres.

En este segundo caso, si se introduce como Var2 una cadena de caracteres con mas de 15
caracteres, Var2 tomar solamente los 15 primeros. Visual basic no presenta ningn aviso de
que esa variable ha omitido los caracteres que han sobrepasado la cifra de 15. Si desea que el
usuario conozca esa circunstancia, debe introducir el cdigo oportuno para producir el aviso.

La declaracin de variables tipo String con nmero de caracteres predefinido presenta tambin
inconvenientes a la hora de tratar esa cadena de caracteres con sentencias tales como Mid,
Left y Right, o a la hora de aadir una cadena a otra. La experiencia nos indica que NO
merece la pena declarar variables tipo String con el nmero de caracteres prefijado,
excepto que sea necesario justamente para definir la longitud de la cadena.

En una gran parte de los casos una variable que se compone de nmeros debe declararse
como una variable de cadena de caracteres (String), y no como numrica. Cuando pensamos
por ejemplo en un nmero de DNI, compuesto por 7 u 8 cifras, un cdigo postal, el nmero de
una calle, el piso de un edificio, parecen invitar a que la variable que los contenga sea una
variable de tipo numrico (Byte, Integer, Long, ...). Estas variables, aunque su contenido sean
nmeros, siempre se deben declarar como String, ya que se tratan en realidad de cadenas de
caracteres, aunque estos no sean letras sino nmeros. Para aclarar mas estas ideas, piense
en el nmero del DNI con la letra del NIF incluido, o que el lugar del DNI se deba rellenar con el
nmero del permiso de residencia, (lleva letras). Piense en el cdigo postal de una provincia
que comienza por 0 ( 08XXX = Barcelona ) . Si la variable que va a contener ese cdigo postal
se declara como numrica, el cero de la izquierda lo desprecia, por lo que ese cdigo postal
quedara reducido al 8XXX, nmero de 4 cifras que el cartero nunca reconocera como un
cdigo postal, que necesariamente ha de tener 5 cifras. Para terminar, piense la forma de
introducir en una variable numrica el nmero 32Bis de una calle o el piso S2 de un edificio. O
piense en una variable que va a contener un cdigo de un producto. Ese cdigo siempre va a
ser un nmero, por ejemplo de 9 cifras. Ha pensado como tratara el ordenador una variable
numrica que contiene el cdigo 000100123 ?. El resultado sera que convertira ese cdigo en
la cifra 100123, y Vd. deber buscarse la vida para aadir los ceros iniciales a la hora de
sacarlo a una impresora, por ejemplo.

En todos los casos anteriores, el nmero no representa una cantidad numrica, sino un
nombre. Lo que ocurre es que ese nombre contiene solamente nmeros.

Qu variables debemos declarar entonces como numricas ? La respuesta es bien sencilla :


Aquellas que van a contener datos con lo que vamos a realizar operaciones
matemticas.

Las variables booleanas (True/False) pueden en muchos casos sustituirse por una variable del
tipo Byte. Si ese datos True / False se va a introducir en una base de datos o en fichero en el
disco, puede ser mas prudente poner 0 en vez de False y 1 en vez de True.

Una variable byte ocupa muy poco, simplemente 1 byte como su nombre indica. Pero no puede
contener nmeros mayores de 255 ni nmeros negativos.

Cada vez que declare una variable numrica piense en los valores que puede tener, sobre todo
cuando esa variable va a ser el resultado de una operacin matemtica. Recuerde el escaso

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 7


margen de una variable tipo Integer ( de -32768 a 32767)

Si la aplicacin va a tratar moneda, piense en la forma de expresar los nmeros decimales y el


nmero de ellos permitidos, as como el redondeo. La variable correcta para este caso es
Currency, pero Currency le aade automticamente el tipo de moneda de cada pas (Pts. Para
Espaa) lo que con frecuencia es un engorro. Los datos del tipo de moneda los toma del
sistema operativo del ordenador, por lo que no se extrae si le expresa el nmero de pesetas
en dlares. Cambie el pas en su S. O.

Otro tipo de variable es Date. Este tipo de variable representa una fecha o una hora. Pero
debe ser objeto de un estudio un poco mas extenso para tener claro que es una fecha para
Visual Basic, como las trata y como se pueden comparar. Lo ver mas adelante al estudiar las
funciones Format y DateDiff.

Ambito de las variables.

Denominamos mbito de una variable a las partes del programa donde esa variable est
declarada. Para entenderlo mejor, veamos someramente la forma de un programa
desarrollado en VB.

Un programa VB tiene uno o varios formularios. Cada formulario tiene varios controles. Tanto el
formulario como cada uno de sus controles tienen una parte del programa, justamente la parte
relacionada con cada uno de los eventos que pueden suceder bien al formulario o a los
controles. A estas partes las habamos llamado Procedimientos. Podemos tener
procedimientos que no estn relacionados con ningn evento ocurrido al formulario o a sus
controles. (Los Procedimientos que iremos insertando a lo largo de la aplicacin)
Aparte de formularios y controles, un programa puede tener Mdulos, y en cada uno de los
mdulos podemos insertar cuantos Procedimientos y Funciones queramos. La estructura de
un programa VB puede ser de la siguiente forma:

Formulario1 Formulario2 Formulario3 Mdulo1 Modulo2


Declaraciones Declaraciones Declaraciones Declaraciones Declaraciones
Proc. A1 Proc.B1 Proc.C1 Proc.D1 Proc.E1
Proc. A2 Proc.B2 Proc.C2 Proc.D2 Proc.E2
Proc. A3 Proc.B3 Proc.C3 Proc.D3 FuncinE1
Proc. A4 Proc.B4 Proc.C4 Proc.D4 FuncinE2
Proc. A5 Proc.BB1 Proc.CC1 FuncinE3
Proc. AA1 Proc.BB2 Proc.CC2 FuncinE4
Proc. AA2 Proc.B33 Proc.CC3 FuncinE5
Proc. AA3 Proc.CC4 FuncinE6

Si se declara una variable dentro de un procedimiento o Funcin, esa variable "NO SALE" del
Procedimiento o Funcin donde se declar. El procedimiento puede estar en un Formulario
(Cualquier procedimiento de un control o un procedimiento creado por nosotros) o en un
Mdulo (En este caso, el procedimiento solo puede ser creado por nosotros)

En un Formulario, una variable puede declararse de dos formas : Privada o Pblica. Para
declarar una variable a nivel de formulario debe hacerse en la seccin de declaraciones, que
est la ventana de cdigo Objeto = General, Proc. = Declaraciones. Si se declara Privada,
esa variable se puede ver en todo el formulario, (es decir, en todos los procedimientos de todos
los controles del formulario y en los Procedimientos que pudisemos insertar en ese
formulario), pero no sale de dicho formulario. Si se declara como Pblica, esa variable puede
verse por todo el formulario, de la misma forma que lo hara declarada como Privada, y
adems puede ser usada desde otro Formulario o Mdulo, citndola con el nombre del
Formulario, seguido del nombre de la variable (Formulario.Variable)

En un Mdulo una variable puede declararse como Privada, con lo que no saldr de ese

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 8


Mdulo, o Pblica, pudiendo en este caso usarse en todo el programa. Cuando se declara una
variable como pblica en un Mdulo, basta referirse a ella por su nombre, sin citar el nombre
del Mdulo donde se declar.

En VB es posible declarar varias veces las variables, es decir, pueden declararse a nivel de
formulario, en su apartado de declaraciones, y esa variable conservar su valor en todas las
partes de ese formulario. Sin embargo, si se declara una variable con el mismo nombre a un
nivel inferior, por ejemplo al principio de un procedimiento, esa variable ser una variable
distinta a la anterior, aunque tenga el mismo nombre, al declararla en un Procedimiento,
solamente ser vlida en ese Procedimiento. Una vez que hayamos salido de ese
procedimiento, la variable con ese nombre volver a ser la declarada en el Formulario. En
realidad, lo que tenemos son dos variables distintas, pero con el mismo nombre, una declarada
para todo el formulario excepto para el procedimiento donde se volvi a declarar, y otra para
ese procedimiento concreto.

NOTA.- No es recomendable declarar una variable a dos niveles. Es mucho mejor utilizar otro
nombre para esa variable dentro del procedimiento donde se le declarara por segunda vez. A
esta nota cabe exceptuar cuando declaramos variables para una operacin tipo contador

For I = 1 To N

Esa variable I es prctico declararla con el mismo nombre en cada Procedimiento donde se
use.

Tipos de declaracin de variables.

Sentencia DIM Es la forma mas comn de declarar una variable como


Privada. Puede emplearse en un Procedimiento, Funcin,
Formulario o Mdulo. La sintaxis es de la siguiente forma:

Dim nombrevariable As Integer (o el tipo que sea)

Declarando una variable con la sentencia DIM, en un formulario, Funcin, procedimiento o


mdulo, el mbito de la variable ser el explicado anteriormente para una variable declarada
como Privada. Es decir, esa variable no sale del formulario, procedimiento mdulo donde se
declar. Cada vez que entremos al formulario, procedimiento o mdulo, esa variable tomar el
valor cero (si es numrica) o nulo (si es string).

Sentencia PRIVATE Es la forma de declarar una variable como Privada. Puede


emplearse solamente en la seccin de declaraciones de un
Formulario o Mdulo. La sintaxis es de la siguiente forma:

Private nombrevariable As Tipovariable

Declarando una variable mediante la sentencia PRIVATE en un Formulario o Mdulo, esa


variable puede usarse en todo ese Formulario o Mdulo (En todos sus Procedimientos y
Funciones), pero NO fuera del Formulario o Mdulo donde se declar.

La sentencia Private no puede usarse en un procedimiento o funcin.

Sentencia PUBLIC Es la forma de declarar una variable como Pblica. Puede


emplearse solamente en la seccin de declaraciones de un
Formulario o Mdulo. La sintaxis es de la siguiente forma:

Public nombrevariable As Tipovariable

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 9


Declarando una variable de esta forma en la seccin de declaraciones de un Mdulo, esa
variable puede usarse en cualquier parte del programa citndola simplemente por su nombre.
Si se declara de esta forma en la seccin de declaraciones de un Formulario, esa variable
puede usarse en toda el programa. Para nombrarla, si estamos en el Formulario donde se
declar basta con citarla por su nombre. Si no estamos en ese Formulario, habr que citarla
por el nombre del Formulario, seguido del nombre de la variable, separados por un punto :

NombreFormulario.Nombrevariable

En un Mdulo puede usarse tambin la sentencia Global en vez de Public :

Sentencia GLOBAL Declara una variable que es vlida en todo el programa. La


sintaxis es:

Global nombrevariable As tipovariable

La sentencia Global slo puede usarse en el apartado de declaraciones de un Mdulo. Esta


sentencia se mantiene por compatibilidad con versiones anteriores de VB. No la use.

Sentencia STATIC

Como se dijo anteriormente, una variable declarada en un procedimiento pierde su valor al salir
de l. Lo peor es que una vez que el programa vuelva a entrar en ese procedimiento, la
variable estar puesta a cero. Afortunadamente, esto ltimo tiene solucin. Si declarsemos
una variable en un procedimiento o funcin, como esttica, esa variable, aunque no la
podremos utilizar fuera de ese procedimiento o funcin, cuando volvamos a l conservar el
valor que tena cuando lo abandonamos. Esta declaracin como esttica se realiza mediante la
instruccin Static

Static nombrevariable As tipovariable

El nombre de una variable puede ser tan largo como queramos. hasta un mximo de 40
caracteres. En la versin VB para Espaa se pueden usar incluso la y vocales acentuadas.
Es indiferente usar mayscula minsculas. No se sorprenda, si por ejemplo, la ha declarado
con maysculas y luego la cita con minsculas al escribir el cdigo, que automticamente se
cambie a maysculas. El nombre de una variable siempre debe comenzar por una letra.

No hay problema por utilizar variables largas. Al compilar el programa no se lleva el nombre, es
decir, no le va a ocupar mas espacio. Utilice siempre nombres que le definan la variable con
algn sentido. Es muy til a la hora de acordarse como se llaman, y sobre todo, a la hora de
rehacer un programa que realiz hace seis meses.

Pese a que Visual Basic no obliga a declarar variables, es muy til hacerlo. De esta forma se
tiene control sobre el programa. La experiencia se lo ir demostrando.

Resumimos la forma de declarar una variable:

En un Procedimiento (La variable no puede usarse fuera de esta Procedimiento)

Dim Variable As Tipovariable

En un Procedimiento, como permanente (La variable no puede usarse fuera de este


procedimiento, y dentro de l conserva el valor aunque se salga y se vuelva a entrar)

Static Variable As Tipovariable

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 10


En un Formulario (En su seccin de declaraciones)

Como Privada (Solamente se puede usar en ese Formulario)

Dim Variable As Tipovariable

Private Variable As Tipovariable

Como Pblica (Puede usarse en toda la aplicacin)

Public Variable As Tipovariable

En un Mdulo

Como Privada (Solamente puede usarse en ese Mdulo)

Dim Variable As Tipovariable

Private Variable As Tipovariable

Como Pblica (Puede usarse en toda la aplicacin)

Public Variable As Tipovariable

Global Variable As Tipovariable

Error tpico de un programador novel de Visual Basic

Creo que esta costumbre viene del lenguaje C. Pero no vale en VB. Se trata de declarar varias
variables juntas en una misma lnea :

Dim Variable1, Variable2, Variable3, Variable4 As String

Esta declaracin est MAL hecha. Visual Basic interpretar que Variable1, Variable2 y
Variable3 son del tipo Variant, y solamente Variable4 la supone como tipo String

La forma correcta de hacerlo, si queremos declarar esas variables un una sola lnea, es la
siguiente :

Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 As String.

Forma de conocer el tipo de una variable. Funcin TypeName

Podemos conocer el tipo con el que se ha declarado una variable. Esto se hace mediante la
Funcin TypeName, que devuelve una cadena con el tipo de una variable.

MiTipo = TypeName(NombreVariable)

NombreVariable puede ser cualquier variable con excepcin de las de tipos definidos por el
usuario.

La cadena de caracteres devuelta por TypeName puede ser una de las siguientes:

Cadena devuelta La variable contiene

Byte Un byte
Entero Un entero.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 11
Largo Un entero largo.
Simple Un nmero de punto flotante de precisin simple.
Doble Un nmero de punto flotante de precisin doble.
Moneda Un valor de moneda.
Fecha Una fecha.
Cadena Una cadena.
Boolean Un valor Boolean.
Error Un valor de error.
Empty No inicializado.
Null No hay datos vlidos.
Objeto Un objeto que no respalda Automatizacin OLE.
Desconocido Un objeto de Automatizacin OLE cuyo tipo es desconocido.
Nada Una variable de objeto que no se refiere a un objeto.

Si NombreVariable es una matriz, la cadena devuelta puede ser cualquiera de las cadenas
posibles con un parntesis vaco adherido. Por ejemplo, si NombreVariable es una matriz de
enteros, TypeName devolver "Integer()".

Vamos a hacer nuestro primer programa en Visual Basic. Arranque VB y coloque en el


formulario que aparece nada mas arrancarlo, un botn de comando (CommandButton) y tres
etiquetas (Label). El botn de comando le aparecer con el nombre de Command1 y los labels
con Label1, Label2 y Label3. Haga doble click sobre el formulario. Le aparecer una ventana.
En la parte superior izquierda tiene una lnea con la palabra Form y una flecha hacia abajo que
parece que va a desplegar algo. Haga click sobre esa flecha y luego sobre la palabra General
que le aparecer. Teclee aqu las declaraciones de varias variables (observe que en la ventana
similar de la derecha aparece Declaraciones). Puede que ya le aparezca la linea con Option
Explicit. Si no le aparece, teclela.

Option Explicit
Dim MiString As String Hemos declarado que MiString es una variable tipo String
Dim MiEntero As Integer
Dim MiObjeto As Control Hemos declarado que MiObjeto es una variable tipo Objeto

Haga doble click sobre el botn de comando. Le aparecer la ventana anterior, pero referida
ahora al Command1. Teclee el siguiente cdigo :

Private Sub Command1_Click()


Set MiObjeto = Command1 Y aqu decimos que MiObjeto es precisamente el Command1

Label1 = TypeName(MiString)
label2 = TypeName(MiEntero)
Label3 = TypeName(MiObjeto)
End Sub

En los labels 1, 2 y 3 aparecer el tipo de cada variable: String, Integer y CommandButton.

Esta funcin tiene mucha utilidad para determinar errores durante el diseo. Cuando aparece el
error No coinciden los tipos puede interrogarse al programa para ver qu tipo de variable es el
que hemos declarado. Esta idea es especialmente til cuando el trabajo a realizar sea retomar
el trabajo comenzado por otro programador.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 12


Lenguaje Basic del Visual Basic.
No ha sido un juego de palabras. VB emplea unas instrucciones casi iguales a las que emplea
Quick Basic. Sin embargo ha aadido otras nuevas instrucciones, inherentes con la
programacin visual. Vamos a estudiar aqu las instrucciones y definiciones mas sencillas,
comunes a QB y VB.

Sentencias condicionales.

Llamamos sentencias condicionales a aquellas que se realizan si se cumple una determinada


condicin. Son las sentencias por las que empieza cualquier texto de Basic, y este no va ser
menos.

La sentencia condicional ms usada es:

Si se cumple una condicin Entonces

Realiza estas instrucciones

Si no se cumple

Realiza estas otras instrucciones

Fin de la sentencia.

As de fcil es programar en Basic. Lo que ocurre es que esta herramienta habla ingls, y lo
descrito anteriormente toma la forma:

If condicin Then
Instrucciones
Else
Otras instrucciones
End If

En este ejemplo, o se cumple una condicin y ejecuta unas determinadas instrucciones, o no


se cumple, y ejecuta otras instrucciones distintas. Puede ocurrir que, caso de no cumplirse la
condicion primera, se abra un abanico de dos o tres posibilidades. La sentencia condicional
tendra entonces la forma:

If condicin 1 Then
Instrucciones
ElseIf Condicin 2
Otras instrucciones
ElseIf Condicin 3
Otro juego de instrucciones
Else
Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3.
End If

Como decamos anteriormente, este es el tipo de sentencia condicional mas usada.

Existe otra sentencia condicional muy usada: Select Case

Su nombre casi nos define lo que es: Selecciona, dependiendo del caso, un determinado juego
de instrucciones:

Select Case variable ' variable es una variable que puede tomar los valores (p.e.) de

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 13


1a4

Case 1
Instrucciones a ejecutar en caso de que variable = 1
Case 2
Instrucciones a ejecutar en caso de que variable = 2
Case 3
Instrucciones a ejecutar en caso de que variable = 3
Case 4
Instrucciones a ejecutar en caso de que variable = 4
Case Else
Instrucciones a ejecutar en caso de que variable sea distinta a los valores
anteriores
End Select

Este procedimiento resulta mucho mas sencillo y rpido que las sentencias If Then Else
vistas anteriormente, cuando el margen de eleccin es mayor que 2.

Puede agrupar varios valores en una misma lnea. Por ejemplo, si tiene 100 valores posibles, y
el tratamiento es igual para varios de ellos, puede agruparlos as:

Select Case Valor


Case Is < 20
Instrucciones
Case Is = 20
Instrucciones
Case Is = 21, 22, 23, 24, 25, 26
Instrucciones
Case Is > 26
Instrucciones
End Select

Cuando lo que queremos es elegir un valor, no ejecutar instrucciones como hacamos


anteriormente, disponemos de otras dos funciones: Choose y Switch.

Switch toma una serie de parmetros, todos por parejas. El primer trmino de cada pareja es
la expresin a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es
una funcin (las funciones las veremos muy pronto)

A = Switch (B=1, 5, B=2, 7, B=3, 11)

Esta instruccin obtiene un valor para A que depender del valor que tome B entre los valores
posibles (1, 2 3)

La sentencia Choose es casi igual, cambia solamente la forma. La misma intruccin anterior
puede realizarse con Choose de la siguiente forma:

A = Choose ( B, 5, 7, 11 )

En estas sentencias, Switch y Choose, si el valor de B no coincide con ninguno de los


valores que se le haban establecido (1, 2 3 en nuestro caso), la sentencia devuelve el valor
Nulo ( Null ). Esto puede producir algn error si no se contempla esa posibilidad.

Las sentencias Switch y Choose no se usan mucho en programacin. Parece que los
programadores o no las conocen o se lan (y es comprensible) al utilizarlas. Le garantizo que
puede llegar a ser un gran programador sin necesidad de utilizarlas. Use preferentemente If
End If y Select Case.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 14


Otra sentencia condicional: IIF

Devuelve uno de entre dos valores, dependiendo de la evaluacin de una expresin.

Sintaxis Iif (Expresin, SiEsCierto, SiEsFalso)

Expresin es la expresin a evaluar.

SiEsCierto Valor o expresin devuelta si Expresin es True.


SiEsFalso Valor o expresin devuelta si Expresin es False.

Observaciones

IIf siempre evala SiEsCierto y SiEsFalso, aunque slo vaya a devolver una de ellas. Por esta
razn, deber vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar
SiEsFalso se produce un error de divisin entre cero, se generar un error aunque Expresin
d como resultado True.

Como ejemplo, en el formulario de nuestro primer programa introduzca un nuevo botn de


comando. Introduzca tambin un TextBox. Vea que poco a poco vamos metiendo cosas
aunque no las conocemos todava. Mas tarde las conocer. El TextBox tendr por nombre
Text1. Haga doble click sobre el botn de comando e introduzca el siguiente cdigo :

Private Sub Command2_Click()


Dim MiVariable As String
MiVariable = IIf(Clng(Text1.Text) > 100, "Es mayor", "Es menor")
Label1 = MiVariable
End Sub

Al ejecutar el programa, debe introducir un valor numrico en Text1. Si ese valor numrico es
menor que 100, MiVariable tomar el valor Es menor (No se cumple la condicin expresada
en el primer parmetro Text1.Text > 1000). Si introduce una cantidad mayor, se cumple esa
condicin, por lo que MiVariable tomar el valor Es mayor. El valor que toma la variable
puede verlo en Label1.

Fjese que hemos declarado MiVariable como String, ya que va a contener un dato tipo cadena
de caracteres.

Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar las
propiedades de un objeto, obtener resultados de operaciones, ....

Sentencias de bucle.

Es muy comn utilizar bucles a lo largo de un programa. Un bucle es una sucesin repetitiva de
instrucciones, que se estarn realizando mientras se cumpla una condicin o mientras no se
cumpla otra condicin. Es tan sencillo como esto:

Mientras condicin

Instrucciones

Fin del bucle

Existen dos formas de bucle: Una, que realiza un nmero determinado de recorridos por el
bucle. Es el denominado bucle por contador. Otra, realiza el bucle hasta que se cumpla (o deje
de cumplirse) una condicin. Es el llamado bucle por condicin.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 15


Bucle por contador

Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a
presentar las 26 letras maysculas del alfabeto ingls

For N=65 To 90
Label1.caption = Chr ( N )
Next N

Este "programa" nos presentar en una caja (Label) los caracteres cuyo nmero ASCII vaya
desde el 65 (A) al 90 (Z) Comenzar presentando el correspondiente al nmero 65, e ir
presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parar.

Bucles por condicin

Ejecuta las instrucciones del bucle mientras se cumple una condicin

X=0
Do While X < 1000
X=X+1
Loop

El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero,
e incrementa su valor una unidad. Analiza si el valor de X es menor que 1000, y si es cierto,
vuelve a realizar el bucle. As hasta que X ya no sea menor que 1000. Al dejar de cumplirse
que X sea menor que 1000, sale del bucle. Acabamos de realizar un temporizador, y tambin
de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como
final de leccin, se propone un problema. Con el primer bucle, donde visualizbamos los
caracteres A a la Z, posiblemente no nos diese tiempo de ver cada una de las letras que iban
apareciendo en la pantalla, en la etiqueta Label1, dado que cambiara con mucha velocidad, y
solamente veramos la Z, que es donde se detuvo el programa. Podemos poner un
temporizador cada vez que presente una letra, y as nos dar tiempo a verla. Con los dos
bucles vistos anteriormente ya podemos hacerlo.

Si lo que queremos es que el programa se ejecute mientras no se cumpla una determinada


condicin, la sentencia ser:

X=0
Do Until X > 1000
X=X+1
Loop

Observe que la diferencia entre una y otra es la condicin, While para indicar Mientras se
cumpla que ... y Until para indicar Mientras no se cumpla que ....

Para terminar bien el programa anterior utilizaremos la condicin de While (Mientras se


cumpla la condicin)

For N=65 To 90
Label1.caption = Chr ( N )
Label1.RefreshN ' Refresca la etiqueta
X=0
Do While X < 1000
X=X+1
Loop
Next N

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 16


Este es nuestro primer programa en BASIC. En VISUAL BASIC es idntico, pero nos falta la
interface grfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece al
abrirlo, introducir una etiqueta, (Label) que llevar el nombre por defecto de Label1. Solo nos
queda pensar donde introducimos el cdigo anterior. Podemos introducir un botn de comando
(Command Button) que saldr con el nombre por defecto de Command1. Haga doble click
sobre el botn. Aparecer el procedimiento Click. Este procedimiento es el que se realiza
cuando hacemos click sobre ese botn. Escriba en ese procedimiento este cdigo.

Private Sub Command1_Click() ' Esta lnea sale automticamente


For N=65 To 90
Label1.caption = Chr ( N )
Label1.RefreshN ' Refresca la etiqueta
X=0
Do While X < 1000 ' Bucle de temporizacin (*)
X=X+1
Loop
Next N ' Termina el bucle de temporizacin
End Sub ' Esta lnea sale automticamente

Hemos puesto nuestra primera piedra en Visual Basic. Este ejemplo es muy sencillo. Visual
Basic es tan sencillo como este ejemplo.

(*) Las temporizaciones no se hacen realmente as. El ejemplo anterior no deja de ser
una forma sencilla de detener el programa, para que en los comienzos de su carrera como
programador pueda ver el contenido de una etiqueta. Si lo hiciera de esta forma, su ordenador
estara detenido realizando una funcin bastante triste, contar hasta 1000 para luego continuar
el programa. Y lo que es peor, en un ordenador a 300 MHz. Tardara menos tiempo que en
uno a 66. Esta misma funcin puede hacerla con Sleep que la ver mas adelante, que es la
forma limpia y elegante de hacer una temporizacin

Formas de salir de un bucle

Para salir de un bucle, podemos esperar a que se complete, bien porque se ha cumplido la
condicin (Bucles por condicin) o a que se haya llegado al final de la cuenta (Bucles por
contador). Pero puede ocurrir que interese salir del bucle sin haber terminado la ejecucin total
del mismo, por ejemplo, porque ya hemos encontrado lo que estabamos buscando, y sera una
prdida de tiempo seguir ejecutando el bucle cuando ya hemos obtenido lo que buscamos.
Para ello, basta con ejecutar la sentencia Exit Do (Cuando hemos comenzado el bucle con Do
Until o Do While, o con Exit For cuando lo hemos comenzado con For ... To

Ejemplos

En el siguiente ejemplo pretendemos parar el programa cierto tiempo, a la espera que otro
equipo se conecte a travs del puerto serie. (Cuando se conecte, el control MSComm1
detectar la seal DSR que le enva el otro equipo y deberemos salir inmediatamente del bucle
para, por ejemplo, atender a ese puerto serie)

Contador = 0
Do While Contador < 1000
Contador = Contador + 1
DoEvents
If MSComm1.DSRHolding = True Then Exit Do
Sleep (1000)
Loop

Aqu comenzamos a atender al puerto serie

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 17


En el siguiente ejemplo, deseamos transmitir por el puerto serie una serie de nmeros, del 1 al
1000, pero siempre y cuando que el equipo que est al otro lado de la lnea serie est a la
escucha (Condicin MSComm1.DSRHolding = True) Si se desconecta ese equipo, y la
condicin pasa de True a False, deseamos salir del bucle:

For I = 1 To 1000
If MSComm1.DSRHolding = False Then Exit Do
MSComm1.Output = Str(I)
Next I

No se preocupe que no entienda esto del MSComm. Lo entender perfectamente unos


captulos mas adelante. Lo importante es que entienda la idea de salir de un bucle por la va
rpida.

Funcin DoEvents

Si hablameos de bucles, necesariamente debemos hablar de la funcin DoEvents. Y es as por


la misma razn que cada vez que ponemos un bucle, deberamos poner dentro de ese bucle la
palabra mgica DoEvents.

Imagnese que Visual Basic est ejecutando este cdigo:

Do While Valor < 100


Valor = valor + 1
If Valor = 90 then Valor =1
Loop

Observar que la variable Valor nunca podr llegar a tener el valor 100, puesto que cada vez
que llega a 90 le ponemos de nuevo el valor 0. El programa no va a salir nunca del bucle, pero
adems no podr atender a otros eventos que se produzcan en el ordenador (por ejemplo la
pulsacin de una tecla) ya que el microprocesador est atendiendo solamente a ese bucle. Si
lo est ejecutando desde el propio entorno de Visual Basic, deber parar la ejecucin mediante
las teclas Ctrl Pausa. No podr pararlo mediante el botn Terminar de la barra de
herramientas de VB. En un programa compilado posiblemente tenga que reiniciar el equipo
mediante Alt Ctrl Sup, llevndose por delante el resto de los programas que se estn
ejecutando en ese momento en su PC.

No es difcil cometer este error involuntariamente. Esto es lo que se llama un bucle infinito.
Para que no suceda, o al menos, que si nuestro programa entra en un bucle infinito se pueda
salir de una forma no tan agresiva, hay que introducir dentro del bucle la instruccin DoEvents.
Cuando VB encuentra esta funcin el control del microprocesador al sistema operativo, y si hay
alguna operacin en espera (la pulsacin de una tecla, por ejemplo) la ejecuta y posteriormente
vuelve a ejecutar el bucle. De esta forma, podemos salvar al menos los datos de las otras
aplicaciones que se estn ejecutando al mismo tiempo.

El bucle tomara esta forma:

Do While Valor < 100


Valor = valor + 1
If Valor = 90 then Valor =1
DoEvents
Loop

Salir de un procedimiento antes de terminar su ejecucin

Y ya que explicamos como se sale de un bucle por la va rpida, veamos como salir de un
procedimiento usando tambin esa va rpida.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 18


Para salir de un procedimiento basta con ejecutar la sentencia Exit Sub. En el ejemplo
siguiente, usamos el botn BotonLeerNombre para introducir el dato Nombre en una base de
datos. Pero ese campo puede tener como mximo, 20 caracteres. Si el usuario ha introducido
mas de 20 caracteres, debemos salir del procedimiento donde se introduce ese dato sin
ejecutarlo de forma ntegra:

Private Sub BotonLeerNonbre_Click()


Mivariable = Text1.Text
If Len(Mivariable) > 20 Then
MsgBox "El Campo Nombre debe tener como mximo 20 caracteres"
Text1.Text = ""
Exit Sub Con esta instruccin saldramos de este procedimiento
Else
'Aqui vendran las lineas de instrucciones donde trataramos
'el contenido de Text1, si tuviese menos de 20 caracteres
End If
End Sub

NOTA. Los ejemplos anteriores sirven solamente de ilustracin para explicar el cdigo que
estamos estudiando. Con
No seguridad,
pretendaelver
cdigo
unaescrito
forma puede ser mejorado....
mejor de realizar la misma funcin, que
seguro que existe.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 19


BASIC DE VISUAL BASIC (y2)

Funciones de cadena

Se denomina CADENA a una sucesin de caracteres. Una cadena puede tener uno o varios
caracteres alfanumricos. Una cadena es tambin una sucesin de nmeros.

Ejemplo de cadenas:

Curso de Visual Basic


abcdefghijklmnopqrstuvwxyz1234567890
123456789

Hagamos una distincin entre una cadena que contenga nmeros y un nmero. Un nmero
tiene un valor, pero tambin tiene una presentacin escrita. El valor es algo que estar en el
ordenador como una sucesin de bits. Dependiendo de como lo hayamos declarado, tendr
mas o menos bits. Pero esa informacin no es un nmero legible por el usuario. Lo que s es
legible por el usuario es la representacin en numeracin decimal (u octal, o hexadecimal, o
incluso en binario) de ese nmero. Esa representacin del nmero en un determinado sistema
de numeracin es una cadena.

As, el nmero nueve, que en la memoria del ordenador ser una sucesin de bits, nos lo podr
presentar como:

9 En numeracin decimal
9 En numeracin hexadecimal
11 En numeracin octal
1001 En numeracin binaria

Esas formas de presentarnos el nmero son CADENAS de caracteres. El valor del nmero
dentro del ordenador es un NUMERO.

Para presentar un nmero en la pantalla, el ordenador debe convertirlo previamente a una


cadena.

Cuando introducimos un valor numrico por teclado o pantalla, el ordenador para hacer
operaciones con l, debe transformarlo a un nmero.

Estas consideraciones nos llevan a las dos primeras funciones con cadenas:

Str (nmero) Convierte un nmero a una cadena en numeracin


decimal.

Val (cadena numrica) Obtiene el valor (el nmero) correspondiente a esa


cadena.

Ejemplos

Variablenumerica = Val (TextBox1.Text)

Este ejemplo convierte la cadena de caracteres (numricos) que hubiese en la caja de


texto TextBox1 en un nmero, y asocia este nmero a la variable Variablenumerica.
Si el contenido de la caja de textos no fuesen caracteres numrico (abcd, por ejemplo),
Variablenumerica tomara el valor 0.

Label1.Caption = Str (Variablenumerica)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 20


Este ejemplo pondra en la etiqueta Label1 los caracteres correspondientes al valor que tuviese
la variable Variablenumerica .

Nota para recordar: Siempre habr que convertir un nmero a una cadena cuando queramos
presentarlo en la pantalla. Siempre habr que convertir a nmero la cadena de caracteres
numricos que hayamos introducido por teclado o por pantalla, cuando queramos operar con
ese nmero. Un Label, cuando tiene que presentar un nico nmero, no le pedir que se lo
convierta a cadena, pues VB hace automticamente esa conversin. Sin embargo, cuando
tiene que presentar un nmero, y adems un texto en el mismo Label, VB no realizar
automticamente ese cambio, por lo que le dar un error. Le recomiendo que convierta los
nmeros a variables de cadena siempre que los quiera presentar en un Label o TextBox.
Cuando tenga mas experiencia en VB ver que esta observacin estar un poco de ms. Pero
de momento, convierta cada dato segn lo vaya a necesitar.

Existe una funcin mas amplia que Str. Se trata de Cstr. Esta funcin no solamente
transforma un nmero a una cadena, como hace Str, sino que convierte cualquier tipo de
variable a una variable tipo String (cadena).

Esta funcin transforma, por ejemplo, una variable tipo Booleana en una variable de cadena,
devolviendo la cadena Verdadero si el valor de la variable booleana es True, y Falso si es
False.

Puede tambin transformar a una cadena de caracteres el valor de un CheckBox o de un


OptionButton. En estos casos devuelve 0 y 1 para el CheckBox (Desactivado / Activado) y
Verdadero Falso para el OptionButton (Activado / Desactivado)

label1.Caption = CStr(booleana) Label1.Caption = Verdadero si booleana es true


Label1.Caption = Falso si booleana es False

Label2 = CStr(Check1.Value) Label2.Caption = 1 si Check1 est activado


Label2.Caption = 0 si Check1 est desactivado

Label3 = CStr(Option1.Value) Label3.Caption = Verdadero si Check1 est activado


Label3.Caption = Falso si Check1 est desactivado

Si se aplica Cstr a una variable tipo Fecha/Hora devuelve la fecha / Hora en formato corto.

Vea mas adelante la coleccin de funciones Cxx

Mas funciones de cadena:

Left (cadena, n)
Extrae los n primeros caracteres de una cadena, comenzando por la izquierda.

Si cadena = Curso de Visual Basic (Para todos los ejemplos)

Resultado = Left (cadena, 10) ----> Resultado = Curso de V

Right (cadena, n) Extrae lo n ltimos caracteres de la cadena

Resultado = Right (cadena, 10) ----> Resultado = sual Basic

Mid (cadena, m, n) Extrae n caracteres de la cadena, siendo el primer carcter


extrado el que ocupa el lugar m.

(Vea Instruccin Mid mas abajo)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 21


Resultado = Mid (cadena, 3, 10) ----> Resultado = rso de Vis

LCase (cadena) Devuelve otra cadena igual, pero con todos los
caracteres en minsculas. (LCase = Lower Case)

Resultado = Lcase (cadena) ----> Resultado = curso de visual basic

UCase (cadena) Devuelve otra cadena igual, pero con todos los
caracteres en maysculas. (UCase = Upper Case)

Resultado = UCase (cadena) ----> Resultado = CURSO DE VISUAL BASIC

Len (cadena) Devuelve la longitud de la cadena

Resultado = Len (cadena) ----> Resultado = 21

LenB (Cadena) Devuelve el nmero de Bytes empleados para almacenar la


cadena. Sorprndase, es el doble que Len (Cadena)

String (n, carcter) Devuelve una cadena de n caracteres como el indicado

Resultado = String (8, "a") ----> Resultado = aaaaaaaa

Resultado = String (8, Chr(65)) ----> Resultado = AAAAAAAA

Resultado = String (8, 65) ----> Resultado = AAAAAAAA

Space (n) Devuelve una cadena formada por n espacios.

Resultado = "A" + Space (6)+ "B" ----> Resultado = A B

LTrim Elimina los posibles espacios que tenga una cadena por
Su izquierda.

Rtrim Elimina los posibles espacios que tenga una cadena por
Su derecha.

Trim Elimina los espacios que tenga una cadena, tanto por su
izquierda como por su derecha. (No elimina los espacios
centrales de la cadena)

Estas tres funciones se emplean para quitar los posibles espacios que pueden resultar
de una entrada de datos. Tienen especial importancia cuando se toman los datos de un archivo
o base de datos, donde fueron introducidos por otro programa.

La funcin Trim hay que usarla cada vez que convertimos un nmero a cadena de caracteres.
Cuando usamos Str(Nmero), la funcin Str introduce un espacio al comienzo de la cadena
que, en la mayor parte de los casos, produce un error cuando lo vamos a comparar, a
introducir en una base de datos, etc.

(Vea Ejercicio Cap11 del disco)

No se pone ningn ejemplo de estas funciones, pues sera difcil verlo impreso.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 22


InStr (cadena, cadena1) Busca la cadena1 dentro de cadena y
devuelve el nmero de orden dentro de cadena donde se encuentra la primera letra de
cadena1

Resultado = InStr (cadena, "sua") ----> Resultado = 12

StrConv Convierte una cadena de caracteres en otra, segn las


instrucciones que le sigan. Puede sustituir a UCase o LCase si la
instruccin es UpperCase o LowerCase respectivamente, o poner la
primera letra de todas las palabras de la cadena en maysculas, si la
instruccin es ProperCase.

Resultado = StrConv (cadena, UpperCase) ----> Resultado = CURSO DE


VISUAL BASIC

Resultado = StrConv (cadena, LowerCase) ----> Resultado = curso de visual


basic

Resultado = StrConv (cadena, ProperCase) ----> Resultado = Curso De Visual


Basic
Instruccin Mid

Mid puede usarse tambin para cambiar el contenido de una cadena. Observe la sutileza entre
Mid como Funcin de cadena y Mid como Instruccin.

La Instruccin Mid reemplaza un nmero especificado de caracteres en una variable de cadena


con caracteres de otra cadena.

Sintaxis Mid(cadena1, inicio[, longitud]) = cadena2

Mid (cadena, 7,2)=AB ---- > Resultado = Curso AB Visual Basic

Si la cadena que vamos a introducir tuviera ms caracteres, tomar solamente los primeros

Mid (cadena, 7,2)=ABCDE ---- > Resultado = Curso AB Visual Basic

Funciones Asc y Chr


Estas funciones se utilizan para obtener el nmero ASCII de un carcter, y para, sabiendo el
nmero ASCII, hallar el carcter correspondiente.

Funcin Asc

Devuelve el cdigo de carcter correspondiente a la primera letra de una cadena de


caracteres.

Sintaxis MiVariable = Asc (Cadena)

Cadena es cualquier expresin de cadena vlida. Si la cadena no contiene caracteres, ocurrir


un error en tiempo de ejecucin.

Ejemplo : Label1 = Asc (ABCD) Label1 presentar 65

Nota Hay otra funcin (AscB) que puede usarse con bytes contenidos en una cadena. En
lugar de devolver el cdigo del carcter para el primer carcter, AscB devuelve el primer byte.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 23


Funcin Chr

Devuelve el carcter asociado con el cdigo de carcter especificado.

Sintaxis Chr (CdigoCarcter)

El argumento CdigoCarcter es un nmero en el intervalo de 0 a 255, inclusive, que identifica


a un carcter.

Ejemplo Label1 = Chr (65) Label1 contendr el carcter A

Como ejemplos de nmeros de caracteres algo especiales se debe sealar el carcter 10


(avance de lnea) y el carcter 13 (Retroceso de carro). La tecla ENTER produce ambos
caracteres cada vez que se pulsa.

Otros caracteres importantes son, el Backspace (carcter 8), y el espacio (carcter 32)

Nota Se proporciona otra funcin (ChrB) para su uso con datos de byte incluidos en una
cadena. En lugar de devolver un carcter, que puede ser de uno o de dos bytes, ChrB siempre
devuelve un solo byte.

FUNCIONES CON NUMEROS


_________________________

Visual Basic puede operar con nmeros tal como lo hara cualquier persona. Conoce las 4
reglas, y puede utilizar parntesis de la misma forma que los escribimos sobre el papel.

Los operadores que utiliza para las operaciones bsicas son:

+ Suma
- Resta
* Multiplicacin
/ Divisin
\ Divisin sin decimales
Mod Resto de una divisin
^ Eleva a un exponente

Ejemplos

Resultado = 12 + 15 ----> Resultado = 27


Resultado = 15 - 12 ----> Resultado = 3
Resultado = 15 * 12 ----> Resultado = 180
Resultado = 15 / 12 ----> Resultado = 1.25
Resultado = 15 \ 12 ----> Resultado = 1
Resultado = 15 Mod 12 ----> resultado = 3
Resultado = 12 ^ 2 ----> Resultado = 144

resultado = ( ( 4 * 3 ) / 2 ) ^ 2 ----> Resultado = 36

Estos operadores se denominan Operadores aritmticos.

Existen otras operaciones que se pueden realizar con nmeros: comparaciones. Los
operadores que realizan comparaciones se denominan Operadores relacionales. El
resultado de las operaciones realizadas con estos operadores solamente admiten dos
resultados: True (Cierto) o False (Falso) Estos operadores son:

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 24


= Igual que
<> No igual que
< Menor que
<= Menor o igual que
> Mayor que
>= Igual o mayor que

Estos operadores se suelen utilizar en estructuras de programa donde se tome una decisin.

El operador = puede usarse tambin para comparar cadenas o fechas.

Operadores Lgicos

Estos operadores podemos usarlos con variables Booleanas, es decir, aquellas que solamente
pueden tomar los valores cero y uno, y con caracteres (un carcter = 1 Byte = 8 bits) realizando
la operacin correspondiente bit a bit con los 8 bits de cada carcter. Pero en este caso, los
parmetros deben introducirse en decimal. Por ejemplo, si quiere realizar la funcin And entre
el carcter 15 (00001111) y el 131 (10000011) , debe ponerlo de la forma Resultado = 15 And
132. El resultado de esta operacin ser el byte 00000011, pero como Ud. ya se habr dado
cuenta, le devolver el valor 3. En el ejercicio Cap11 puede ver un ejemplo muy explicativo

Operador Devuelve True si Devuelve False si

And A=True y B=True Cualquier otro caso

Or A=True o B=True A=False y B=False

Xor A=True y B=False A=True y B=True


A=False y B=True A=False y B=False

Eqv A=True y B=True A=True y B=False


A=False y B=False A=False y B=True

Imp A=True y B=True A=True y B=False


A=False y B=True
A=False y B=False

Not A=False A=True

Like A=True A=False

Otras Funciones con nmeros

Int , Fix Devuelven la parte entera de un nmero con decimales

Int y Fix eliminan la fraccin de un nmero y devuelven el valor entero resultante. La diferencia
entre Int y Fix es que si el nmero es negativo, Int devuelve el primer entero negativo menor o
igual a nmero, mientras que Fix devuelve el primer entero negativo mayor o igual a nmero.
Por ejemplo, Int convierte -8,4 en -9, y Fix convierte -8,4 en -8.

Abs Devuelve el valor absoluto de un nmero

Sgn Devuelve el signo de un nmero

Sqr Devuelve la raz cuadrada de un nmero

Exp Devuelve el nmero elevado al exponente

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 25


indicado

Log Devuelve el logaritmo natural de ese nmero

Trigonomtricas

Sin Devuelve el valor del seno de un ngulo


(Expresado en radianes)

Cos Devuelve el coseno de un ngulo (En radianes)

Tan Devuelve la tangente de un ngulo

Atn Devuelve un arco cuya tangente sea el nmero


(Angulo en radianes)

Funciones para el Cambio de Base de Numeracin


Funcin Hex Devuelve una cadena, es decir, un string, que representa el valor
hexadecimal de un nmero.

Sintaxis VariabledeCadena = Hex (nmero)

Si nmero no es un nmero entero, se redondea al nmero entero ms cercano antes de ser


evaluado.

Mediante esta funcin se puede convertir un nmero de hasta ocho caracteres hexadecimales.

Se pueden representar nmeros hexadecimales directamente, anteponiendo &H. Por ejemplo,


&H10 representa al decimal 16 en la notacin hexadecimal.

Funcin Oct Devuelve la cadena (String) que representa el valor octal de un


nmero.

Sintaxis VariabledeCadena = Oct (nmero)

Si nmero no es entero, se redondea al nmero entero ms cercano antes de ser evaluado.

Puede realizarse la conversin hasta el valor de 11 caracteres octales.

Se pueden representar nmeros octales directamente, anteponiendo &O a nmeros en el


intervalo apropiado. Por ejemplo, &O10 representa a 8 en base diez en la notacin octal.

Recuerde que estas dos funciones devuelven una Cadena de caracteres, no un nmero.
El resultado deber tratarlo como una cadena de caracteres.

Funciones Cxxx para conversin del tipo de datos.


Son un tipo de funciones que convierten un dato o expresin a un tipo de datos determinado

Funcin Cbool Convierte una expresin al tipo de datos Boolean.

Sintaxis VariableBooleana = Cbool (expresin)


LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 26
El argumento expresin es cualquier expresin numrica o expresin de cadena vlida.

Si expresin es cero, se devuelve False; de lo contrario, se devuelve True Si la expresin no se


puede interpretar como un valor numrico, ocurrir un error de tiempo de ejecucin.

Funcin CByte Convierte una expresin al tipo de datos Byte.

Funcin CCur Convierte una expresin al tipo de datos Currency. (Moneda)

Funcin CLng Convierte un dato a un tipo Long.

CLng se diferencia de las funciones Fix e Int en que trunca, en vez de redondear, la parte
fraccionaria de un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CLng
siempre la redondea al nmero par ms cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.

Funcin CInt Convierte un dato a un tipo Integer.

CInt se diferencia de las funciones Fix y Int en que trunca, en vez de redondear, la parte
fraccionaria de un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CInt
siempre la redondea al nmero par ms cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.

Funcin CDbl Convierte una expresin al tipo de datos Double.

Funcin CSng Convierte una expresin a un tipo de datos Single.

Debe usar las funcin CByte, CCur, CLng, CInt en lugar de Val para proporcionar
conversiones que reconozcan las variantes internacionales, cuando se convierte de cualquier
otro tipo de datos. Por ejemplo, los diferentes separadores decimales se reconocen
adecuadamente, dependiendo de la configuracin de la informacin local de su PC.
Si la expresin a convertir queda fuera del intervalo aceptable para el tipo de datos a obtener,
ocurrir un error.

Funcin CStr Convierte una expresin a un tipo de datos String.

Debe usar la funcin CStr en lugar de Str para proporcionar conversiones que reconozcan las
variantes internacionales, cuando se convierte de cualquier otro tipo de datos a String. Por
ejemplo, los diferentes separadores decimales se reconocen adecuadamente, dependiendo de
la configuracin de la informacin local de su sistema.

Dependiendo del tipo de dato que se va a convertir, CStr devuelve:

Boolean String conteniendo True o False.


Date String conteniendo una fecha en el formato de fecha corta de su sistema.
Null Un error de tiempo de ejecucin.
Empty String de longitud cero ("").
Error String conteniendo la palabra Error seguida del nmero de error.
Numrico String conteniendo el nmero.

Funcin Cvar Convierte una expresin a un tipo de datos Variant.

Funcin Cdate Convierte una expresin al tipo de datos Date. (Fecha / Hora)

Nota curiosa y a tener muy en cuenta

En algunas ocasiones (no siempre, misterios del VB) cuando hacemos una operacin entre

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 27


nmeros, cuyas variables que los contienen se han declarado de distinto tipo, puede ocurrir
que d un error. Por ejemplo, queremos obtener una suma que debe ser un Long, a partir de
varios nmeros tipo Byte. Declaramos las variables de la siguiente forma:

Dim Suma as Long, I1 As Byte, I2 As Byte, I3 As Byte, I3 As Byte, I5 As Byte

Suma = I1 + I2 + I3 + I4 + i5

El resultado de esta operacin es que da un error, pues no entiende que sumando varios Byte
(nmeros comprendidos entre 0 y 255) puedan dar un nmero de otro tipo. Dar seguramente
el error 6, Overflow. Para que esto no suceda, haremos el truco de convertir el primero de los
nmeros que forman parte en la operacin matemtica a un Long, y de esta forma, VB ya se
da cuenta que el resultado de esa operacin es un Long:

Suma = CLng(I1) + I2 + I3 + I4 + I5

Tenga en cuenta esa observacin inicial que NO ocurre en todas las ocasiones. (Y me parece
que era un fallo de los muchos que tena VB5)

Otras Funciones
Una funcin curiosa

Timer Tiempo acumulado Devuelve el tiempo (en segundos) que ha


pasado desde las 12 de la noche.

Generacin de nmeros aleatorios

Randomize (Numero) Inicia el generador aleatorio tomando como dato de partida


el Numero. Devuelve el resultado en una variable llamada Rnd.

NOTA MUY IMPORTANTE para versiones de VB anteriores a la 6.- Los nmeros aleatorios
generados de esta forma son siempre iguales, eso s, dependiendo del nmero que se le
introduzca como parmetro. Esta generacin de nmeros no produce nmeros aleatorios pues
como se dijo, dependen del numero que se meta como parmetro, y si este se repite, se repite
la sucesin de nmeros que nos crea el generador aleatorio. (Afortunadamente lo han
corregido en la versin 6)

La forma de obtener nmeros realmente aleatorios es introducir como parmetro un nmero


que sea variable con el tiempo. Ese nmero no puede ser otro que el nmero timer visto antes.
Y siempre con la precaucin de que medie mas de un segundo entre dos instrucciones
Randomize. La funcin toma entonces la forma:

Randomize Timer

La funcin Randomize devuelve una variable Rnd con un nmero comprendido entre 0
y 1 (Nunca ser 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una
sucesin de nmeros aleatorios. No es necesario ejecutar la instruccin Randomize Timer
cada vez que se quiera obtener un dato de la variable Rnd.

Un ejemplo. Generador de nmeros para la Lotera Primitiva

Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botn de
comando de nombre Command1. Cuando hagamos click sobre el botn de comando deber
generar un nmero comprendido entre el 1 y el 49. En el procedimiento click de Command1
pondremos el siguiente cdigo:

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 28


Private Sub Command1.click

Randomize Timer
A = Rnd * 100
A = CInt(A)
Do While A > 49
A = A - 49
Loop
Do While A < 1
A = A + 49
Loop
Label1.caption = A
End Sub

Realice este pequeo programa, con la instruccin Randomize Timer y sin ella.

Funciones con fechas.


Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la informacin relativa a
la fecha y la hora. Dispone para ello de una declaracin de variable: Date. Una variable
declarada como date puede contener una fecha, una fecha y una hora o una hora solamente.

Date Devuelve la fecha de hoy. Esta fecha la toma del reloj del ordenador.

Time Devuelve la hora actual.

Now Devuelve la fecha y hora actual.

WeekDay Devuelve el da de la semana (En nmero, 1=Domingo, 2=Lunes,...)

Day Obtiene el da, a partir de una fecha

Month Obtiene el mes a partir de una fecha.

Year Obtiene el ao a partir de una fecha.

Hour Obtiene la hora a partir de una hora

Minute Obtiene el minuto a partir de una hora.

Second Obtiene el segundo a partir de una hora.

DateAdd Aade un intervalo de tiempo a una fecha

DateDiff Obtiene el intervalo de tiempo entre dos fechas

DatePart Devuelve una parte de una fecha (semana, trimestre, etc.)

DateSerial Compone una fecha a partir de parmetros relativos

TimeSerial Compone una hora a partir de parmetros relativos.

DateValue Devuelve una fecha a partir de un dato que se le parezca y VB


pueda obtener de l una fecha vlida

Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Por

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 29


ejemplo, para obtener el da de hoy solamente:

Da = Day (Now) Da ser un nmero

El da de la semana lo obtendramos

Diasemana = WeekDay (Now) Diasemana ser un nmero

DateValue, una instruccin que le sacar mucho provecho

Fecha = DateValue (12-07-96)


Fecha = DateValue (12 07 96) Fecha =12/07/96

La funcin DatePart merece estudio aparte. Con esta funcin podemos averiguar el mes,
trimestre, semana, da del ao, etc.

La sintaxis de esta funcin es :

VariableNumrica = DatePart (Intervalo, fecha[, primerdasemana[, primerasemanaao]])

Valor para Intervalo Obtendremos el


q Trimestre
m Mes
y Da del ao
d Da
w Da de la semana
ww Semana
h Hora
n Minuto
s Segundo

El parmetro Primerdasemana puede ser un nmero o una constante (veremos a lo largo de


todo el curso, que VB usa constantes que son palabras reservadas por VB que generalmente
comienzan por vb) que indica que da es para nosotros el primero de la semana

Constante Nmero Primer da de la semana


vbSunday 1 Domingo (predeterminado)
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Mircoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sbado

Para el parmetro primerasemanaao podemos emplear uno de los siguientes nmeros o


constantes:

Constante Valor Descripcin

vbFirstJan1 1 Empieza con la semana en la que se encuentra el 1 de enero


(predeterminado).
vbFirstFourDays 2 Empieza con la primera semana que tenga al menos
cuatro
das en el ao nuevo. (Standard ISO 8086)
vbFirstFullWeek3 Empieza con la primera semana contenida completamente en
el ao nuevo.

Por ejemplo, y tomando como referencia para todos los ejemplos el da 22 de Septiembre de

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 30


1998, fecha en la que se ha escrito este texto, (Now = 22/09/1998), tenemos :

Variable = DatePart (m, Now) Variable = 10


variable = DatePart ("q", Now) Variable = 3
variable = DatePart ("d", Now) Variable = 22
variable = DatePart ("y", Now) Variable = 265
variable = DatePart ("w", Now) Variable = 3 (Martes, pues el primer da de la semana
era el domingo - Predeterminado)
variable = DatePart ("w", Now, vbMonday) Variable = 2 (Primer da semana = lunes)
variable = DatePart ("ww", Now, vbMonday, vbFirstFourDays)
Variable = 39, que indica el nmero de la semana dentro del ao.

Cuidado con como se escriben las fechas. Una posibilidad es la usada en los ejemplos, pero
solamente vale para el da de hoy. Puede expresar la fecha metindola entre dos signos #,
pero en ese caso debe estar expresada en el formato mm/dd/yy (mes/da/ao). Ejemplo :

variable = DatePart("ww", #9/22/98#, vbMonday, vbFirstFourDays)

Pero lo mas fcil para el formato de fecha usado en Espaa es meter la fecha entre comillas
dobles, y usar el formato especificado para el pas :

variable = DatePart("ww", "22/9/98", vbMonday, vbFirstFourDays)

Con las comillas dobles puede incluso no poner el ao. En este caso le pone por defecto, el
ao en curso.

variable = DatePart("ww", "22/9", vbMonday, vbFirstFourDays)

Estas tres formas de expresar la fecha funcionan perfectamente, al igual que cuando lo
hacamos con Now, y el resultado sigue siendo 39.

Nota para recordar de las variables tipo Date

(No se extrae que esta explicacin la encuentre solamente en esta Gua del Estudiante)

Visual Basic trata las fechas como nmeros. Y precisamente como un nmero Double. Emplea
por lo tanto 8 bytes para representar una fecha. Por ejemplo, al da 12 de Julio de 1999, (Fecha
en la que el autor de este libro alcanz la respetable edad de #9 aos) le corresponde el valor
de 36563. Ese es el nmero de das transcurridos desde el origen de tiempos tomado por VB
(Y por muchas otras aplicaciones de Microsoft y de otras marcas) hasta ese fatdico da.
Cual es ese origen del tiempo? El 30 diciembre 1899. Que porqu ese da?. No lo s. Pero
es fcil intuir que motivos prcticos para que cualquier fecha del siglo XX tuviese un nmero
positivo. Porque las anteriores a ese da las trata como nmeros negativos. Por ejemplo, el da
12 de Octubre de 1492, VB lo trata como el da nmero - 148.732. Ese numero puede
conocerlo utilizando la funcin CDbl sobre una variable tipo Date. Puede verlo en el ejercicio
Cap12 del disco.

Una hora tambin es una variable tipo Date. Y una composicin Da / Hora tambin. Que
como trata los minutos dentro de una variable Date? Pues como decimales de ese nmero
Double. Por ejemplo, la hora 12:00:00 del da 12 de julio de 1999 es para VB

36.563,5

Es decir, la parte decimal representa la fraccin de da transcurrido desde el comienzo del da


(medianoche) hasta la hora en cuestin. No debemos confundir esta fraccin del da (0,5 para
las 12:00:00) con el valor de la funcin Timer para ese instante (45.000)) que representa el
nmero de segundos transcurridos desde la 12 de la noche de ese da.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 31
Cuando se tratan variables tipo Date, VB que es un lenguaje inteligente, interpreta como tipo
de datos Date determinados datos que no lo son. Por ejemplo, 12 Julio 1999 es tal y como
puede verse, una sucesin de caracteres. Si ejecutamos el cdigo:

Dim Pepe as Date


Pepe = 12 Julio 1999
A partir de ahora, Pepe contendr el valor 36.563
Para ver ese valor basta con hacer
Label1.Caption = CDbl (Pepe)

Al estar Pepe declarada como variable tipo Date, VB busca todas las posibilidades de extraer
una fecha (o una hora) del dato que le estamos metiendo. Otra cosa ocurrira si la
declarsemos como String o Variant. En cualquiera de estos casos, Pepe contendra el literal
introducido, es decir, 12 Julio 1999

De lo anterior se desprende una cosa, dado que la fecha la guarda como un nmero, no
importa en que formato le introduzcamos una fecha. Si ponemos que Fecha1 = 12/7/99 es
idntico a poner fecha1 = 12/07/1999 Fecha1 = 1999-07-12. Eso s, debe reconocer el
formato, y luego, el dato, lo tratar como un nmero Double. Lo volveremos a ver cuando
estudiemos las bases de datos. Access trata las fechas de idntica forma.

Funcin FORMAT

Esta funcin permite presentar cadenas numricas o fechas de una determinada forma.
Permite establecer el Formato de esa cadena.

Si recurre a la ayuda de VB acerca de esta funcin se va a enterar muy poco de lo que puede
dar de s. La sintaxis que presenta es :

Format(expresin[, formato[, primerdadesemana[, primerasemanadelao]]])

Lo mejor que puede hacer con esta definicin de la sintaxis de Format es olvidarla. No le aclara
mucho lo que se puede hacer con Format. La funcin Format se usa para poner una fecha en
un determinado formato. Con la expresin :

FechadeHoy = Format (Now, yyyy-mm-dd)

la variable FechadeHoy tendr el valor 1998-05-21, que se refiere al da 21 de mayo de 1998,


segn el formato recomendado por la norma ISO-8601 para la presentacin de fechas. Si
hubisemos puesto la expresin FechadeHoy = Format (Now, dd/mm/yy) , la variable
FechadeHoy contendra el valor 21/05/98 referido al da citado.

Las posibilidades de Format llegan tambin al campo de las cadenas numricas. Por ejemplo
la cifra 123456 se transformar en las siguientes expresiones, segn como empleemos la
funcin Format

Variable = Format(123456, "Currency") Variable = 123.456 Pts


Variable = Format(123456, "Standard") Variable = 123.456,00

Veamos ahora con un poco mas de conocimiento la sintaxis de Format

Variable = Format (expresin[, formato[, firstdayofweek[, firstweekofyear]]])

No se complique la vida con el tema del primer da de la semana ni la primera semana del
ao. No lo usar con frecuencia. Centrmonos mas en el parmetro Formato. Puede tomar
muchos valores. Veamos los principales. Primero para nmeros
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 32
Observe que usamos la expresin Variable = Format (1234567,Formato) para todos los
ejemplos de nmeros.

Para poner los nmeros separados por millares :

Variable = Format(1234567, "##,###,###") Variable = 1.234.567

(Cada carcter # indica que ah va un nmero. El separador debe ser una coma, no un punto,
aunque esto depende del idioma que est usando)

Puede poner una de estas expresiones, eso si, siempre entre comillas dobles :

General Number Muestra el nmero tal como lo tecle


Currency En formato de la moneda de su sistema operativo
Fixed Sin separador de millar y dos decimales (1234567,00)
Standard Con separador de millares y dos decimales (1.234.567,00)
Percent Multiplica el nmero por cien y lo presenta cono
porcentaje(123456700,00%)
Scientific Usa notacin cientfica (1,23E+06)
.

Para fechas (Observe que usamos el ejemplo Format(Now, Formato) siendo Now la fecha
y hora actual (21/07/98 a las 22:16:00 )

General Date 21/07/98 22:16:00


Long Date martes 21 de julio de 1998
Medium Date 21-jul-98
Short Date 21/07/98
yyyy-mm-dd 1998-05-21
yy-mm-dd 98-07-21
Long Time 22:19:53
Medium Time 10:20 PM
Short Time 22:20
hh :mm :ss 22 :21 :29
hh :mm 22 :21

RECOMENDACIN ISO 8601

Va como cultura general. Esta recomendacin dice que el formato de fecha debe ponerse de la
forma yyyy-mm-dd (p.e. 1998-10-05 para referirse al 5 de Octubre de 1998). Para este
formato, pondremos :

FechaISO8601 = Format (Now, yyyy-mm-dd)

Tenga presente esta recomendacin. La Administracin Espaola est obligada a exigir su


cumplimiento en todas aquellas aplicaciones que realicen intercambios de fecha y hora.

Format dispone de mas opciones. Sera muy largo explicarlas aqu. Para mas informacin, en
la WEB de Microsoft (www.microsoft.com) puede encontrar mas formatos posibles.

Pero vamos a volver con el tema de las variables tipo Date.

Cuando realizamos el Format sobre una fecha, esta fecha puede ser un literal (un string), o una
variable tipo fecha

Si en Text1 tenemos la expresin 12 Julio 1999, y queremos convertir esa fecha al formato
ISO 8601, podemos hacerlo de cualquiera de estas dos formas:

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 33


Private Sub LFormat1_Click()
Dim Pepe As Date
Pepe = Text1.Text
LFormat1 = Format(Pepe, "yyyy-mm-dd")
End Sub

Private Sub LFormato2_Click()


LFormato2 = Format(Text1.Text, "yyyy-mm-dd")
End Sub

La funcin Format es suficientemente inteligente para darse cuenta que con el formato yyyy-
mm-dd le estamos pidiendo una fecha. Si le metemos una fecha no hay problema (caso de
meterle Pepe, variable declarada como Date). Pero si le metemos una cadena de caracteres
(caso de Text1.Text) intenta obtener de esa cadena una fecha vlida. Si lo consigue lo
presenta. Si no lo consigue, dar un error.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 34


MATRICES
__________

Cuando utilizamos varias variables que tienen un significado similar para nosotros, pero que
son distintas (Por ejemplo, el nombre de los alumnos de una clase) podemos utilizar una
matriz. Esta matriz est formada por tantos elementos como alumnos tenga la clase. El nombre
asociado a cada uno de los elementos de la matriz puede ser:

Alumno (n) Donde n es el nmero por orden de lista de ese alumno.

Las matrices normalmente comienzan a numerar por el nmero 0. Este comienzo puede no ser
el mas apropiado para la variable que estamos planteando, pues ningn alumno tiene el
nmero de orden 0. Para hacer que una matriz comience a numerar por el 1 se debe definir
mediante la instruccin:
Option Base 1

que debe colocarse al comienzo del mdulo o formulario donde declaremos la matriz.

Para declarar la matriz se hace como con todas las variables, especificando entre parntesis el
nmero de elementos que componen la matriz:

Dim Alumno (25) as String

Hemos declarado que la variable alumno es una cadena, y que hay 25 elementos en esa
matriz.

Una matriz tambin se puede declarar de la siguiente forma :

Dim Alumno(1 To 25) as String

Donde le decimos que la variable Alumno tiene 25 elementos, que el primero tiene el ndice 1 y
el ltimo tiene el ndice 25.

Pero imaginemos que queremos meter en la misma matriz el nombre, primer apellido y
segundo apellido del alumno. Necesitaremos declarar una matriz de 25 por 3. Como todos los
elementos sern cadenas de caracteres, podemos declararla de la siguiente forma:

Dim Alumno (1 To 25, 1 To 3) As String

De esta forma, el primer apellido del alumno que ocupa el puesto nmero 15 de la clase, ser
el elemento:

Alumno (15, 2)

Podemos definir matrices de dimensin superior a dos. Podemos llegar a un mximo de 60


dimensiones. Una matriz de 5 dimensiones se declarara:

Dim Variable ( 1 To N, 1 To M, 1 To P, 1 To Q, 1 To R)

entendiendo que hay N, M, P, Q y R elementos en cada una de las dimensiones


respectivamente.

Una variable ya declarada como una matriz puede redimensionarse a lo largo del programa
mediante la instruccin ReDim

ReDim Alumno (1To 25)

Mediante esta instruccin, estamos ReDimensionando una matriz ya declarada. No se puede

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 35


redimensionar una matriz inexistente.
Mediante la declaracin 1 To 25 le estamos diciendo que el primer elemento de la matriz es el
1, independientemente de lo que hayamos puesto en OPTION BASE. Si se redimensiona
simplemente con el nmero de elementos :

ReDim (25)

le estamos diciendo que tiene 25 elementos, pero que el primero sea el 0 el 1 depende de
haber puesto OPTION BASE 0 u OPTION BASE 1.

Una matriz puede redimensionarse cuantas veces se quiera a lo largo de la aplicacin, pero
esa redimensin no puede afectar al nmero de dimensiones de la matriz. Si redimensionamos
la matriz perder la informacin existente. Para evitar perder la informacin presente en la
matriz, debe utilizar la sentencia ReDim Preserve.

Si usa la palabra clave Preserve en matrices de dimensin superior a 1, va a encontrarse con


comportamientos no esperados. Como podr ver en la Ayuda de VB, usando ReDim Preserve
slo puede cambiar el tamao de la ltima dimensin de matriz y no puede modificar en ningn
momento el nmero de dimensiones. NO es cierto del todo. S lo podr hacer una sola vez.

Respecto a cambiar el nmero de dimensiones, si ha declarado la matriz con unas


dimensiones determinadas, ya no podr cambiar las dimensiones ni con ReDim ni con ReDim
Preserve. Le saldr un error que dice que las dimensiones de la matriz ya han sido declaradas.
Pero si ha declarado la matriz sin dimensiones :

Dim MiMatriz()

puede cambiar las dimensiones ReDim MiMatriz (1 To 5, 1 To 9)


y volver a cambiarlas ReDim MiMatriz (1 To 8, 1 To 15, 1 To 6)

Observe que no solamente la hemos cambiado dos veces de dimensiones (la primera a 2 y la
segunda a 3), sino que tambin hemos cambiado el nmero de elementos en cada dimensin.

Si hubisemos utilizado ReDim Preserve solamente podramos haber usado la primera de las
dos lneas anteriores :

ReDim Preserve MiMatriz (1 To 5, 1 To 9)

pero ya no podramos volver a cambiar el nmero de dimensiones con la segunda lnea. Nos
dara un error.

Con ReDim podemos cambiar el nmero de elementos de cada dimensin cuantas veces
queramos. Por ejemplo, podemos redimensionar MiMatriz de las siguiente forma :

ReDim MiMatriz (1 To 5, 1 To 9)
ReDim MiMatriz (1 To 15, 1 To 20)
ReDim MiMatriz (1 To 25, 1 To 30)
...........................

Si hubisemos empleado ReDim Preserve, podramos cambiar los elementos de todas las
dimensiones de la matriz una vez :

ReDim Preserve (1 To 5, 1 To 9)

a partir de ahora, solamente podemos cambiar los elementos de la ltima dimensin :

ReDim Preserve (1 To 5, 1 To 20)


ReDim Preserve (1 To 5, 1 To 30)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 36


es decir, no podremos hacer esto :

ReDim Preserve (1 To 10, 1 To 30) donde se seala en negrita el error.

Esto no causa ningn error en una matriz de una dimensin, ya que si la matriz tiene slo una
dimensin, puede cambiar el tamao de esa dimensin porque es la nica y la ltima.

Cuando a lo largo de la aplicacin se va redimensionando una matriz, podemos llegar la


circunstancia de que, en un momento determinado, no sepamos las dimensiones de esa
matriz.

Para conocer el ndice mximo y mnimo de una matriz se usan las funciones UBound y
LBound.

UBound devuelve el mayor subndice disponible para la dimensin indicada de una matriz.

Sintaxis UBound(nombredelamatriz[, dimensin])

LBound devuelve el mayor subndice disponible para la dimensin indicada de una matriz.

Sintaxis LBound(nombredelamatriz[, dimensin])

Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de la


aplicacin se ejecut la siguiente instruccin vlida :

ReDim Mimatriz (1 To 100, 0 To 3, 5 To 20)

En otro momento queremos tener el control de los ndices de esa matriz, y queremos averiguar
el ndice menor y mayor de cada una de sus dimensiones :
(IID1= Indice Inferior Dimensin 1, ISD 1 = Indice Superior Dimensin 1, etc. )

IID 1= LBound (Mimatriz, 1) IID1 = 1


ISD1 = UBound (Mimatriz, 1) ISD1 = 100
IID 2= LBound (Mimatriz, 2) IID1 = 0
ISD2 = UBound (Mimatriz, 2) ISD1 = 3
IID 1= LBound (Mimatriz, 3) IID1 = 5
ISD1 = UBound (Mimatriz, 3) ISD1 = 20

Funcin Split
Una vez visto lo que es una matriz, vamos a ver una funcin interesante para el tratamiento de
cadenas de caracteres. La funcin Split

Descripcin

Esta funcin toma una cadena de caracteres compuesta varias subcadenas, separadas entre
ellas mediante un separador, y devuelve una matriz de una dimensin, que contiene esas
subcadenas.

Sintaxis Split (expresin[, delimitador[, contar[, comparar]]])

Donde:

Expresion es la variable que contiene la cadena de caracteres de entrada

Delimitador. Contiene el carcter o caracteres que se usan de delimitador entre


subcadenas
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 37
Contar es un nmero donde indicamos el nmero de subcadenas que queremos
extraer. Si no se pone nada, extrae todas las cadenas. Si se pone un valor, extrae el
nmero de cadenas que le indiquemos. En este caso, en la ltima cadena, mete el
resto de subcadenas que quedaban sin meter.

Comparar es un valor numrico que nos da cuatro opciones de comparacin para


comparar las subcadenas. Este parmetro es solamente para alumnos avanzados

Ejemplo.

En el siguiente ejemplo veremos como separar distintos datos que estn dentro de un TextBox
(Text1) separados entre ellos por una coma.

Private Sub Command1_Click()


Dim MiVariable() As String Declaramos una matriz (MiVariable) del tipo String
Dim I As Integer Declaramos una variable auxiliar como numrica
MiVariable = Split(Text1.Text, ",") Ejecutamos la funcin Split
For I = 0 To UBound(MiVariable) Ejecutamos un bucle para introducir las subcadenas
List1.AddItem MiVariable(I) en un ListBox
Next I
End Sub

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 38


VISUAL BASIC

Tras esta pequea introduccin al lenguaje Basic ya estamos en disposicin de encender el


ordenador y comenzar a trabajar con Visual - Basic. Se supone que su PC tiene instalado el
programa Visual Basic 6.0

Entre en el programa VB. Le aparecer en pantalla algo similar a esto : (Para VB Vers. 6)

Fig. 1.2 Aspecto del entorno de desarrollo de aplicaciones VB

Este es el comienzo del VB . Observe que en esta pantalla existen varias cosas. En la parte
superior , la barra de ttulo del programa Visual Basic, con el texto :

Proyect1 - Microsoft Visual Basic (Diseo)

Por debajo de esta barra de Ttulo del VB, encontramos la barra de men de VB, con las
leyendas :

Archivo Edicin Ver Proyecto Formato Depuracin Ejecutar Consulta Diagrama


Herramientas Complementos Ventana Ayuda

Por debajo de esta barra de men tenemos la barra de herramientas, donde podr ver varios
iconos, que cada uno representa un determinada operacin que Vd. puede realizar. Estas
operaciones est todas en la lnea de men, y puede acceder a ellas abriendo los mens
desplegables que existen en cada una de las palabras Archivo Edicin Ver ...... de esta lnea
de men. El hecho de colocar las operaciones mas usuales en un icono en la barra de
herramientas se hace para mayor comodidad del usuario.

A la izquierda o derecha de la pantalla tiene una caja rectangular con varias columnas de
iconos. Esa caja es la Caja de Herramientas (No la confunda con la barra de herramientas de
la parte superior)

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 39


Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de herramientas
real que pueda tener un mecnico para realizar su trabajo. En ella estn los iconos que
representan a los controles con los que Vd. va a desarrollar su aplicacin VB. No estn todos
los que pueden estar, al igual que en una caja de herramientas de un mecnico no estn todas
las herramientas que puede usar. Estn solamente las mas usuales. Si necesita alguna mas,
puede cogerla de otra parte (barra de Men, Proyecto | Componentes) y agregarlos a esa caja
de herramientas, al igual que lo hara un mecnico con una herramienta especial, que la
metera en su caja slo cuando va a realizar un trabajo determinado para el que la necesite.

Posiblemente esta caja de herramientas no le aparezca tal y como la ve en esta figura. Eso
depende de la versin y la personalizacin. Para aadir un nuevo control haga click en
Proyecto | Componentes y le aparecer una caja con todos los controles existentes. Puede
seleccionar nuevos controles para aadir a la caja de herramientas, marcando la casilla que
est a la izquierda del nombre del control que quiere introducir. Una vez seleccionados todos
los nuevos controles, haga click en APLICAR . Salga haciendo Click en ACEPTAR, y podr
observar que esos nuevos controles ya se le han aadido a la caja de herramientas. Esos
controles le aparecern cada vez que cargue el proyecto actual. No es prudente meter muchos
controles en la caja. Ponga solamente los que necesite normalmente en sus aplicaciones.
Ocupar menos memoria y tardar menos tiempo en cargar el programa VB. Adems, cuando
realice una aplicacin y la distribuya una vez compilada, Visual Basic entregar en los
disquetes de distribucin las DLLs u OCXs correspondientes a todos los controles
personalizados que Vd. tenga en la caja de herramientas, los necesite el programa o no los
necesite. Esto le va a suponer que est cargando subprogramas intiles en el ordenador
destino de su aplicacin. A la hora de compilar el programa (Crear archivo .EXE) quite todos
los controles personalizados que no necesite su aplicacin. (Slo los controles personalizados.
Los controles comunes - CommandButton, Label, TextBox, etc.-, no se pueden eliminar de la
caja de herramientas)

Para quitar controles de su caja de herramientas, debe proceder de forma anloga, a lo que
hizo para meterlos en la caja de herramientas, pero al revs. No se preocupe a la hora de
quitarlos. Si est utilizando un determinado control, VB no le dejar quitarlo.

En el centro, y ocupando casi toda la pantalla, tenemos el Formulario. Este Formulario es la


interface grfica de su aplicacin, sobre el que podr aadir los controles que necesite. Lo
veremos mas adelante con todo detalle.

Puede tener dos ventanas ms adosadas a la caja de herramientas, una denominada Ventana
de Propiedades, donde puede ver las propiedades del formulario o de cualquier control que
tenga dentro del proyecto, y otra, denominada Ventana de Proyecto, donde puede ver todos
los formularios existentes. Existen otras ventanas, por ejemplo la Ventana de Depuracin.
Por cada formulario y cada control que introduzca en el proyecto, le aparecer otra ventana,
denominada Ventana de cdigo.

No se extrae de que esta presentacin grfica del Visual Basic coincida con otros sistemas de
desarrollo (Delphi, p.e.). La lgica de desarrollo de una aplicacin en Windows ha llevado a
varios fabricantes de software a utilizar un entorno grfico similar (diramos idntico). A Visual
basic le queda el orgullo de ser el primero en utilizarlo. (Y el mejor!)

Con lo descrito anteriormente ya tenemos, al menos, fijado el argot con el que expresarnos
para comenzar a estudiar el VISUAL BASIC. Veamos con un poco mas detalle la Ventana de
Cdigo.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 40


Fig. 1.3 Ventana de cdigo

Esta figura le muestra un Formulario con su ventana de cdigo. Cada objeto grfico de VB
tiene su propia ventana de cdigo. As, si en este formulario hubisemos introducido un Label y
dos CommandButton, todos ellos tendran su propia ventana de cdigo. La ventana de cdigo
la podemos ver haciendo doble click sobre cualquier objeto de nuestro proyecto. En este caso
hemos hecho doble click sobre el nico objeto que tenamos : el formulario.

Observe las dos cajas de la parte superior, uno con la inscripcin Objeto : que en el momento
que le sacamos la foto tena Form, y el otro con la inscripcin Proc : (procedimiento), que en el
momento de la foto tena Load. A estas cajas les denominamos Lista de Objetos y Lista de
Procedimientos respectivamente.

Haciendo click sobre la flecha de cada lista, se despliega un men, en la lista de objetos se
desplegar una lista con los nombres de cada objeto existente en ese momento dentro del
formulario. Haciendo click sobre uno de los nombres, nos presentar la ventana de cdigo de
ese objeto. Todos los objetos grficos (controles) existentes dentro de un formulario y el propio
formulario aparecern en la misma lista de objetos.

Haciendo click sobre la flecha de la lista de procedimientos, se despliega la lista con todos los
procedimientos posibles para ese objeto. Siempre saldr uno. Si tenemos escrito cdigo en
uno de los procedimientos, saldr por defecto ese procedimiento para el cual hemos escrito el
cdigo. Si no hay cdigo en ninguno de los procedimientos, saldr el que tenga por defecto
cada objeto.

Solamente nos queda por decir, para cerrar este captulo, que es un procedimiento.

Para ello vamos a explicar lo que es un evento. Un Evento es algo que le puede ocurrir a un
objeto. En una interface grfica, lo que le puede ocurrir a un objeto es que se le haga click,
doble click, que se pase el cursor del ratn por encima, etc. Este es el Evento. El
Procedimiento es la respuesta por parte de ese objeto, al evento que le est sucediendo.

Esa respuesta, esa forma de Proceder del objeto al evento que le est sucediendo, debemos
programarla segn nuestras necesidades, es decir, debemos escribir el cdigo que necesite
nuestra aplicacin como respuesta al evento que acaba de ocurrir. Posiblemente, no queramos
ninguna respuesta a muchos de los eventos que pueden acaecer a un objeto. Cada objeto
tiene muchos eventos y solamente queremos aprovechar los que nos interesan. Para que un
evento no produzca ningn efecto, basta con dejar sin cdigo el procedimiento correspondiente

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 41


a ese evento. En los eventos que queramos que realice alguna operacin, le escribiremos en
su procedimiento el cdigo necesario para que esa operacin se realice. Sin darnos cuenta,
hemos comenzado a escribir el cdigo de la aplicacin.

Observar que el primer elemento del men desplegable de la lista de objetos se denomina
General. Este no es en realidad ningn objeto, sino un apartado existente en cada formulario,
que, al desplegar su lista de procedimientos tiene la seccin de declaraciones, donde
debemos declarar las variables que queremos que afecten a todo el formulario y sus controles,
y tendr adems, los nombres de todos los procedimientos que introduzcamos (vase un
poco mas adelante). En este men desplegable de la lista de procedimientos del General ver
con frecuencia cosas que Vd. no puso all. Cosas tales como Command1_click, y en la
ventana un determinado cdigo. Esto ocurre cuando se borra algn control que tena escrito
cdigo en alguno de sus procedimientos. Visual Basic sabe lo mucho que cuesta escribir el
cdigo asociado a un control. Si borramos un control de nuestro formulario accidentalmente,
despus de haber introducido todo el cdigo asociado a l, Visual Basic nos sorprende con que
ese cdigo no lo tira inmediatamente, sino que lo reserva como un procedimiento en ese
apartado General del formulario. Si en realidad queramos borrar el control y todo su cdigo,
debemos quitarlo de ese apartado General de nuestro formulario, pues en realidad, si no lo
queremos, no har otra cosa que estorbar. Para quitarlo basta con borrar todo el cdigo que
aparece en la ventana de cdigo cuando hacemos click sobre el nombre del control eliminado.
Deberemos borrar todo el cdigo, incluida la cabecera donde figura el nombre del control
eliminado, y la parte final, que siempre termina con End Sub.

El primer estorbo lo observar si crea otro control con el mismo nombre, cosa fcil ya que VB
da un nombre por defecto a cada control (Command1, Command2....). El cdigo asociado al
control eliminado pasar automticamente al nuevo control con el mismo nombre.

Una aplicacin puede tener todo su cdigo escrito en los sucesivos procedimientos del
formulario y de los controles que tenga ese formulario.
Puede ocurrir que un determinado evento no est entre los posibles eventos de los controles
de nuestra aplicacin. Piense por ejemplo, el evento de que la variable A sea igual a la variable
B. No existe en ninguno de los controles ese procedimiento. No se preocupe, puede crear un
procedimiento que se ejecute cuando su programa lo decida. Podemos aadir cuantos
procedimientos queramos. Estos procedimientos se aaden al formulario, y debern definirse
por un nombre que Vd. debe elegir. Para que se ejecuten las instrucciones (cdigo) incluido en
ese procedimiento, basta simplemente con nombrarlo por ese nombre.
Para insertar un procedimiento debe ir a la barra de men, hacer click sobre Herramientas, y
en el men que le desplegar, volver a hacer click sobre Agregar Procedimiento. VB le
presentar un cuadro donde le pedir el nombre, si quiere que sea un procedimiento, una
funcin o una propiedad. A lo largo del curso ir viendo que es cada cosa.

Escribiendo el cdigo en los sucesivos procedimientos, bien en los propios de cada objeto, bien
en los procedimientos que vayamos creando, es posible completar la aplicacin. Pero en una
aplicacin larga esta forma de escribir el cdigo no sera la mas adecuada. Es mas,
posiblemente sera demasiado engorroso escribirla de esta forma, y muy probablemente
deberamos escribir el mismo cdigo para varios procedimientos, lo que alargara intilmente el
programa y el tiempo de desarrollo.

Para disponer de un sitio donde escribir parte (o la mayor parte) de su programa, puede
introducir uno o varios mdulos. Expliquemos lo que es un mdulo.

Un Mdulo es una parte del programa donde solamente puede escribir cdigo. Es igual que un
formulario, sin interface grfica. Un profesor de Visual Basic lo expresaba diciendo que un
Mdulo es un Formulario sin cara. En un mdulo pueden existir procedimientos al igual que en
los formularios, pero como un mdulo no tiene interface grfica, esos procedimientos debe
introducirlos el programador tal y como explicamos un poco mas atrs. El mdulo tiene su
propia ventana de cdigo, al igual que un formulario, con un objeto nico, el apartado General.
Aqu tambin tenemos la seccin de declaraciones, al igual que los formularios. En esta

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 42


seccin de declaraciones se comporta de manera similar a la de los formularios, pero permite
algo que no nos permite la seccin de declaraciones de un formulario : Declarar variables que
se pueden utilizar en todo el programa. Esto ya lo ha visto mas atrs, con la sentencia de
declaracin Public.

Los mdulos se emplean para la declaracin de variables globales, y para escribir el cdigo de
la aplicacin que sea comn a varios formularios. Esto nos evita tener que repetir cdigo
intilmente. Ese cdigo comn se escribir en un procedimiento que previamente habremos
insertado en este mdulo, y lo citaremos por su nombre desde cualquier parte del programa.

Los procedimientos se pueden introducir en los mdulos o en los formularios. Y les pasa lo
mismo que a las variables en cuanto a su mbito. Para agregar un procedimiento debe abrir
una ventana de cdigo (cualquiera) perteneciente al mdulo o formulario donde quiera insertar
ese mdulo, y a continuacin hacer click sobre Herramientas | Agregar Procedimiento de la
Barra de Men.

Fig. 1.4 Agregando un procedimiento

Nos aparecer un cuadro donde le debemos poner el nombre de ese procedimiento y elegir el
mbito (Alcance en la figura) que le queremos dar, pblico o privado.

Fig. 1.5 Cuadro para agregar un procedimiento o funcin

Si un procedimiento es pblico, se podr acceder a l desde cualquier parte de la aplicacin. Si


es privado, solamente desde el mdulo o formulario donde se ha introducido.

Cual es el nombre por el que podemos llamar a ese procedimiento? Sigue las mismas
normas que para las variables. Si se ha declarado como pblico en un mdulo, se le citar por
su nombre cualquiera que sea la parte del programa desde donde le citemos.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 43


p.e. CalculaGastos

Si se ha declarado como publico en un formulario, deberemos llamarle con el nombre del


formulario, seguido del nombre del procedimiento separado por un punto

p.e. Formulario1.CalculaGastos

Si se ha declarado como privado, se le llamar por el nombre, pero solamente desde el cdigo
del mdulo o formulario donde se insert, puesto que desde otro mdulo o formulario no se
ver.

Fjese en el punto usado como separador entre el nombre del formulario y el nombre del
procedimiento. VB usa como separador un punto. Usa el separador para separar el nombre de
un control y una de sus propiedades (Label1.Caption), para separar el nombre del formulario
del nombre de uno de sus controles (Formulario1.label1.caption) Se ir familiarizando con la
terminologa VB segn vayamos avanzando en el curso.

Call
En Visual Basic, para ejecutar un procedimiento no hace falta usar la sentencia Call, muy
propia de otros lenguajes de programacin. Hay programadores que la usan no s si porque
creen que es necesario, o porque piensan que queda ms bonito. No hace falta pero VB lo
soporta. Queda a gusto del programador usarla o no usarla.

Funciones

Al igual que introducimos Procedimientos, podemos introducir Funciones en nuestra aplicacin.


Una Funcin es un Procedimiento al que le pasamos uno o varios parmetros. (O Ninguno) y
nos devuelve un valor. Ver los Procedimientos y funciones mas adelante (Cap. 15). Al igual
que los Procedimientos, pueden ser pblicas (se vern en toda la aplicacin) o privadas (se
vern solamente en el formulario o mdulo donde estn. Se introducen igual que los
procedimientos,

Main

Merece la pena pararse un poco para estudiar el Procedimiento Main. Para verlo con mas
detalle, comentaremos como comienza a trabajar una aplicacin realizada en Visual Basic.

Imaginemos una aplicacin que tiene 3 Formularios. En cada uno de ellos tiene cdigo.
Lgicamente la aplicacin tendr que presentar uno de ellos en primer lugar. Deberemos
decirle a Visual Basic cual es el formulario inicial, y ser ese por el que empiece. En ese
formulario dispondremos el cdigo necesario para que la aplicacin se ejecute en el orden
deseado.

Si hacemos click en la Barra de Men de Visual Basic, en Proyecto | Propiedades


obtendremos el siguiente cuadro de dilogo :

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 44


Fig. 1.6 Cuadro de propiedades del Proyecto

Ver que tiene 5 pestaas, y actualmente tiene abierta la pestaa correspondiente a General,
y tiene desplegada una lista donde nos pide el Formulario Inicial. En esa lista figura tambin la
expresin Sub Main. Si ponemos como formulario inicial uno de los formularios, la aplicacin
comenzar por ese formulario. Si en uno de los Mdulos existentes en el proyecto, ponemos
un procedimiento llamado Main, podemos comenzar la ejecucin de la aplicacin justamente
por ese procedimiento. En ese procedimiento pondremos el cdigo necesario para que,
posteriormente, se muestre uno de los formularios. Esto es muy practico cuando queremos
hacer una funcin previa a mostrar cualquier formulario (abrir una base de datos, por ejemplo).
Para comenzar la aplicacin por Main se elige esa opcin en la lista Formulario Inicial.
Recuerde que Main debe estar en un Mdulo !

El cuadro de dilogo anterior sirve adems para otras cosas. Entre ellas poner el nombre del
proyecto (nombre que no aparecer por ninguna parte, solo en los datos internos de la
aplicacin) y su descripcin.

Existe otro cuadro parecido en Herramientas | Opciones donde puede terminar de completar
las condiciones de trabajo. Observe el cuadro Cuando Inicie sus programas. Aqu le permite
grabar el programa antes de ejecutar, cosa que le recomiendo para evitar que, al ejecutarlo,
por un cdigo mal puesto se le cuelgue el PC y tenga que volver a empezar. En este cuadro
puede elegir tambin el formato de la ventana de trabajo formato del editor, etc.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 45


Fig. 1.7 Opciones del entorno de diseo

En la pestaa Avanzado puede cambiar el entorno de trabajo. Le recomiendo el SDI.

Si tenemos la activada la casilla Declaracin de variables requerida nos pondr


automticamente Option Explicit en el encabezamiento de todas las secciones de
declaraciones de la aplicacin. Est en la pestaa Editor (Esto es algo que le recomiendo de
una forma especialmente rigurosa)

Podemos elegir tambin las ventanas que queremos que estn siempre visibles, y que
verifique automticamente la sintaxis de una instruccin en el momento de escribirla.

La pestaa de Editor nos permite fundamentalmente 2 cosas :

Ver solamente el cdigo correspondiente al procedimiento que estamos escribiendo Ver el


cdigo del Mdulo (o Formulario) completo. En este ltimo caso es un poco mas difcil de
manejar la ventana de cdigo, sobre todo si el programador no est muy habituado a ello. Le
presenta procedimiento tras procedimiento, separados por una lnea. Para seleccionar una u
otra opcin hay que seleccionar o deseleccionar la casilla Ver mdulo completo.

Cambiar el color de la letra y del fondo del cdigo, segn el tipo que sea (cdigo, comentario,
error devuelto, etc.). Los alumnos mas aventajados y con ganas de marear al profesor,
conocen la forma de poner como invisible una parte del texto del cdigo. Si observa
comportamientos raros en el texto donde escribe el cdigo, revise el cuadro de Colores de
Cdigo.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 46


Ejercicios del Captulo 1

Nota acerca de los ejercicios de cada captulo.

Estos ejercicios se proponen a efectos acadmicos solamente, para facilitar al alumno la


comprensin de lo explicado y estimular el autoaprendizaje. No son perfectos y seguramente
existir una forma mejor de realizarlos. No se ha pretendido crear programas perfectos, sino
que muestren al alumno parte de lo explicado en el captulo correspondiente.

Se renen en el ejercicio Cap11 tres pequeos programas. Es importante que el alumno


comprenda perfectamente como se ha programado cada una de las lneas. Son tan sencillos
estos ejemplos que dan ganas de saltrselos. Evite esa tentacin y vaya paso a paso camino
de la perfeccin en la programacin VB (Antesala de la gloria) entendiendo y sacando
consecuencias de estos pequeos ejercicios. Habr platos mas fuertes en pocos das.

En la parte de conversin de nmeros a cadenas de caracteres puede ver el comportamiento


de la funcin Str para convertir nmeros a cadenas de caracteres. Puede observar la longitud
de la cadena resultante contiene un carcter mas de los que cabra esperar. En la etiqueta de
desglose de caracteres, puede observar que el primer carcter es el 32 (espacio), carcter que
se elimina al hacerle la funcin Trim

En la seccin de operadores lgicos puede jugar a aplicar uno de los operadores disponibles a
una pareja de nmero o a un par de datos booleanos. Observe que para invertir los bits de un
byte basta con hacer el Xor con 255

La tercera parte se parece mas a un programa real.


Veamos un ejemplo de como se puede utilizar la funcin Xor. Explicaremos lo que es el Cifrado
Xor (Se us profusamente con los mensajes tlex, con un sistema llamado cinta aleatoria. No
entra en este curso explicar lo que era un teletipo. Era, al correo electrnico, lo que la mquina
de vapor al AVE )

Este sistema de cifrado puede utilizarlo en sus aplicaciones para, por ejemplo, cifrar el
Password de entrada y poder guardarlo cifrado en el disco duro de su PC. De cualquier forma,
debo indicarle que este sistema de cifrado al tiempo que simple, es tremendamente vulnerable,
pero si lo acompaa de otras caractersticas, lo convierte en un cifrador intrnsecamente seguro
(Vigenere). La explicacin mas detallada de algoritmos cifradores se sale por completo de la
intencin de este curso.

Supongamos que queremos cifrar la palabra Secreto que es el Password de entrada para una
aplicacin. Deberemos usar otra palabra que cifrar a la anterior, que llamaremos Clave. La
clave debe tener, al menos, tantos caracteres como la palabra a cifrar. Imaginemos que clave
es ABCDEFGHIJK

Para cifrar usamos la funcin Xor de cada una de las letras de Secreto con las
correspondientes letras de la clave. (La primera letra de Secreto con la primera letra de la
clave, la segunda con la segunda, etc.) Pero debemos efectuar la funcin Xor sobre un
nmero, no sobre una letra. Por lo tanto convertiremos la letra en un nmero usando la funcin
Asc Asc (A) = 65, ya que 65 es el nmero Ascii que corresponde a la A

Para realizar el Xor del carcter introducido en la variable a, con el carcter introducido en la
variable b haremos:

Chr(Asc(a) Xor Asc(b))

De esta forma, si a = S y b = A estaremos haciendo

Resultado = 83 Xor 65
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 47
En este caso, Resultado = 18. Vamos a ver por qu

Si representamos en binario el nmero 83 83 = 0 1 0 1 0 0 1 1


El nmero 65 es 65 = 0 1 0 0 0 0 0 1
Haciendo Xor bit a bit Resultado = 0 0 0 1 0 0 1 0 = 18

Luego el resultado de realizar el Xor entre S y A es el carcter 18, que no tiene representacin
como una letra.

Si ahora hacemos el Xor entre el resultado y la clave (18 con 65)

65 = 0 1 0 0 0 0 0 1
18 = 0 0 0 1 0 0 1 0
Resultado 2= 0 1 0 1 0 0 1 1 = 83 es decir la letra S

Vemos que descifra usando la misma funcin que para cifrar .

Si A Xor B = C A = B Xor C B = A Xor C

No vamos a explicar profundamente el ejercicio. El alumno debe intentar comprender cdigos


sencillos como este. Ver en su trabajo profesional que es difcil meterse en la forma de
programar de otra persona. El desentraar el cdigo de estos ejercicios puede ser una buena
prctica para ello.

El ejercicio Cap12 es un entrenamiento con fechas y formatos. Se sugiere al alumno que


introduzca nuevos formatos, utilice DateDiff, etc. Tambin tiene una parte dedicada a la
conversin de nmeros. Son ampliables por parte del alumno.

LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 48

También podría gustarte