Post on 14-Jan-2016
LSB Visual Basic - Gua del Estudiante Captulo 1 Pgina 1
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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 2
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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 3
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 4
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)
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 5
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)
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.)
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 6
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
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 7
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 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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 8
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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 9
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
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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 10
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
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)
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 11
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.
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 12
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 13
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 1 a 4
Case 1
Instrucciones a ejecutar en caso de que variable = 1
Case 2
Instrucciones a ejecutar en caso de que variable = 2
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 14
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.
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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 15
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.
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 16
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
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 (*)
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 17
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
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 18
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.
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 19
NOTA. Los ejemplos anteriores sirven solamente de ilustracin para explicar el cdigo que estamos
estudiando. No pretenda ver una forma mejor de realizar la misma funcin, que seguro que existe.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 20
BASIC DE VISUAL BASIC ( y 2 )
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)
Este ejemplo pondra en la etiqueta Label1 los caracteres correspondientes al valor que tuviese la
variable Variablenumerica .
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 21
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)
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)
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 22
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.
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 23
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.
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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 24
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:
= Igual que
No igual que
< Menor 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 25
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
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 26
(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)
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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 27
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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 28
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:
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.
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 29
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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 30
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)
vbFirstFullWeek 3 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 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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 31
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.
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]]])
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 32
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
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
LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 33
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