SlideShare una empresa de Scribd logo
Visual Basic - Guía del Estudiante Cap. 1
INTRODUCCION Antecedentes históricos.
El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code ) nació
en el año 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
inglés), y con instrucciones muy sencillas y escasas. Teniendo en cuenta el año de su
nacimiento, este lenguaje cubría casi todas las necesidades para la ejecución de programas.
Téngase en cuenta que las máquinas existentes en aquella época estaban estrenando los
transistores como elementos de conmutación, los ciclos de trabajo llegaban a la impensable
cifra de 10.000 por segundo y la memoria no pasaba de unos pocos k´s en toroides de ferrita.
Los autores fueron los científicos John G. Kemeny (Budapest, 1926 – USA 1992) y Thomas E.
Kurtz (Illinois 1928) Su trabajo original se llamó True BASIC.
La evolución del BASIC por los años 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 creándose la normativa BASIC STANDARD
Con la aparición de los primeros ordenadores personales, dedicados comercialmente al
usuario particular, allá por la primera mitad de los ochenta, el BASIC resurgió como lenguaje de
programación pensado para principiantes, y muchos de estos pequeños ordenadores
domésticos lo usaban como único sistema operativo (Sinclair, Spectrum, Amstrad)
Con la popularización 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 crédito entre los profesionales de la informática.
Las razones para ello eran obvias:
- No era un lenguaje estructurado.
- No existían herramientas de compilación fiables.
- No disponía de herramientas de intercambio de información.
- No tenía librerías.
- No se podía acceder al interior de la máquina.
- Un largo etcétera de desventajas respecto a otros lenguajes de programación.
Tal fue ese abandono por parte de los usuarios, que la aparición del Quick-BASIC de Microsoft,
una versión ya potente del BASIC, que corregía casi todos los defectos de las versiones pasó
prácticamente inadvertida, a no ser porque las últimas versiones del sistema operativo MS-
DOS incluían una versión de Quick-BASIC algo recortada (Q-Basic) como un producto mas
dentro de la amplia gama de ficheros ejecutables que acompañan 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 versión del popular BASIC ya es un lenguaje estructurado, lo que permite crear
programas modularmente, mediante subrutinas y módulos, 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 gráfico Windows.
Sin embargo algo había en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si
LSB Visual Basic - Guía del Estudiante Capítulo 1 Página 1
a esto se le añade el entorno gráfico Windows, el aprovechamiento al máximo de las
posibilidades de Windows en cuanto a intercambio de información, de sus librerías, de sus
drivers y controladores, manejo de bases de datos, etc. el producto resultante puede ser algo
que satisfaga todas las necesidades de programación en el entorno Windows. La suma de
todas estas cosas es VISUAL - BASIC. Esta herramienta conserva del BASIC de los años 80
únicamente su nombre y su sencillez, y tras su lanzamiento al mercado, la aceptación a nivel
profesional hizo borrar por fin el "mal nombre" asociado a la palabra BASIC.
Actualmente (2001) se está comercializando la versión 6.0 de este producto. Desde su salida al
mercado, cada versión supera y mejora la anterior. Dados los buenos resultados a nivel
profesional de este producto, y el apoyo prestado por el fabricante para la formación 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 máquina 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 programación.
(Visual-C). o realizar librerías (DLLs) que lo hagan. En la mayor parte de las aplicaciones, las
herramientas aportadas por VB son mas que suficiente para lograr un programa fácil de
realizar y de altas prestaciones.
Características Generales de Visual-Basic
Visual-Basic es una herramienta de diseño de aplicaciones para Windows, en la que estas se
desarrollan en una gran parte a partir del diseño de una interface gráfica. En una aplicación
Visual Basic, el programa está formado por una parte de código puro, y otras partes asociadas
a los objetos que forman la interface gráfica.
Es por tanto un termino medio entre la programación tradicional, formada por una sucesión
lineal de código estructurado, y la programación orientada a objetos. Combina ambas
tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos
tipos de programación, debemos inventar una palabra que la defina : PROGRAMACION
VISUAL.
La creación de un programa bajo Visual Basic lleva los siguientes pasos:
Análisis . Es el studio de las necesidades que han dado origen a la creación de ese
programa. Es lo que se se llama Análisis de la aplicación. Es la primera fase que debe
tener siempre un programa y es tambien la más olvidada entre los programadores
noveles. Una aplicación no se inicia con el teclado, sino sobre un papel.
- Creación de un interface de usuario. Este interface será la principal vía de
comunicación hombre máquina, tanto para salida de datos como para entrada. Será
necesario partir de una o varias ventanas - Formularios - a las que le iremos
añadiendo los controles necesarios.
- Definición de las propiedades de los controles – Se dará la forma, posición, y
todas las características necesarias a los controles que hayamos colocado en ese
formulario. Estas propiedades determinarán la forma estática de los controles, es decir,
como son los controles y para qué sirven.
- Generación del código 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.
- Generación del código del programa. Un programa puede hacerse solamente con
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 2
la programación de los distintos procedimientos que acompañan a cada objeto. Sin
embargo, VB ofrece la posibilidad de establecer un código de programa separado de
estos eventos. Este código puede introducirse en unos bloques llamados Módulos, 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 ejecución del programa.
No es necesario entender de momento lo anterior. Visual Basic introduce un concepto nuevo
de programación, y es necesario cambiar hasta el argot del programador. Posiblemente se le
habrán acumulado demasiados términos 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 – Guía del Estudiante Capítulo 1 Página 3
VARIABLES. DEFINICION Y ENTORNO
Basic, desde siempre, al contrario de otros sistemas de programación, no exigió la definición
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. Existirán varias
variables para poder introducir los datos de los alumnos. Estas variables pueden tener nombre
tales como:
Nombre
Apellido1
Apellido2
Dirección
Teléfono
Salario
La variable Nombre tomará valores distintos según vayamos introduciendo los datos de los
distintos alumnos. Es posible, que a lo largo de la ejecución del programa, esta variable
Nombre valga:
José
Pedro
María
Luis
Espero que su intuición o conocimiento anterior le lleve a conocer el concepto de variable. Mas
adelante lo verá mas claro.
Decíamos que Basic no exige la definición previa de las variables. Otras herramientas exigen
que se haga así. Por lo tanto es normal encontrar, en otros sistemas de programación, que un
programa comienza de la siguiente forma:
Declare Nombre As String Le dice que Nombre es una sucesión de letras
Declare Apellido1 As String
Declare Apellido2 As String
Declare Dirección As String
Declare Teléfono As String Le dice que Teléfono es una sucesión de letras
Declare Salario As Número Le dice que Salario es un número
Mediante estas declaraciones, el programa sabe de que tipo de dato se trata y por tanto cómo
debe trabajar con él. En otros sistemas de programación distintos de Basic, es necesario
realizar esta declaración 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"
Teléfono = "1234567"
entiende que Salario, Nombre y Teléfono son variables, que Salario es un número (No hemos
metido su valor entre comillas), y que Nombre y Teléfono son sucesiones de caracteres
alfanuméricos (su valor está entre comillas)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 4
Esta particularidad de no necesitar declarar las variables hace que sea sencillo introducir una
variable nueva. Sin embargo entraña un gran peligro. Imagínese que en un paso posterior del
programa, le mandamos escribir esos tres datos anteriores con la instrucción 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á ningún valor. Por lo tanto no escribirá nada y encima no dará ningún 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
instrucción 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 comunicación de error.
Esta declaración debe ponerla al comienzo de la sección de declaraciones de cada formulario y
módulo que contenga su aplicación. 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 declaración de variables. A partir de ahora, será VB quien ponga la
sentencia Option Explicit en el lugar correcto. (Fig. 1.1)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 5
TIPOS DE VARIABLES
Las variables pueden ser de los siguientes tipos: (El número indicado en segundo lugar indica
el número de Bytes que ocupa en memoria.)
Booleana (2) Admite los valores 0 y 1, o True (verdadero) y False (falso)
Byte (1) Números enteros, en el rango de 0 a 255
Integer (2) Números enteros en el rango de -32768 a 32767
Long (4) Números enteros en el rango de -2147483648 a 2147483647
Single (4) Punto flotante, simple precisión
Doble (8) Punto flotante, doble precisión.
Currency (8) Entero, con punto decimal fijo (Típico de monedas)
String (*) Cadenas alfanuméricas 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 número de bytes que caracteres tenga la cadena.
(**) Una variable tipo Variant ocupa 16 bytes si se trata de un número y 22 bytes + longitud de
la cadena si se trata de un dato tipo cadena de caracteres.
Existen también 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 citábamos 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
necesitaría (2) si la hubiésemos 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
ejecución 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
intención de que ocupen menos espacio. Paradoja del VB. Si la declaramos como Byte
ocupamos menos espacio en memoria. Declarar una variable como Boolean tiene también sus
ventajas (escribirá menos código por lo general cuando necesite leer o escribir una variable
tipo Boolean), pero tenga presente esta observación respecto al tamaño de los datos Boolean.
Puede declarar el tipo de la variable mediante un carácter después del nombre de la variable.
Esta técnica, 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 – Guía del Estudiante Capítulo 1 Página 6
Ejemplos Prácticos de declaración de variables
En Visual Basic, cuando declaramos una variable como String (Cadena de caracteres), no es
necesario declarar su longitud. VB aceptará cualquier número de caracteres. Si desea evitar
que se puedan introducir más de un determinado número de caracteres, debe declarar su
número. Por ejemplo :
Dim Var1 as String Var1 puede tener cualquier número de caracteres
Dim Var2 as String * 15 Var2 puede tener un máximo 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 ningún 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 código oportuno para producir el aviso.
La declaración de variables tipo String con número de caracteres predefinido presenta también
inconvenientes a la hora de tratar esa cadena de caracteres con sentencias tales como Mid,
Left y Right, o a la hora de añadir una cadena a otra. La experiencia nos indica que NO
merece la pena declarar variables tipo String con el número 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 números debe declararse
como una variable de cadena de caracteres (String), y no como numérica. Cuando pensamos
por ejemplo en un número de DNI, compuesto por 7 u 8 cifras, un código postal, el número de
una calle, el piso de un edificio, parecen invitar a que la variable que los contenga sea una
variable de tipo numérico (Byte, Integer, Long, ...). Estas variables, aunque su contenido sean
números, siempre se deben declarar como String, ya que se tratan en realidad de cadenas de
caracteres, aunque estos no sean letras sino números. Para aclarar mas estas ideas, piense
en el número del DNI con la letra del NIF incluido, o que el lugar del DNI se deba rellenar con el
número del permiso de residencia, (lleva letras). Piense en el código postal de una provincia
que comienza por 0 ( 08XXX = Barcelona ) . Si la variable que va a contener ese código postal
se declara como numérica, el cero de la izquierda lo desprecia, por lo que ese código postal
quedaría reducido al 8XXX, número de 4 cifras que el cartero nunca reconocería como un
código postal, que necesariamente ha de tener 5 cifras. Para terminar, piense la forma de
introducir en una variable numérica el número 32Bis de una calle o el piso S2 de un edificio. O
piense en una variable que va a contener un código de un producto. Ese código siempre va a
ser un número, por ejemplo de 9 cifras. ¿Ha pensado como trataría el ordenador una variable
numérica que contiene el código 000100123 ?. El resultado sería que convertiría ese código en
la cifra 100123, y Vd. deberá buscarse la vida para añadir los ceros iniciales a la hora de
sacarlo a una impresora, por ejemplo.
En todos los casos anteriores, el número no representa una cantidad numérica, sino un
nombre. Lo que ocurre es que ese nombre contiene solamente números.
¿Qué variables debemos declarar entonces como numéricas ? La respuesta es bien sencilla :
Aquellas que van a contener datos con lo que vamos a realizar operaciones
matemáticas.
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 números mayores de 255 ni números negativos.
Cada vez que declare una variable numérica piense en los valores que puede tener, sobre todo
cuando esa variable va a ser el resultado de una operación matemática. Recuerde el escaso
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 7
margen de una variable tipo Integer ( de -32768 a 32767)
Si la aplicación va a tratar moneda, piense en la forma de expresar los números decimales y el
número de ellos permitidos, así como el redondeo. La variable correcta para este caso es
Currency, pero Currency le añade automáticamente el tipo de moneda de cada país (Pts. Para
España) 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 extrañe si le expresa el número de pesetas
en dólares. Cambie el país 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 habíamos llamado Procedimientos. Podemos tener
procedimientos que no estén relacionados con ningún evento ocurrido al formulario o a sus
controles. (Los Procedimientos que iremos insertando a lo largo de la aplicación)
Aparte de formularios y controles, un programa puede tener Módulos, y en cada uno de los
módulos podemos insertar cuantos Procedimientos y Funciones queramos. La estructura de
un programa VB puede ser de la siguiente forma:
Formulario1 Formulario2 Formulario3 Módulo1 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 FunciónE1
Proc. A4 Proc.B4 Proc.C4 Proc.D4 FunciónE2
Proc. A5 Proc.BB1 Proc.CC1 FunciónE3
Proc. AA1 Proc.BB2 Proc.CC2 FunciónE4
Proc. AA2 Proc.B33 Proc.CC3 FunciónE5
Proc. AA3 Proc.CC4 FunciónE6
Si se declara una variable dentro de un procedimiento o Función, esa variable "NO SALE" del
Procedimiento o Función donde se declaró. El procedimiento puede estar en un Formulario
(Cualquier procedimiento de un control o un procedimiento creado por nosotros) o en un
Módulo (En este caso, el procedimiento solo puede ser creado por nosotros)
En un Formulario, una variable puede declararse de dos formas : Privada o Pública. Para
declarar una variable a nivel de formulario debe hacerse en la sección de declaraciones, que
está la ventana de código 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 pudiésemos insertar en ese
formulario), pero no sale de dicho formulario. Si se declara como Pública, esa variable puede
verse por todo el formulario, de la misma forma que lo haría declarada como Privada, y
además puede ser usada desde otro Formulario o Módulo, citándola con el nombre del
Formulario, seguido del nombre de la variable (Formulario.Variable)
En un Módulo una variable puede declararse como Privada, con lo que no saldrá de ese
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 8
Módulo, o Pública, pudiendo en este caso usarse en todo el programa. Cuando se declara una
variable como pública en un Módulo, basta referirse a ella por su nombre, sin citar el nombre
del Módulo 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á válida 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 declararía por segunda vez. A
esta nota cabe exceptuar cuando declaramos variables para una operación tipo contador
For I = 1 To N
Esa variable I es práctico declararla con el mismo nombre en cada Procedimiento donde se
use.
Tipos de declaración de variables.
Sentencia DIM Es la forma mas común de declarar una variable como
Privada. Puede emplearse en un Procedimiento, Función,
Formulario o Módulo. 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, Función, procedimiento o
módulo, el ámbito de la variable será el explicado anteriormente para una variable declarada
como Privada. Es decir, esa variable no sale del formulario, procedimiento ó módulo donde se
declaró. Cada vez que entremos al formulario, procedimiento o módulo, esa variable tomará el
valor cero (si es numérica) o nulo (si es string).
Sentencia PRIVATE Es la forma de declarar una variable como Privada. Puede
emplearse solamente en la sección de declaraciones de un
Formulario o Módulo. La sintaxis es de la siguiente forma:
Private nombrevariable As Tipovariable
Declarando una variable mediante la sentencia PRIVATE en un Formulario o Módulo, esa
variable puede usarse en todo ese Formulario o Módulo (En todos sus Procedimientos y
Funciones), pero NO fuera del Formulario o Módulo donde se declaró.
La sentencia Private no puede usarse en un procedimiento o función.
Sentencia PUBLIC Es la forma de declarar una variable como Pública. Puede
emplearse solamente en la sección de declaraciones de un
Formulario o Módulo. La sintaxis es de la siguiente forma:
Public nombrevariable As Tipovariable
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 9
Declarando una variable de esta forma en la sección de declaraciones de un Módulo, esa
variable puede usarse en cualquier parte del programa citándola simplemente por su nombre.
Si se declara de esta forma en la sección 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 Módulo puede usarse también la sentencia Global en vez de Public :
Sentencia GLOBAL Declara una variable que es válida en todo el programa. La
sintaxis es:
Global nombrevariable As tipovariable
La sentencia Global sólo puede usarse en el apartado de declaraciones de un Módulo. 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 solución. Si declarásemos
una variable en un procedimiento o función, como estática, esa variable, aunque no la
podremos utilizar fuera de ese procedimiento o función, cuando volvamos a él conservará el
valor que tenía cuando lo abandonamos. Esta declaración como estática se realiza mediante la
instrucción Static
Static nombrevariable As tipovariable
El nombre de una variable puede ser tan largo como queramos. hasta un máximo de 40
caracteres. En la versión VB para España se pueden usar incluso la Ñ y vocales acentuadas.
Es indiferente usar mayúscula ó minúsculas. No se sorprenda, si por ejemplo, la ha declarado
con mayúsculas y luego la cita con minúsculas al escribir el código, que automáticamente se
cambie a mayúsculas. 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
algún 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 – Guía del Estudiante Capítulo 1 Página 10
En un Formulario (En su sección de declaraciones)
Como Privada (Solamente se puede usar en ese Formulario)
Dim Variable As Tipovariable ó
Private Variable As Tipovariable
Como Pública (Puede usarse en toda la aplicación)
Public Variable As Tipovariable
En un Módulo
Como Privada (Solamente puede usarse en ese Módulo)
Dim Variable As Tipovariable ó
Private Variable As Tipovariable
Como Pública (Puede usarse en toda la aplicación)
Public Variable As Tipovariable ó
Global Variable As Tipovariable
Error típico 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 línea :
Dim Variable1, Variable2, Variable3, Variable4 As String
Esta declaración 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 línea, es la
siguiente :
Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 As String.
Forma de conocer el tipo de una variable. Función TypeName
Podemos conocer el tipo con el que se ha declarado una variable. Esto se hace mediante la
Función TypeName, que devuelve una cadena con el tipo de una variable.
MiTipo = TypeName(NombreVariable)
NombreVariable puede ser cualquier variable con excepción 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 – Guía del Estudiante Capítulo 1 Página 11
Largo Un entero largo.
Simple Un número de punto flotante de precisión simple.
Doble Un número de punto flotante de precisión 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 válidos.
Objeto Un objeto que no respalda Automatización OLE.
Desconocido Un objeto de Automatización 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 paréntesis vacío 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 botón de comando (CommandButton) y tres
etiquetas (Label). El botón 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 línea 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, tecléela.
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 botón de comando. Le aparecerá la ventana anterior, pero referida
ahora al Command1. Teclee el siguiente código :
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 función tiene mucha utilidad para determinar errores durante el diseño. 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 – Guía del Estudiante Capítulo 1 Página 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 añadido otras nuevas instrucciones, inherentes con la
programación 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
condición. Son las sentencias por las que empieza cualquier texto de Basic, y este no va ser
menos.
La sentencia condicional más usada es:
Si se cumple una condición Entonces
Realiza estas instrucciones
Si no se cumple
Realiza estas otras instrucciones
Fin de la sentencia.
Así de fácil es programar en Basic. Lo que ocurre es que esta herramienta habla inglés, y lo
descrito anteriormente toma la forma:
If condición Then
Instrucciones
Else
Otras instrucciones
End If
En este ejemplo, o se cumple una condición 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
tendría entonces la forma:
If condición 1 Then
Instrucciones
ElseIf Condición 2
Otras instrucciones
ElseIf Condición 3
Otro juego de instrucciones
Else
Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3.
End If
Como decíamos 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 – Guía del Estudiante Capítulo 1 Página 13
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
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 rápido que las sentencias If Then Else
vistas anteriormente, cuando el margen de elección es mayor que 2.
Puede agrupar varios valores en una misma línea. 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 hacíamos
anteriormente, disponemos de otras dos funciones: Choose y Switch.
Switch toma una serie de parámetros, todos por parejas. El primer término de cada pareja es
la expresión a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es
una función (las funciones las veremos muy pronto)
A = Switch (B=1, 5, B=2, 7, B=3, 11)
Esta instrucción 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 intrucción 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 habían establecido (1, 2 ó 3 en nuestro caso), la sentencia devuelve el valor
Nulo ( Null ). Esto puede producir algún error si no se contempla esa posibilidad.
Las sentencias Switch y Choose no se usan mucho en programación. Parece que los
programadores o no las conocen o se lían (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 – Guía del Estudiante Capítulo 1 Página 14
Otra sentencia condicional: IIF
Devuelve uno de entre dos valores, dependiendo de la evaluación de una expresión.
Sintaxis Iif (Expresión, SiEsCierto, SiEsFalso)
Expresión es la expresión a evaluar.
SiEsCierto Valor o expresión devuelta si Expresión es True.
SiEsFalso Valor o expresión devuelta si Expresión es False.
Observaciones
IIf siempre evalúa SiEsCierto y SiEsFalso, aunque sólo vaya a devolver una de ellas. Por esta
razón, deberá vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar
SiEsFalso se produce un error de división entre cero, se generará un error aunque Expresión
dé como resultado True.
Como ejemplo, en el formulario de nuestro primer programa introduzca un nuevo botón de
comando. Introduzca también un TextBox. Vea que poco a poco vamos metiendo cosas
aunque no las conocemos todavía. Mas tarde las conocerá. El TextBox tendrá por nombre
Text1. Haga doble click sobre el botón de comando e introduzca el siguiente código :
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 numérico en Text1. Si ese valor numérico es
menor que 100, MiVariable tomará el valor “Es menor” (No se cumple la condición expresada
en el primer parámetro Text1.Text > 1000). Si introduce una cantidad mayor, se cumple esa
condición, por lo que MiVariable tomará el valor “Es mayor”. El valor que toma la variable
puede verlo en Label1.
Fíjese 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 común utilizar bucles a lo largo de un programa. Un bucle es una sucesión repetitiva de
instrucciones, que se estarán realizando mientras se cumpla una condición o mientras no se
cumpla otra condición. Es tan sencillo como esto:
Mientras condición
Instrucciones
Fin del bucle
Existen dos formas de bucle: Una, que realiza un número 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 condición. Es el llamado bucle por condición.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 15
Bucle por contador
Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a
presentar las 26 letras mayúsculas del alfabeto inglés
For N=65 To 90
Label1.caption = Chr ( N )
Next N
Este "programa" nos presentará en una caja (Label) los caracteres cuyo número ASCII vaya
desde el 65 (A) al 90 (Z) Comenzará presentando el correspondiente al número 65, e irá
presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parará.
Bucles por condición
Ejecuta las instrucciones del bucle mientras se cumple una condición
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 también
de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como
final de lección, se propone un problema. Con el primer bucle, donde visualizábamos 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 cambiaría con mucha velocidad, y
solamente veríamos 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
condición, la sentencia será:
X = 0
Do Until X > 1000
X = X + 1
Loop
Observe que la diferencia entre una y otra es la condición, While para indicar Mientras se
cumpla que ... y Until para indicar Mientras no se cumpla que ....
Para terminar bien el programa anterior utilizaremos la condición de While (Mientras se
cumpla la condición)
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 – Guía del Estudiante Capítulo 1 Página 16
Este es nuestro primer programa en BASIC. En VISUAL BASIC es idéntico, pero nos falta la
interface gráfica. 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 código anterior. Podemos introducir un botón de comando
(Command Button) que saldrá con el nombre por defecto de Command1. Haga doble click
sobre el botón. Aparecerá el procedimiento Click. Este procedimiento es el que se realiza
cuando hacemos click sobre ese botón. Escriba en ese procedimiento este código.
Private Sub Command1_Click() ' Esta línea sale automáticamente
For N=65 To 90
Label1.caption = Chr ( N )
Label1.RefreshN ' Refresca la etiqueta
X = 0
Do While X < 1000 ' Bucle de temporización (*)
X = X + 1
Loop
Next N ' Termina el bucle de temporización
End Sub ' Esta línea sale automáticamente
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
estaría detenido realizando una función bastante triste, contar hasta 1000 para luego continuar
el programa. Y lo que es peor, en un ordenador a 300 MHz. Tardaría menos tiempo que en
uno a 66. Esta misma función puede hacerla con Sleep que la verá mas adelante, que es la
forma limpia y elegante de hacer una temporización
Formas de salir de un bucle
Para salir de un bucle, podemos esperar a que se complete, bien porque se ha cumplido la
condición (Bucles por condición) 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 ejecución total
del mismo, por ejemplo, porque ya hemos encontrado lo que estabamos buscando, y sería una
pérdida 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 través del puerto serie. (Cuando se conecte, el control MSComm1
detectará la señal DSR que le envía 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 – Guía del Estudiante Capítulo 1 Página 17
En el siguiente ejemplo, deseamos transmitir por el puerto serie una serie de números, del 1 al
1000, pero siempre y cuando que el equipo que está al otro lado de la línea serie esté a la
escucha (Condición MSComm1.DSRHolding = True) Si se desconecta ese equipo, y la
condición 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
capítulos mas adelante. Lo importante es que entienda la idea de salir de un bucle por la vía
rápida.
Función DoEvents
Si hablameos de bucles, necesariamente debemos hablar de la función DoEvents. Y es así por
la misma razón que cada vez que ponemos un bucle, deberíamos poner dentro de ese bucle la
palabra mágica DoEvents.
Imagínese que Visual Basic está ejecutando este código:
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
además no podrá atender a otros eventos que se produzcan en el ordenador (por ejemplo la
pulsación 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 ejecución mediante
las teclas Ctrl – Pausa. No podrá pararlo mediante el botón Terminar de la barra de
herramientas de VB. En un programa compilado posiblemente tenga que reiniciar el equipo
mediante Alt – Ctrl – Sup, llevándose por delante el resto de los programas que se estén
ejecutando en ese momento en su PC.
No es difícil 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 instrucción DoEvents.
Cuando VB encuentra esta función el control del microprocesador al sistema operativo, y si hay
alguna operación en espera (la pulsación 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 están ejecutando al mismo tiempo.
El bucle tomaría 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 ejecución
Y ya que explicamos como se sale de un bucle por la vía rápida, veamos como salir de un
procedimiento usando también esa “vía rápida”.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 18
Para salir de un procedimiento basta con ejecutar la sentencia Exit Sub. En el ejemplo
siguiente, usamos el botón BotonLeerNombre para introducir el dato Nombre en una base de
datos. Pero ese campo puede tener como máximo, 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 máximo 20 caracteres"
Text1.Text = ""
Exit Sub ‘Con esta instrucción saldríamos de este procedimiento
Else
'Aqui vendrían las lineas de instrucciones donde trataríamos
'el contenido de Text1, si tuviese menos de 20 caracteres
End If
End Sub
NOTA. Los ejemplos anteriores sirven solamente de ilustración para explicar el código que
estamos estudiando. No pretenda ver una forma mejor de realizar la misma función, que
seguro que existe.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 19
BASIC DE VISUAL BASIC ( y 2 )
Funciones de cadena
Se denomina CADENA a una sucesión de caracteres. Una cadena puede tener uno o varios
caracteres alfanuméricos. Una cadena es también una sucesión de números.
Ejemplo de cadenas:
Curso de Visual Basic
abcdefghijklmnopqrstuvwxyz1234567890
123456789
Hagamos una distinción entre una cadena que contenga números y un número. Un número
tiene un valor, pero también tiene una presentación escrita. El valor es algo que estará en el
ordenador como una sucesión de bits. Dependiendo de como lo hayamos declarado, tendrá
mas o menos bits. Pero esa información no es un número legible por el usuario. Lo que sí es
legible por el usuario es la representación en numeración decimal (u octal, o hexadecimal, o
incluso en binario) de ese número. Esa representación del número en un determinado sistema
de numeración es una cadena.
Así, el número nueve, que en la memoria del ordenador será una sucesión de bits, nos lo podrá
presentar como:
9 En numeración decimal
9 En numeración hexadecimal
11 En numeración octal
1001 En numeración binaria
Esas formas de presentarnos el número son CADENAS de caracteres. El valor del número
dentro del ordenador es un NUMERO.
Para presentar un número en la pantalla, el ordenador debe convertirlo previamente a una
cadena.
Cuando introducimos un valor numérico por teclado o pantalla, el ordenador para hacer
operaciones con él, debe transformarlo a un número.
Estas consideraciones nos llevan a las dos primeras funciones con cadenas:
Str (número) Convierte un número a una cadena en numeración
decimal.
Val (cadena numérica) Obtiene el valor (el número) correspondiente a esa
cadena.
Ejemplos
Variablenumerica = Val (TextBox1.Text)
Este ejemplo convierte la cadena de caracteres (numéricos) que hubiese en la caja de
texto TextBox1 en un número, y asocia este número a la variable Variablenumerica.
Si el contenido de la caja de textos no fuesen caracteres numérico (abcd, por ejemplo),
Variablenumerica tomaría el valor 0.
Label1.Caption = Str (Variablenumerica)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 20
Este ejemplo pondría en la etiqueta Label1 los caracteres correspondientes al valor que tuviese
la variable Variablenumerica .
Nota para recordar: Siempre habrá que convertir un número a una cadena cuando queramos
presentarlo en la pantalla. Siempre habrá que convertir a número la cadena de caracteres
numéricos que hayamos introducido por teclado o por pantalla, cuando queramos operar con
ese número. Un Label, cuando tiene que presentar un único número, no le pedirá que se lo
convierta a cadena, pues VB hace automáticamente esa conversión. Sin embargo, cuando
tiene que presentar un número, y además un texto en el mismo Label, VB no realizará
automáticamente ese cambio, por lo que le dará un error. Le recomiendo que convierta los
números a variables de cadena siempre que los quiera presentar en un Label o TextBox.
Cuando tenga mas experiencia en VB verá que esta observación estará un poco de más. Pero
de momento, convierta cada dato según lo vaya a necesitar.
Existe una función mas amplia que Str. Se trata de Cstr. Esta función no solamente
transforma un número a una cadena, como hace Str, sino que convierte cualquier tipo de
variable a una variable tipo String (cadena).
Esta función 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 también 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 colección 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 carácter
extraído el que ocupa el lugar m.
(Vea Instrucción Mid mas abajo)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 21
Resultado = Mid (cadena, 3, 10) ----> Resultado = rso de Vis
LCase (cadena) Devuelve otra cadena igual, pero con todos los
caracteres en minúsculas. (LCase = Lower Case)
Resultado = Lcase (cadena) ----> Resultado = curso de visual basic
UCase (cadena) Devuelve otra cadena igual, pero con todos los
caracteres en mayúsculas. (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 número de Bytes empleados para almacenar la
cadena. Sorpréndase, es el doble que Len (Cadena)
String (n, carácter) 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 función Trim hay que usarla cada vez que convertimos un número a cadena de caracteres.
Cuando usamos Str(Número), la función 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 ningún ejemplo de estas funciones, pues sería difícil verlo impreso.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 22
InStr (cadena, cadena1) Busca la cadena1 dentro de cadena y
devuelve el número 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, según las
instrucciones que le sigan. Puede sustituir a UCase o LCase si la
instrucción es UpperCase o LowerCase respectivamente, o poner la
primera letra de todas las palabras de la cadena en mayúsculas, si la
instrucción 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
Instrucción Mid
Mid puede usarse también para cambiar el contenido de una cadena. Observe la sutileza entre
Mid como Función de cadena y Mid como Instrucción.
La Instrucción Mid reemplaza un número 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 más 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 número ASCII de un carácter, y para, sabiendo el
número ASCII, hallar el carácter correspondiente.
Función Asc
Devuelve el código de carácter correspondiente a la primera letra de una cadena de
caracteres.
Sintaxis MiVariable = Asc (Cadena)
Cadena es cualquier expresión de cadena válida. Si la cadena no contiene caracteres, ocurrirá
un error en tiempo de ejecución.
Ejemplo : Label1 = Asc (“ABCD”) Label1 presentará 65
Nota Hay otra función (AscB) que puede usarse con bytes contenidos en una cadena. En
lugar de devolver el código del carácter para el primer carácter, AscB devuelve el primer byte.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 23
Función Chr
Devuelve el carácter asociado con el código de carácter especificado.
Sintaxis Chr (CódigoCarácter)
El argumento CódigoCarácter es un número en el intervalo de 0 a 255, inclusive, que identifica
a un carácter.
Ejemplo Label1 = Chr (65) Label1 contendrá el carácter A
Como ejemplos de números de caracteres algo especiales se debe señalar el carácter 10
(avance de línea) y el carácter 13 (Retroceso de carro). La tecla ENTER produce ambos
caracteres cada vez que se pulsa.
Otros caracteres importantes son, el Backspace (carácter 8), y el espacio (carácter 32)
Nota Se proporciona otra función (ChrB) para su uso con datos de byte incluidos en una
cadena. En lugar de devolver un carácter, que puede ser de uno o de dos bytes, ChrB siempre
devuelve un solo byte.
FUNCIONES CON NUMEROS
_________________________
Visual Basic puede operar con números tal como lo haría cualquier persona. Conoce las 4
reglas, y puede utilizar paréntesis de la misma forma que los escribimos sobre el papel.
Los operadores que utiliza para las operaciones básicas son:
+ Suma
- Resta
* Multiplicación
/ División
 División sin decimales
Mod Resto de una división
^ 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 aritméticos.
Existen otras operaciones que se pueden realizar con números: 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 – Guía del Estudiante Capítulo 1 Página 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 decisión.
El operador = puede usarse también para comparar cadenas o fechas.
Operadores Lógicos
Estos operadores podemos usarlos con variables Booleanas, es decir, aquellas que solamente
pueden tomar los valores cero y uno, y con caracteres (un carácter = 1 Byte = 8 bits) realizando
la operación correspondiente bit a bit con los 8 bits de cada carácter. Pero en este caso, los
parámetros deben introducirse en decimal. Por ejemplo, si quiere realizar la función And entre
el carácter 15 (00001111) y el 131 (10000011) , debe ponerlo de la forma Resultado = 15 And
132. El resultado de esta operación 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 números
Int , FixDevuelven la parte entera de un número con decimales
Int y Fix eliminan la fracción de un número y devuelven el valor entero resultante. La diferencia
entre Int y Fix es que si el número es negativo, Int devuelve el primer entero negativo menor o
igual a número, mientras que Fix devuelve el primer entero negativo mayor o igual a número.
Por ejemplo, Int convierte -8,4 en -9, y Fix convierte -8,4 en -8.
Abs Devuelve el valor absoluto de un número
Sgn Devuelve el signo de un número
Sqr Devuelve la raíz cuadrada de un número
Exp Devuelve el número elevado al exponente
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 25
indicado
Log Devuelve el logaritmo natural de ese número
Trigonométricas
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 número
(Angulo en radianes)
Funciones para el Cambio de Base de Numeración
Función Hex Devuelve una cadena, es decir, un string, que representa el valor
hexadecimal de un número.
Sintaxis VariabledeCadena = Hex (número)
Si número no es un número entero, se redondea al número entero más cercano antes de ser
evaluado.
Mediante esta función se puede convertir un número de hasta ocho caracteres hexadecimales.
Se pueden representar números hexadecimales directamente, anteponiendo &H. Por ejemplo,
&H10 representa al decimal 16 en la notación hexadecimal.
Función Oct Devuelve la cadena (String) que representa el valor octal de un
número.
Sintaxis VariabledeCadena = Oct (número)
Si número no es entero, se redondea al número entero más cercano antes de ser evaluado.
Puede realizarse la conversión hasta el valor de 11 caracteres octales.
Se pueden representar números octales directamente, anteponiendo &O a números en el
intervalo apropiado. Por ejemplo, &O10 representa a 8 en base diez en la notación octal.
Recuerde que estas dos funciones devuelven una Cadena de caracteres, no un número.
El resultado deberá tratarlo como una cadena de caracteres.
Funciones Cxxx para conversión del tipo de datos.
Son un tipo de funciones que convierten un dato o expresión a un tipo de datos determinado
Función Cbool Convierte una expresión al tipo de datos Boolean.
Sintaxis VariableBooleana = Cbool (expresión)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 26
El argumento expresión es cualquier expresión numérica o expresión de cadena válida.
Si expresión es cero, se devuelve False; de lo contrario, se devuelve True Si la expresión no se
puede interpretar como un valor numérico, ocurrirá un error de tiempo de ejecución.
Función CByte Convierte una expresión al tipo de datos Byte.
Función CCur Convierte una expresión al tipo de datos Currency. (Moneda)
Función 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 número. Cuando la parte fraccionaria es exactamente 0,5, la función CLng
siempre la redondea al número par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.
Función 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 número. Cuando la parte fraccionaria es exactamente 0,5, la función CInt
siempre la redondea al número par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.
Función CDbl Convierte una expresión al tipo de datos Double.
Función CSng Convierte una expresión a un tipo de datos Single.
Debe usar las función 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 configuración de la información local de su PC.
Si la expresión a convertir queda fuera del intervalo aceptable para el tipo de datos a obtener,
ocurrirá un error.
Función CStr Convierte una expresión a un tipo de datos String.
Debe usar la función 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 configuración de la información 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 ejecución.
Empty String de longitud cero ("").
Error String conteniendo la palabra Error seguida del número de error.
Numérico String conteniendo el número.
Función Cvar Convierte una expresión a un tipo de datos Variant.
Función Cdate Convierte una expresión 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 operación entre
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 27
números, 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 números 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 operación es que da un error, pues no entiende que sumando varios Byte
(números comprendidos entre 0 y 255) puedan dar un número de otro tipo. Dará seguramente
el error 6, Overflow. Para que esto no suceda, haremos el truco de convertir el primero de los
números que forman parte en la operación matemática a un Long, y de esta forma, VB ya se
da cuenta que el resultado de esa operación es un Long:
Suma = CLng(I1) + I2 + I3 + I4 + I5
Tenga en cuenta esa observación inicial que NO ocurre en todas las ocasiones. (Y me parece
que era un fallo de los muchos que tenía VB5)
Otras Funciones
Una función curiosa
Timer Tiempo acumulado Devuelve el tiempo (en segundos) que ha
pasado desde las 12 de la noche.
Generación de números 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 números aleatorios
generados de esta forma son siempre iguales, eso sí, dependiendo del número que se le
introduzca como parámetro. Esta generación de números no produce números aleatorios pues
como se dijo, dependen del numero que se meta como parámetro, y si este se repite, se repite
la sucesión de números que nos crea el generador aleatorio. (Afortunadamente lo han
corregido en la versión 6)
La forma de obtener números realmente aleatorios es introducir como parámetro un número
que sea variable con el tiempo. Ese número no puede ser otro que el número timer visto antes.
Y siempre con la precaución de que medie mas de un segundo entre dos instrucciones
Randomize. La función toma entonces la forma:
Randomize Timer
La función Randomize devuelve una variable Rnd con un número comprendido entre 0
y 1 (Nunca será 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una
sucesión de números aleatorios. No es necesario ejecutar la instrucción Randomize Timer
cada vez que se quiera obtener un dato de la variable Rnd.
Un ejemplo. Generador de números para la Lotería Primitiva
Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botón de
comando de nombre Command1. Cuando hagamos click sobre el botón de comando deberá
generar un número comprendido entre el 1 y el 49. En el procedimiento click de Command1
pondremos el siguiente código:
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 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 pequeño programa, con la instrucción Randomize Timer y sin ella.
Funciones con fechas.
Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la información relativa a
la fecha y la hora. Dispone para ello de una declaración 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 día de la semana (En número, 1=Domingo, 2=Lunes,...)
Day Obtiene el día, a partir de una fecha
Month Obtiene el mes a partir de una fecha.
Year Obtiene el año 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 Añade 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 parámetros relativos
TimeSerial Compone una hora a partir de parámetros relativos.
DateValue Devuelve una fecha a partir de un dato que se le parezca y VB
pueda obtener de él una fecha válida
Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Por
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 29
ejemplo, para obtener el día de hoy solamente:
Día = Day (Now) Día será un número
El día de la semana lo obtendríamos
Diasemana = WeekDay (Now) Diasemana será un número
DateValue, una instrucción que le sacará mucho provecho
Fecha = DateValue (12-07-96)
Fecha = DateValue (12 07 96) Fecha =12/07/96
La función DatePart merece estudio aparte. Con esta función podemos averiguar el mes,
trimestre, semana, día del año, etc.
La sintaxis de esta función es :
VariableNumérica = DatePart (Intervalo, fecha[, primerdíasemana[, primerasemanaaño]])
Valor para Intervalo Obtendremos el
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
n Minuto
s Segundo
El parámetro Primerdíasemana puede ser un número 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 día es para nosotros el primero de la semana
Constante Número Primer día de la semana
vbSunday 1 Domingo (predeterminado)
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sábado
Para el parámetro primerasemanaaño podemos emplear uno de los siguientes números o
constantes:
Constante Valor Descripción
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
días en el año nuevo. (Standard ISO 8086)
vbFirstFullWeek3 Empieza con la primera semana contenida completamente en
el año nuevo.
Por ejemplo, y tomando como referencia para todos los ejemplos el día 22 de Septiembre de
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 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 día de la semana
era el domingo - Predeterminado)
variable = DatePart ("w", Now, vbMonday) Variable = 2 (Primer día semana = lunes)
variable = DatePart ("ww", Now, vbMonday, vbFirstFourDays)
Variable = 39, que indica el número de la semana dentro del año.
Cuidado con como se escriben las fechas. Una posibilidad es la usada en los ejemplos, pero
solamente vale para el día de hoy. Puede expresar la fecha metiéndola entre dos signos #,
pero en ese caso debe estar expresada en el formato mm/dd/yy (mes/día/año). Ejemplo :
variable = DatePart("ww", #9/22/98#, vbMonday, vbFirstFourDays)
Pero lo mas fácil para el formato de fecha usado en España es meter la fecha entre comillas
dobles, y usar el formato especificado para el país :
variable = DatePart("ww", "22/9/98", vbMonday, vbFirstFourDays)
Con las comillas dobles puede incluso no poner el año. En este caso le pone por defecto, el
año en curso.
variable = DatePart("ww", "22/9", vbMonday, vbFirstFourDays)
Estas tres formas de expresar la fecha funcionan perfectamente, al igual que cuando lo
hacíamos con Now, y el resultado sigue siendo 39.
Nota para recordar de las variables tipo Date
(No se extrañe que esta explicación la encuentre solamente en esta Guía del Estudiante)
Visual Basic trata las fechas como números. Y precisamente como un número Double. Emplea
por lo tanto 8 bytes para representar una fecha. Por ejemplo, al día 12 de Julio de 1999, (Fecha
en la que el autor de este libro alcanzó la respetable edad de #9 años) le corresponde el valor
de 36563. Ese es el número de días transcurridos desde el origen de tiempos tomado por VB
(Y por muchas otras aplicaciones de Microsoft y de otras marcas) hasta ese fatídico día. ¿
Cual es ese origen del tiempo? El 30 diciembre 1899. ¿Que porqué ese día?. No lo sé. Pero
es fácil intuir que motivos prácticos para que cualquier fecha del siglo XX tuviese un número
positivo. Porque las anteriores a ese día las trata como números negativos. Por ejemplo, el día
12 de Octubre de 1492, VB lo trata como el día número - 148.732. Ese numero puede
conocerlo utilizando la función CDbl sobre una variable tipo Date. Puede verlo en el ejercicio
Cap12 del disco.
Una hora también es una variable tipo Date. Y una composición Día / Hora también. ¿Que
como trata los minutos dentro de una variable Date? Pues como decimales de ese número
Double. Por ejemplo, la hora 12:00:00 del día 12 de julio de 1999 es para VB
36.563,5
Es decir, la parte decimal representa la fracción de día transcurrido desde el comienzo del día
(medianoche) hasta la hora en cuestión. No debemos confundir esta fracción del día (0,5 para
las 12:00:00) con el valor de la función Timer para ese instante (45.000)) que representa el
número de segundos transcurridos desde la 12 de la noche de ese día.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 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 sucesión de caracteres. Si ejecutamos el código:
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 ocurriría si la
declarásemos como String o Variant. En cualquiera de estos casos, Pepe contendría el literal
introducido, es decir, “12 Julio 1999”
De lo anterior se desprende una cosa, dado que la fecha la guarda como un número, no
importa en que formato le introduzcamos una fecha. Si ponemos que Fecha1 = “12/7/99” es
idéntico a poner fecha1 = 12/07/1999 ó Fecha1 = 1999-07-12. Eso sí, debe reconocer el
formato, y luego, el dato, lo tratará como un número Double. Lo volveremos a ver cuando
estudiemos las bases de datos. Access trata las fechas de idéntica forma.
Función FORMAT
Esta función permite presentar cadenas numéricas o fechas de una determinada forma.
Permite establecer el Formato de esa cadena.
Si recurre a la ayuda de VB acerca de esta función se va a enterar muy poco de lo que puede
dar de sí. La sintaxis que presenta es :
Format(expresión[, formato[, primerdíadesemana[, primerasemanadelaño]]])
Lo mejor que puede hacer con esta definición de la sintaxis de Format es olvidarla. No le aclara
mucho lo que se puede hacer con Format. La función Format se usa para poner una fecha en
un determinado formato. Con la expresión :
FechadeHoy = Format (Now, “yyyy-mm-dd”)
la variable FechadeHoy tendrá el valor 1998-05-21, que se refiere al día 21 de mayo de 1998,
según el formato recomendado por la norma ISO-8601 para la presentación de fechas. Si
hubiésemos puesto la expresión FechadeHoy = Format (Now, “dd/mm/yy”) , la variable
FechadeHoy contendría el valor 21/05/98 referido al día citado.
Las posibilidades de Format llegan también al campo de las cadenas numéricas. Por ejemplo
la cifra 123456 se transformará en las siguientes expresiones, según como empleemos la
función 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 (expresión[, formato[, firstdayofweek[, firstweekofyear]]])
No se complique la vida con el tema del primer día de la semana ni la primera semana del
año. No lo usará con frecuencia. Centrémonos mas en el parámetro Formato. Puede tomar
muchos valores. Veamos los principales. Primero para números
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 32
Observe que usamos la expresión Variable = Format (1234567,”Formato”) para todos los
ejemplos de números.
Para poner los números separados por millares :
Variable = Format(1234567, "##,###,###") Variable = 1.234.567
(Cada carácter # indica que ahí va un número. 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 número 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 número por cien y lo presenta cono
porcentaje(123456700,00%)
Scientific Usa notación científica (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
RECOMENDACIÓN ISO 8601
Va como cultura general. Esta recomendación 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 recomendación. La Administración Española está obligada a exigir su
cumplimiento en todas aquellas aplicaciones que realicen intercambios de fecha y hora.
Format dispone de mas opciones. Sería muy largo explicarlas aquí. Para mas información, 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 expresión 12 Julio 1999, y queremos convertir esa fecha al formato
ISO 8601, podemos hacerlo de cualquiera de estas dos formas:
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 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 función 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 válida. Si lo consigue lo
presenta. Si no lo consigue, dará un error.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 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 número por orden de lista de ese alumno.
Las matrices normalmente comienzan a numerar por el número 0. Este comienzo puede no ser
el mas apropiado para la variable que estamos planteando, pues ningún alumno tiene el
número de orden 0. Para hacer que una matriz comience a numerar por el 1 se debe definir
mediante la instrucción:
Option Base 1
que debe colocarse al comienzo del módulo o formulario donde declaremos la matriz.
Para declarar la matriz se hace como con todas las variables, especificando entre paréntesis el
número 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 también 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 serán 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 número 15 de la clase, será
el elemento:
Alumno (15, 2)
Podemos definir matrices de dimensión superior a dos. Podemos llegar a un máximo de 60
dimensiones. Una matriz de 5 dimensiones se declararía:
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 instrucción ReDim
ReDim Alumno (1To 25)
Mediante esta instrucción, estamos ReDimensionando una matriz ya declarada. No se puede
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 35
redimensionar una matriz inexistente.
Mediante la declaración 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 número 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 aplicación, pero
esa redimensión no puede afectar al número de dimensiones de la matriz. Si redimensionamos
la matriz perderá la información existente. Para evitar perder la información presente en la
matriz, debe utilizar la sentencia ReDim Preserve.
Si usa la palabra clave Preserve en matrices de dimensión superior a 1, va a encontrarse con
comportamientos no esperados. Como podrá ver en la Ayuda de VB, usando ReDim Preserve
sólo puede cambiar el tamaño de la última dimensión de matriz y no puede modificar en ningún
momento el número de dimensiones. NO es cierto del todo. SÍ lo podrá hacer una sola vez.
Respecto a cambiar el número 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 también hemos cambiado el número de elementos en cada dimensión.
Si hubiésemos utilizado ReDim Preserve solamente podríamos haber usado la primera de las
dos líneas anteriores :
ReDim Preserve MiMatriz (1 To 5, 1 To 9)
pero ya no podríamos volver a cambiar el número de dimensiones con la segunda línea. Nos
daría un error.
Con ReDim podemos cambiar el número de elementos de cada dimensión 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 hubiésemos empleado ReDim Preserve, podríamos 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 dimensión :
ReDim Preserve (1 To 5, 1 To 20)
ReDim Preserve (1 To 5, 1 To 30)
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 36
es decir, no podremos hacer esto :
ReDim Preserve (1 To 10, 1 To 30) donde se señala en negrita el error.
Esto no causa ningún error en una matriz de una dimensión, ya que si la matriz tiene sólo una
dimensión, puede cambiar el tamaño de esa dimensión porque es la única y la última.
Cuando a lo largo de la aplicación 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 máximo y mínimo de una matriz se usan las funciones UBound y
LBound.
UBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.
Sintaxis UBound(nombredelamatriz[, dimensión])
LBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.
Sintaxis LBound(nombredelamatriz[, dimensión])
Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de la
aplicación se ejecutó la siguiente instrucción válida :
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 Dimensión 1, ISD 1 = Indice Superior Dimensión 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
Función Split
Una vez visto lo que es una matriz, vamos a ver una función interesante para el tratamiento de
cadenas de caracteres. La función Split
Descripción
Esta función toma una cadena de caracteres compuesta varias subcadenas, separadas entre
ellas mediante un separador, y devuelve una matriz de una dimensión, que contiene esas
subcadenas.
Sintaxis Split (expresión[, delimitador[, contar[, comparar]]])
Donde:
Expresion es la variable que contiene la cadena de caracteres de entrada
Delimitador. Contiene el carácter o caracteres que se usan de delimitador entre
subcadenas
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 37
Contar es un número donde indicamos el número de subcadenas que queremos
extraer. Si no se pone nada, extrae todas las cadenas. Si se pone un valor, extrae el
número 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 numérico que nos da cuatro opciones de comparación para
comparar las subcadenas. Este parámetro es solamente para alumnos avanzados
Ejemplo.
En el siguiente ejemplo veremos como separar distintos datos que están 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 numérica
MiVariable = Split(Text1.Text, ",") ‘Ejecutamos la función 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 – Guía del Estudiante Capítulo 1 Página 38
VISUAL BASIC
Tras esta pequeña introducción al lenguaje Basic ya estamos en disposición 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 título del programa Visual Basic, con el texto :
Proyect1 - Microsoft Visual Basic (Diseño)
Por debajo de esta barra de Título del VB, encontramos la barra de menú de VB, con las
leyendas :
Archivo Edición Ver Proyecto Formato Depuración 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 operación que Vd. puede realizar. Estas
operaciones está todas en la línea de menú, y puede acceder a ellas abriendo los menús
desplegables que existen en cada una de las palabras Archivo Edición Ver ...... de esta línea
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 – Guía del Estudiante Capítulo 1 Página 39
Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de herramientas
real que pueda tener un mecánico para realizar su trabajo. En ella están los iconos que
representan a los controles con los que Vd. va a desarrollar su aplicación VB. No están todos
los que pueden estar, al igual que en una caja de herramientas de un mecánico no están todas
las herramientas que puede usar. Están 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 haría un mecánico con una herramienta especial, que la
metería en su caja sólo 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 versión y la personalización. Para añadir un nuevo control haga click en
Proyecto | Componentes y le aparecerá una caja con todos los controles existentes. Puede
seleccionar nuevos controles para añadir 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 añadido a la caja de herramientas. Esos
controles le aparecerán 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. Además, cuando
realice una aplicación y la distribuya una vez compilada, Visual Basic entregará en los
disquetes de distribución las DLL’s u OCX’s 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 inútiles en el ordenador
destino de su aplicación. A la hora de compilar el programa (Crear archivo .EXE) quite todos
los controles personalizados que no necesite su aplicación. (Sólo 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 análoga, a lo que
hizo para meterlos en la caja de herramientas, pero al revés. 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 gráfica de su aplicación, sobre el que podrá añadir los controles que necesite. Lo
veremos mas adelante con todo detalle.
Puede tener dos ventanas más 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 Depuración.
Por cada formulario y cada control que introduzca en el proyecto, le aparecerá otra ventana,
denominada Ventana de código.
No se extrañe de que esta presentación gráfica del Visual Basic coincida con otros sistemas de
desarrollo (Delphi, p.e.). La lógica de desarrollo de una aplicación en Windows ha llevado a
varios fabricantes de software a utilizar un entorno gráfico similar (diríamos idéntico). 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
Código.
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 40
Fig. 1.3 Ventana de código
Esta figura le muestra un Formulario con su ventana de código. Cada objeto gráfico de VB
tiene su propia ventana de código. Así, si en este formulario hubiésemos introducido un Label y
dos CommandButton, todos ellos tendrían su propia ventana de código. La ventana de código
la podemos ver haciendo doble click sobre cualquier objeto de nuestro proyecto. En este caso
hemos hecho doble click sobre el único objeto que teníamos : el formulario.
Observe las dos cajas de la parte superior, uno con la inscripción Objeto : que en el momento
que le sacamos la foto tenía Form, y el otro con la inscripción Proc : (procedimiento), que en el
momento de la foto tenía 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 código de
ese objeto. Todos los objetos gráficos (controles) existentes dentro de un formulario y el propio
formulario aparecerán 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 código en
uno de los procedimientos, saldrá por defecto ese procedimiento para el cual hemos escrito el
código. Si no hay código en ninguno de los procedimientos, saldrá el que tenga por defecto
cada objeto.
Solamente nos queda por decir, para cerrar este capítulo, 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 gráfica, lo que le puede ocurrir a un objeto es que se le haga click,
doble click, que se pase el cursor del ratón 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 según nuestras necesidades, es decir, debemos escribir el código que necesite
nuestra aplicación 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 ningún efecto, basta con dejar sin código el procedimiento correspondiente
LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 41
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61
Vb61

Más contenido relacionado

La actualidad más candente

Programcion
ProgramcionProgramcion
Programcion
william79753
 
Curso Programacion C#
Curso Programacion C# Curso Programacion C#
Curso Programacion C#
Marlon Gomez Solis
 
Visual basic apesteguia
Visual basic apesteguiaVisual basic apesteguia
Visual basic apesteguia
tonytenorio2
 
Paola gonzalez fundamentos de visual basic
Paola gonzalez fundamentos de visual basicPaola gonzalez fundamentos de visual basic
Paola gonzalez fundamentos de visual basic
paolagonzalez326
 
Programacion
ProgramacionProgramacion
Programacion
AnaisCarbono
 
Delphi apesteguia
Delphi apesteguiaDelphi apesteguia
Delphi apesteguia
tonytenorio2
 
Visual basic yanelsy bello
Visual basic yanelsy belloVisual basic yanelsy bello
Visual basic yanelsy bello
Yanelsy Bello
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
Karly Lugo
 
Grupo 3 Vb, procedimientos, 1er programa
Grupo 3 Vb, procedimientos, 1er programaGrupo 3 Vb, procedimientos, 1er programa
Grupo 3 Vb, procedimientos, 1er programa
Leonardo Paul Lopez Zambrano
 
Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010
Wilberth Rojas Aguilar
 
Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basic
aristeo23
 
FUNDAMENTOS DE VISUAL BASIC
FUNDAMENTOS DE VISUAL BASICFUNDAMENTOS DE VISUAL BASIC
FUNDAMENTOS DE VISUAL BASIC
Benny Jose
 
Proyecto de informatica ii visual basic 2008
Proyecto de informatica ii visual basic 2008Proyecto de informatica ii visual basic 2008
Proyecto de informatica ii visual basic 2008
Julio Ayala Rolón
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
monty19
 
ventajas y desventajas de programas informaticos
ventajas y desventajas de programas informaticosventajas y desventajas de programas informaticos
ventajas y desventajas de programas informaticos
Irving Muñoz
 
Lenguaje de programacion de visual basic
Lenguaje de programacion de visual basicLenguaje de programacion de visual basic
Lenguaje de programacion de visual basic
Rosa Marina Mosquera
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación
Leonela Yuquilema
 

La actualidad más candente (17)

Programcion
ProgramcionProgramcion
Programcion
 
Curso Programacion C#
Curso Programacion C# Curso Programacion C#
Curso Programacion C#
 
Visual basic apesteguia
Visual basic apesteguiaVisual basic apesteguia
Visual basic apesteguia
 
Paola gonzalez fundamentos de visual basic
Paola gonzalez fundamentos de visual basicPaola gonzalez fundamentos de visual basic
Paola gonzalez fundamentos de visual basic
 
Programacion
ProgramacionProgramacion
Programacion
 
Delphi apesteguia
Delphi apesteguiaDelphi apesteguia
Delphi apesteguia
 
Visual basic yanelsy bello
Visual basic yanelsy belloVisual basic yanelsy bello
Visual basic yanelsy bello
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Grupo 3 Vb, procedimientos, 1er programa
Grupo 3 Vb, procedimientos, 1er programaGrupo 3 Vb, procedimientos, 1er programa
Grupo 3 Vb, procedimientos, 1er programa
 
Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010Curso.de.introducción.net.con.visual.basic.2010
Curso.de.introducción.net.con.visual.basic.2010
 
Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basic
 
FUNDAMENTOS DE VISUAL BASIC
FUNDAMENTOS DE VISUAL BASICFUNDAMENTOS DE VISUAL BASIC
FUNDAMENTOS DE VISUAL BASIC
 
Proyecto de informatica ii visual basic 2008
Proyecto de informatica ii visual basic 2008Proyecto de informatica ii visual basic 2008
Proyecto de informatica ii visual basic 2008
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
ventajas y desventajas de programas informaticos
ventajas y desventajas de programas informaticosventajas y desventajas de programas informaticos
ventajas y desventajas de programas informaticos
 
Lenguaje de programacion de visual basic
Lenguaje de programacion de visual basicLenguaje de programacion de visual basic
Lenguaje de programacion de visual basic
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación
 

Destacado

Jose Miguel Cotxes
Jose Miguel CotxesJose Miguel Cotxes
Jose Miguel Cotxes
Oscar Vaquero
 
PresentacióN De Activ. Del Iat
PresentacióN De Activ. Del IatPresentacióN De Activ. Del Iat
PresentacióN De Activ. Del Iat
José Noé Lerma Molina
 
10 comportamientos digitales
10 comportamientos digitales10 comportamientos digitales
10 comportamientos digitales
colpilar
 
Catalogo Productos Lindos para bebé
Catalogo Productos Lindos para bebéCatalogo Productos Lindos para bebé
Catalogo Productos Lindos para bebé
Upaep Online
 
Juego de la vida del gral pili y juli
Juego de la vida del gral pili y juliJuego de la vida del gral pili y juli
Juego de la vida del gral pili y juli
anitsuga66
 
Analisis primarias 2012
Analisis primarias 2012Analisis primarias 2012
Analisis primarias 2012
Yvan Serra
 
Estudio universidades sintesis
Estudio universidades sintesisEstudio universidades sintesis
Estudio universidades sintesis
Politécnico Colombiano Jaime isaza Cadavid
 
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...Politécnico Colombiano Jaime isaza Cadavid
 
Anorexia
AnorexiaAnorexia
Caza Ut14
Caza Ut14Caza Ut14
Caza Ut14
guest587d1c
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
0885
 
Calidad
CalidadCalidad
Calidad
akborgesa
 
07 estres
07 estres07 estres
07 estres
Joel Hernández
 
Alexis HernáNdez Que
Alexis HernáNdez QueAlexis HernáNdez Que
Alexis HernáNdez Que
guest52d488
 
PresentacióN Belkis
PresentacióN BelkisPresentacióN Belkis
PresentacióN Belkis
Belkisbalza1202
 
PlanificacióN Erock
PlanificacióN ErockPlanificacióN Erock
PlanificacióN Erock
emoreno200
 
100% damas gratis
100% damas gratis100% damas gratis
100% damas gratis
estefania
 
Manualfunciones
ManualfuncionesManualfunciones
Dise o de_sistemas_de_programas_o_software
Dise o de_sistemas_de_programas_o_softwareDise o de_sistemas_de_programas_o_software
Dise o de_sistemas_de_programas_o_software
juan odar lopez
 
Marc d' avaluació PISA 2006
Marc  d' avaluació PISA 2006Marc  d' avaluació PISA 2006
Marc d' avaluació PISA 2006guest8330f45
 

Destacado (20)

Jose Miguel Cotxes
Jose Miguel CotxesJose Miguel Cotxes
Jose Miguel Cotxes
 
PresentacióN De Activ. Del Iat
PresentacióN De Activ. Del IatPresentacióN De Activ. Del Iat
PresentacióN De Activ. Del Iat
 
10 comportamientos digitales
10 comportamientos digitales10 comportamientos digitales
10 comportamientos digitales
 
Catalogo Productos Lindos para bebé
Catalogo Productos Lindos para bebéCatalogo Productos Lindos para bebé
Catalogo Productos Lindos para bebé
 
Juego de la vida del gral pili y juli
Juego de la vida del gral pili y juliJuego de la vida del gral pili y juli
Juego de la vida del gral pili y juli
 
Analisis primarias 2012
Analisis primarias 2012Analisis primarias 2012
Analisis primarias 2012
 
Estudio universidades sintesis
Estudio universidades sintesisEstudio universidades sintesis
Estudio universidades sintesis
 
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...
Convocatoria vinculación docente Facultad de Educación Física, Recreación de ...
 
Anorexia
AnorexiaAnorexia
Anorexia
 
Caza Ut14
Caza Ut14Caza Ut14
Caza Ut14
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
 
Calidad
CalidadCalidad
Calidad
 
07 estres
07 estres07 estres
07 estres
 
Alexis HernáNdez Que
Alexis HernáNdez QueAlexis HernáNdez Que
Alexis HernáNdez Que
 
PresentacióN Belkis
PresentacióN BelkisPresentacióN Belkis
PresentacióN Belkis
 
PlanificacióN Erock
PlanificacióN ErockPlanificacióN Erock
PlanificacióN Erock
 
100% damas gratis
100% damas gratis100% damas gratis
100% damas gratis
 
Manualfunciones
ManualfuncionesManualfunciones
Manualfunciones
 
Dise o de_sistemas_de_programas_o_software
Dise o de_sistemas_de_programas_o_softwareDise o de_sistemas_de_programas_o_software
Dise o de_sistemas_de_programas_o_software
 
Marc d' avaluació PISA 2006
Marc  d' avaluació PISA 2006Marc  d' avaluació PISA 2006
Marc d' avaluació PISA 2006
 

Similar a Vb61

Historia de los Lenguajes de Programación
Historia de los Lenguajes de ProgramaciónHistoria de los Lenguajes de Programación
Historia de los Lenguajes de Programación
LILIANA06
 
VISUAL BASIC NET
VISUAL BASIC NETVISUAL BASIC NET
VISUAL BASIC NET
frank yordi tejada sanchez
 
Proyecto visual basic 2008 edition express.
Proyecto visual basic 2008 edition express.Proyecto visual basic 2008 edition express.
Proyecto visual basic 2008 edition express.
Julio Ayala Rolón
 
Mi lenguaje de programacion de preferencia carlos espasas 201330.36449
Mi lenguaje de programacion de preferencia  carlos espasas 201330.36449Mi lenguaje de programacion de preferencia  carlos espasas 201330.36449
Mi lenguaje de programacion de preferencia carlos espasas 201330.36449
123carlosr
 
Visual Basic como Lenguaje de Programación orientada a Objetos
Visual Basic como Lenguaje de Programación orientada a ObjetosVisual Basic como Lenguaje de Programación orientada a Objetos
Visual Basic como Lenguaje de Programación orientada a Objetos
lucinda
 
Fundamentos de Visual Basic.
Fundamentos de Visual Basic.  Fundamentos de Visual Basic.
Fundamentos de Visual Basic.
osnervisnavadiaz
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
margelis fernandez
 
Introduccion al Visual Basic subido JHS
Introduccion al Visual Basic subido JHSIntroduccion al Visual Basic subido JHS
Introduccion al Visual Basic subido JHS
johnny herrera
 
Fundamentos Básicos de Visual Basic
Fundamentos Básicos de Visual BasicFundamentos Básicos de Visual Basic
Fundamentos Básicos de Visual Basic
Irannys Moreno Morales
 
Jose campos PROGRAMACION 10%
Jose campos PROGRAMACION 10%Jose campos PROGRAMACION 10%
Jose campos PROGRAMACION 10%
josecampos270
 
Visual basic
Visual basicVisual basic
Visual basic
Luisa Kirsch
 
Programacion 5%
Programacion 5%Programacion 5%
Programacion 5%
Jhoanyeli Sanchez
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
angelisse6
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
angelisse6
 
Mi lenguaje de
Mi lenguaje deMi lenguaje de
Mi lenguaje de
jeanoneill
 
Fundamentos de visual basic 6.0 (trabajo de programacion)
Fundamentos de visual basic 6.0 (trabajo de programacion)Fundamentos de visual basic 6.0 (trabajo de programacion)
Fundamentos de visual basic 6.0 (trabajo de programacion)
luisguerra194
 
Programacion
ProgramacionProgramacion
Programacion
Otto Perez
 
Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)
Luis Enrique Arrieta
 
Programacion 10%
Programacion 10% Programacion 10%
Programacion 10%
PaolaMejias1
 
Capítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidadesCapítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidades
Julio Ayala Rolón
 

Similar a Vb61 (20)

Historia de los Lenguajes de Programación
Historia de los Lenguajes de ProgramaciónHistoria de los Lenguajes de Programación
Historia de los Lenguajes de Programación
 
VISUAL BASIC NET
VISUAL BASIC NETVISUAL BASIC NET
VISUAL BASIC NET
 
Proyecto visual basic 2008 edition express.
Proyecto visual basic 2008 edition express.Proyecto visual basic 2008 edition express.
Proyecto visual basic 2008 edition express.
 
Mi lenguaje de programacion de preferencia carlos espasas 201330.36449
Mi lenguaje de programacion de preferencia  carlos espasas 201330.36449Mi lenguaje de programacion de preferencia  carlos espasas 201330.36449
Mi lenguaje de programacion de preferencia carlos espasas 201330.36449
 
Visual Basic como Lenguaje de Programación orientada a Objetos
Visual Basic como Lenguaje de Programación orientada a ObjetosVisual Basic como Lenguaje de Programación orientada a Objetos
Visual Basic como Lenguaje de Programación orientada a Objetos
 
Fundamentos de Visual Basic.
Fundamentos de Visual Basic.  Fundamentos de Visual Basic.
Fundamentos de Visual Basic.
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Introduccion al Visual Basic subido JHS
Introduccion al Visual Basic subido JHSIntroduccion al Visual Basic subido JHS
Introduccion al Visual Basic subido JHS
 
Fundamentos Básicos de Visual Basic
Fundamentos Básicos de Visual BasicFundamentos Básicos de Visual Basic
Fundamentos Básicos de Visual Basic
 
Jose campos PROGRAMACION 10%
Jose campos PROGRAMACION 10%Jose campos PROGRAMACION 10%
Jose campos PROGRAMACION 10%
 
Visual basic
Visual basicVisual basic
Visual basic
 
Programacion 5%
Programacion 5%Programacion 5%
Programacion 5%
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Mi lenguaje de
Mi lenguaje deMi lenguaje de
Mi lenguaje de
 
Fundamentos de visual basic 6.0 (trabajo de programacion)
Fundamentos de visual basic 6.0 (trabajo de programacion)Fundamentos de visual basic 6.0 (trabajo de programacion)
Fundamentos de visual basic 6.0 (trabajo de programacion)
 
Programacion
ProgramacionProgramacion
Programacion
 
Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)
 
Programacion 10%
Programacion 10% Programacion 10%
Programacion 10%
 
Capítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidadesCapítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidades
 

Vb61

  • 1. Visual Basic - Guía del Estudiante Cap. 1 INTRODUCCION Antecedentes históricos. El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code ) nació en el año 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 inglés), y con instrucciones muy sencillas y escasas. Teniendo en cuenta el año de su nacimiento, este lenguaje cubría casi todas las necesidades para la ejecución de programas. Téngase en cuenta que las máquinas existentes en aquella época estaban estrenando los transistores como elementos de conmutación, los ciclos de trabajo llegaban a la impensable cifra de 10.000 por segundo y la memoria no pasaba de unos pocos k´s en toroides de ferrita. Los autores fueron los científicos John G. Kemeny (Budapest, 1926 – USA 1992) y Thomas E. Kurtz (Illinois 1928) Su trabajo original se llamó True BASIC. La evolución del BASIC por los años 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 creándose la normativa BASIC STANDARD Con la aparición de los primeros ordenadores personales, dedicados comercialmente al usuario particular, allá por la primera mitad de los ochenta, el BASIC resurgió como lenguaje de programación pensado para principiantes, y muchos de estos pequeños ordenadores domésticos lo usaban como único sistema operativo (Sinclair, Spectrum, Amstrad) Con la popularización 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 crédito entre los profesionales de la informática. Las razones para ello eran obvias: - No era un lenguaje estructurado. - No existían herramientas de compilación fiables. - No disponía de herramientas de intercambio de información. - No tenía librerías. - No se podía acceder al interior de la máquina. - Un largo etcétera de desventajas respecto a otros lenguajes de programación. Tal fue ese abandono por parte de los usuarios, que la aparición del Quick-BASIC de Microsoft, una versión ya potente del BASIC, que corregía casi todos los defectos de las versiones pasó prácticamente inadvertida, a no ser porque las últimas versiones del sistema operativo MS- DOS incluían una versión de Quick-BASIC algo recortada (Q-Basic) como un producto mas dentro de la amplia gama de ficheros ejecutables que acompañan 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 versión del popular BASIC ya es un lenguaje estructurado, lo que permite crear programas modularmente, mediante subrutinas y módulos, 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 gráfico Windows. Sin embargo algo había en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si LSB Visual Basic - Guía del Estudiante Capítulo 1 Página 1
  • 2. a esto se le añade el entorno gráfico Windows, el aprovechamiento al máximo de las posibilidades de Windows en cuanto a intercambio de información, de sus librerías, de sus drivers y controladores, manejo de bases de datos, etc. el producto resultante puede ser algo que satisfaga todas las necesidades de programación en el entorno Windows. La suma de todas estas cosas es VISUAL - BASIC. Esta herramienta conserva del BASIC de los años 80 únicamente su nombre y su sencillez, y tras su lanzamiento al mercado, la aceptación a nivel profesional hizo borrar por fin el "mal nombre" asociado a la palabra BASIC. Actualmente (2001) se está comercializando la versión 6.0 de este producto. Desde su salida al mercado, cada versión supera y mejora la anterior. Dados los buenos resultados a nivel profesional de este producto, y el apoyo prestado por el fabricante para la formación 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 máquina 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 programación. (Visual-C). o realizar librerías (DLLs) que lo hagan. En la mayor parte de las aplicaciones, las herramientas aportadas por VB son mas que suficiente para lograr un programa fácil de realizar y de altas prestaciones. Características Generales de Visual-Basic Visual-Basic es una herramienta de diseño de aplicaciones para Windows, en la que estas se desarrollan en una gran parte a partir del diseño de una interface gráfica. En una aplicación Visual Basic, el programa está formado por una parte de código puro, y otras partes asociadas a los objetos que forman la interface gráfica. Es por tanto un termino medio entre la programación tradicional, formada por una sucesión lineal de código estructurado, y la programación orientada a objetos. Combina ambas tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos tipos de programación, debemos inventar una palabra que la defina : PROGRAMACION VISUAL. La creación de un programa bajo Visual Basic lleva los siguientes pasos: Análisis . Es el studio de las necesidades que han dado origen a la creación de ese programa. Es lo que se se llama Análisis de la aplicación. Es la primera fase que debe tener siempre un programa y es tambien la más olvidada entre los programadores noveles. Una aplicación no se inicia con el teclado, sino sobre un papel. - Creación de un interface de usuario. Este interface será la principal vía de comunicación hombre máquina, tanto para salida de datos como para entrada. Será necesario partir de una o varias ventanas - Formularios - a las que le iremos añadiendo los controles necesarios. - Definición de las propiedades de los controles – Se dará la forma, posición, y todas las características necesarias a los controles que hayamos colocado en ese formulario. Estas propiedades determinarán la forma estática de los controles, es decir, como son los controles y para qué sirven. - Generación del código 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. - Generación del código del programa. Un programa puede hacerse solamente con LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 2
  • 3. la programación de los distintos procedimientos que acompañan a cada objeto. Sin embargo, VB ofrece la posibilidad de establecer un código de programa separado de estos eventos. Este código puede introducirse en unos bloques llamados Módulos, 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 ejecución del programa. No es necesario entender de momento lo anterior. Visual Basic introduce un concepto nuevo de programación, y es necesario cambiar hasta el argot del programador. Posiblemente se le habrán acumulado demasiados términos 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 – Guía del Estudiante Capítulo 1 Página 3
  • 4. VARIABLES. DEFINICION Y ENTORNO Basic, desde siempre, al contrario de otros sistemas de programación, no exigió la definición 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. Existirán varias variables para poder introducir los datos de los alumnos. Estas variables pueden tener nombre tales como: Nombre Apellido1 Apellido2 Dirección Teléfono Salario La variable Nombre tomará valores distintos según vayamos introduciendo los datos de los distintos alumnos. Es posible, que a lo largo de la ejecución del programa, esta variable Nombre valga: José Pedro María Luis Espero que su intuición o conocimiento anterior le lleve a conocer el concepto de variable. Mas adelante lo verá mas claro. Decíamos que Basic no exige la definición previa de las variables. Otras herramientas exigen que se haga así. Por lo tanto es normal encontrar, en otros sistemas de programación, que un programa comienza de la siguiente forma: Declare Nombre As String Le dice que Nombre es una sucesión de letras Declare Apellido1 As String Declare Apellido2 As String Declare Dirección As String Declare Teléfono As String Le dice que Teléfono es una sucesión de letras Declare Salario As Número Le dice que Salario es un número Mediante estas declaraciones, el programa sabe de que tipo de dato se trata y por tanto cómo debe trabajar con él. En otros sistemas de programación distintos de Basic, es necesario realizar esta declaración 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" Teléfono = "1234567" entiende que Salario, Nombre y Teléfono son variables, que Salario es un número (No hemos metido su valor entre comillas), y que Nombre y Teléfono son sucesiones de caracteres alfanuméricos (su valor está entre comillas) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 4
  • 5. Esta particularidad de no necesitar declarar las variables hace que sea sencillo introducir una variable nueva. Sin embargo entraña un gran peligro. Imagínese que en un paso posterior del programa, le mandamos escribir esos tres datos anteriores con la instrucción 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á ningún valor. Por lo tanto no escribirá nada y encima no dará ningún 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 instrucción 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 comunicación de error. Esta declaración debe ponerla al comienzo de la sección de declaraciones de cada formulario y módulo que contenga su aplicación. 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 declaración de variables. A partir de ahora, será VB quien ponga la sentencia Option Explicit en el lugar correcto. (Fig. 1.1) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 5
  • 6. TIPOS DE VARIABLES Las variables pueden ser de los siguientes tipos: (El número indicado en segundo lugar indica el número de Bytes que ocupa en memoria.) Booleana (2) Admite los valores 0 y 1, o True (verdadero) y False (falso) Byte (1) Números enteros, en el rango de 0 a 255 Integer (2) Números enteros en el rango de -32768 a 32767 Long (4) Números enteros en el rango de -2147483648 a 2147483647 Single (4) Punto flotante, simple precisión Doble (8) Punto flotante, doble precisión. Currency (8) Entero, con punto decimal fijo (Típico de monedas) String (*) Cadenas alfanuméricas 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 número de bytes que caracteres tenga la cadena. (**) Una variable tipo Variant ocupa 16 bytes si se trata de un número y 22 bytes + longitud de la cadena si se trata de un dato tipo cadena de caracteres. Existen también 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 citábamos 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 necesitaría (2) si la hubiésemos 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 ejecución 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 intención de que ocupen menos espacio. Paradoja del VB. Si la declaramos como Byte ocupamos menos espacio en memoria. Declarar una variable como Boolean tiene también sus ventajas (escribirá menos código por lo general cuando necesite leer o escribir una variable tipo Boolean), pero tenga presente esta observación respecto al tamaño de los datos Boolean. Puede declarar el tipo de la variable mediante un carácter después del nombre de la variable. Esta técnica, 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 – Guía del Estudiante Capítulo 1 Página 6
  • 7. Ejemplos Prácticos de declaración de variables En Visual Basic, cuando declaramos una variable como String (Cadena de caracteres), no es necesario declarar su longitud. VB aceptará cualquier número de caracteres. Si desea evitar que se puedan introducir más de un determinado número de caracteres, debe declarar su número. Por ejemplo : Dim Var1 as String Var1 puede tener cualquier número de caracteres Dim Var2 as String * 15 Var2 puede tener un máximo 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 ningún 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 código oportuno para producir el aviso. La declaración de variables tipo String con número de caracteres predefinido presenta también inconvenientes a la hora de tratar esa cadena de caracteres con sentencias tales como Mid, Left y Right, o a la hora de añadir una cadena a otra. La experiencia nos indica que NO merece la pena declarar variables tipo String con el número 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 números debe declararse como una variable de cadena de caracteres (String), y no como numérica. Cuando pensamos por ejemplo en un número de DNI, compuesto por 7 u 8 cifras, un código postal, el número de una calle, el piso de un edificio, parecen invitar a que la variable que los contenga sea una variable de tipo numérico (Byte, Integer, Long, ...). Estas variables, aunque su contenido sean números, siempre se deben declarar como String, ya que se tratan en realidad de cadenas de caracteres, aunque estos no sean letras sino números. Para aclarar mas estas ideas, piense en el número del DNI con la letra del NIF incluido, o que el lugar del DNI se deba rellenar con el número del permiso de residencia, (lleva letras). Piense en el código postal de una provincia que comienza por 0 ( 08XXX = Barcelona ) . Si la variable que va a contener ese código postal se declara como numérica, el cero de la izquierda lo desprecia, por lo que ese código postal quedaría reducido al 8XXX, número de 4 cifras que el cartero nunca reconocería como un código postal, que necesariamente ha de tener 5 cifras. Para terminar, piense la forma de introducir en una variable numérica el número 32Bis de una calle o el piso S2 de un edificio. O piense en una variable que va a contener un código de un producto. Ese código siempre va a ser un número, por ejemplo de 9 cifras. ¿Ha pensado como trataría el ordenador una variable numérica que contiene el código 000100123 ?. El resultado sería que convertiría ese código en la cifra 100123, y Vd. deberá buscarse la vida para añadir los ceros iniciales a la hora de sacarlo a una impresora, por ejemplo. En todos los casos anteriores, el número no representa una cantidad numérica, sino un nombre. Lo que ocurre es que ese nombre contiene solamente números. ¿Qué variables debemos declarar entonces como numéricas ? La respuesta es bien sencilla : Aquellas que van a contener datos con lo que vamos a realizar operaciones matemáticas. 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 números mayores de 255 ni números negativos. Cada vez que declare una variable numérica piense en los valores que puede tener, sobre todo cuando esa variable va a ser el resultado de una operación matemática. Recuerde el escaso LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 7
  • 8. margen de una variable tipo Integer ( de -32768 a 32767) Si la aplicación va a tratar moneda, piense en la forma de expresar los números decimales y el número de ellos permitidos, así como el redondeo. La variable correcta para este caso es Currency, pero Currency le añade automáticamente el tipo de moneda de cada país (Pts. Para España) 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 extrañe si le expresa el número de pesetas en dólares. Cambie el país 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 habíamos llamado Procedimientos. Podemos tener procedimientos que no estén relacionados con ningún evento ocurrido al formulario o a sus controles. (Los Procedimientos que iremos insertando a lo largo de la aplicación) Aparte de formularios y controles, un programa puede tener Módulos, y en cada uno de los módulos podemos insertar cuantos Procedimientos y Funciones queramos. La estructura de un programa VB puede ser de la siguiente forma: Formulario1 Formulario2 Formulario3 Módulo1 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 FunciónE1 Proc. A4 Proc.B4 Proc.C4 Proc.D4 FunciónE2 Proc. A5 Proc.BB1 Proc.CC1 FunciónE3 Proc. AA1 Proc.BB2 Proc.CC2 FunciónE4 Proc. AA2 Proc.B33 Proc.CC3 FunciónE5 Proc. AA3 Proc.CC4 FunciónE6 Si se declara una variable dentro de un procedimiento o Función, esa variable "NO SALE" del Procedimiento o Función donde se declaró. El procedimiento puede estar en un Formulario (Cualquier procedimiento de un control o un procedimiento creado por nosotros) o en un Módulo (En este caso, el procedimiento solo puede ser creado por nosotros) En un Formulario, una variable puede declararse de dos formas : Privada o Pública. Para declarar una variable a nivel de formulario debe hacerse en la sección de declaraciones, que está la ventana de código 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 pudiésemos insertar en ese formulario), pero no sale de dicho formulario. Si se declara como Pública, esa variable puede verse por todo el formulario, de la misma forma que lo haría declarada como Privada, y además puede ser usada desde otro Formulario o Módulo, citándola con el nombre del Formulario, seguido del nombre de la variable (Formulario.Variable) En un Módulo una variable puede declararse como Privada, con lo que no saldrá de ese LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 8
  • 9. Módulo, o Pública, pudiendo en este caso usarse en todo el programa. Cuando se declara una variable como pública en un Módulo, basta referirse a ella por su nombre, sin citar el nombre del Módulo 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á válida 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 declararía por segunda vez. A esta nota cabe exceptuar cuando declaramos variables para una operación tipo contador For I = 1 To N Esa variable I es práctico declararla con el mismo nombre en cada Procedimiento donde se use. Tipos de declaración de variables. Sentencia DIM Es la forma mas común de declarar una variable como Privada. Puede emplearse en un Procedimiento, Función, Formulario o Módulo. 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, Función, procedimiento o módulo, el ámbito de la variable será el explicado anteriormente para una variable declarada como Privada. Es decir, esa variable no sale del formulario, procedimiento ó módulo donde se declaró. Cada vez que entremos al formulario, procedimiento o módulo, esa variable tomará el valor cero (si es numérica) o nulo (si es string). Sentencia PRIVATE Es la forma de declarar una variable como Privada. Puede emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma: Private nombrevariable As Tipovariable Declarando una variable mediante la sentencia PRIVATE en un Formulario o Módulo, esa variable puede usarse en todo ese Formulario o Módulo (En todos sus Procedimientos y Funciones), pero NO fuera del Formulario o Módulo donde se declaró. La sentencia Private no puede usarse en un procedimiento o función. Sentencia PUBLIC Es la forma de declarar una variable como Pública. Puede emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma: Public nombrevariable As Tipovariable LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 9
  • 10. Declarando una variable de esta forma en la sección de declaraciones de un Módulo, esa variable puede usarse en cualquier parte del programa citándola simplemente por su nombre. Si se declara de esta forma en la sección 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 Módulo puede usarse también la sentencia Global en vez de Public : Sentencia GLOBAL Declara una variable que es válida en todo el programa. La sintaxis es: Global nombrevariable As tipovariable La sentencia Global sólo puede usarse en el apartado de declaraciones de un Módulo. 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 solución. Si declarásemos una variable en un procedimiento o función, como estática, esa variable, aunque no la podremos utilizar fuera de ese procedimiento o función, cuando volvamos a él conservará el valor que tenía cuando lo abandonamos. Esta declaración como estática se realiza mediante la instrucción Static Static nombrevariable As tipovariable El nombre de una variable puede ser tan largo como queramos. hasta un máximo de 40 caracteres. En la versión VB para España se pueden usar incluso la Ñ y vocales acentuadas. Es indiferente usar mayúscula ó minúsculas. No se sorprenda, si por ejemplo, la ha declarado con mayúsculas y luego la cita con minúsculas al escribir el código, que automáticamente se cambie a mayúsculas. 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 algún 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 – Guía del Estudiante Capítulo 1 Página 10
  • 11. En un Formulario (En su sección de declaraciones) Como Privada (Solamente se puede usar en ese Formulario) Dim Variable As Tipovariable ó Private Variable As Tipovariable Como Pública (Puede usarse en toda la aplicación) Public Variable As Tipovariable En un Módulo Como Privada (Solamente puede usarse en ese Módulo) Dim Variable As Tipovariable ó Private Variable As Tipovariable Como Pública (Puede usarse en toda la aplicación) Public Variable As Tipovariable ó Global Variable As Tipovariable Error típico 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 línea : Dim Variable1, Variable2, Variable3, Variable4 As String Esta declaración 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 línea, es la siguiente : Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 As String. Forma de conocer el tipo de una variable. Función TypeName Podemos conocer el tipo con el que se ha declarado una variable. Esto se hace mediante la Función TypeName, que devuelve una cadena con el tipo de una variable. MiTipo = TypeName(NombreVariable) NombreVariable puede ser cualquier variable con excepción 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 – Guía del Estudiante Capítulo 1 Página 11
  • 12. Largo Un entero largo. Simple Un número de punto flotante de precisión simple. Doble Un número de punto flotante de precisión 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 válidos. Objeto Un objeto que no respalda Automatización OLE. Desconocido Un objeto de Automatización 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 paréntesis vacío 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 botón de comando (CommandButton) y tres etiquetas (Label). El botón 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 línea 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, tecléela. 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 botón de comando. Le aparecerá la ventana anterior, pero referida ahora al Command1. Teclee el siguiente código : 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 función tiene mucha utilidad para determinar errores durante el diseño. 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 – Guía del Estudiante Capítulo 1 Página 12
  • 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 añadido otras nuevas instrucciones, inherentes con la programación 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 condición. Son las sentencias por las que empieza cualquier texto de Basic, y este no va ser menos. La sentencia condicional más usada es: Si se cumple una condición Entonces Realiza estas instrucciones Si no se cumple Realiza estas otras instrucciones Fin de la sentencia. Así de fácil es programar en Basic. Lo que ocurre es que esta herramienta habla inglés, y lo descrito anteriormente toma la forma: If condición Then Instrucciones Else Otras instrucciones End If En este ejemplo, o se cumple una condición 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 tendría entonces la forma: If condición 1 Then Instrucciones ElseIf Condición 2 Otras instrucciones ElseIf Condición 3 Otro juego de instrucciones Else Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3. End If Como decíamos 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 – Guía del Estudiante Capítulo 1 Página 13
  • 14. 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 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 rápido que las sentencias If Then Else vistas anteriormente, cuando el margen de elección es mayor que 2. Puede agrupar varios valores en una misma línea. 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 hacíamos anteriormente, disponemos de otras dos funciones: Choose y Switch. Switch toma una serie de parámetros, todos por parejas. El primer término de cada pareja es la expresión a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es una función (las funciones las veremos muy pronto) A = Switch (B=1, 5, B=2, 7, B=3, 11) Esta instrucción 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 intrucción 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 habían establecido (1, 2 ó 3 en nuestro caso), la sentencia devuelve el valor Nulo ( Null ). Esto puede producir algún error si no se contempla esa posibilidad. Las sentencias Switch y Choose no se usan mucho en programación. Parece que los programadores o no las conocen o se lían (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 – Guía del Estudiante Capítulo 1 Página 14
  • 15. Otra sentencia condicional: IIF Devuelve uno de entre dos valores, dependiendo de la evaluación de una expresión. Sintaxis Iif (Expresión, SiEsCierto, SiEsFalso) Expresión es la expresión a evaluar. SiEsCierto Valor o expresión devuelta si Expresión es True. SiEsFalso Valor o expresión devuelta si Expresión es False. Observaciones IIf siempre evalúa SiEsCierto y SiEsFalso, aunque sólo vaya a devolver una de ellas. Por esta razón, deberá vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar SiEsFalso se produce un error de división entre cero, se generará un error aunque Expresión dé como resultado True. Como ejemplo, en el formulario de nuestro primer programa introduzca un nuevo botón de comando. Introduzca también un TextBox. Vea que poco a poco vamos metiendo cosas aunque no las conocemos todavía. Mas tarde las conocerá. El TextBox tendrá por nombre Text1. Haga doble click sobre el botón de comando e introduzca el siguiente código : 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 numérico en Text1. Si ese valor numérico es menor que 100, MiVariable tomará el valor “Es menor” (No se cumple la condición expresada en el primer parámetro Text1.Text > 1000). Si introduce una cantidad mayor, se cumple esa condición, por lo que MiVariable tomará el valor “Es mayor”. El valor que toma la variable puede verlo en Label1. Fíjese 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 común utilizar bucles a lo largo de un programa. Un bucle es una sucesión repetitiva de instrucciones, que se estarán realizando mientras se cumpla una condición o mientras no se cumpla otra condición. Es tan sencillo como esto: Mientras condición Instrucciones Fin del bucle Existen dos formas de bucle: Una, que realiza un número 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 condición. Es el llamado bucle por condición. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 15
  • 16. Bucle por contador Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a presentar las 26 letras mayúsculas del alfabeto inglés For N=65 To 90 Label1.caption = Chr ( N ) Next N Este "programa" nos presentará en una caja (Label) los caracteres cuyo número ASCII vaya desde el 65 (A) al 90 (Z) Comenzará presentando el correspondiente al número 65, e irá presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parará. Bucles por condición Ejecuta las instrucciones del bucle mientras se cumple una condición 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 también de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como final de lección, se propone un problema. Con el primer bucle, donde visualizábamos 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 cambiaría con mucha velocidad, y solamente veríamos 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 condición, la sentencia será: X = 0 Do Until X > 1000 X = X + 1 Loop Observe que la diferencia entre una y otra es la condición, While para indicar Mientras se cumpla que ... y Until para indicar Mientras no se cumpla que .... Para terminar bien el programa anterior utilizaremos la condición de While (Mientras se cumpla la condición) 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 – Guía del Estudiante Capítulo 1 Página 16
  • 17. Este es nuestro primer programa en BASIC. En VISUAL BASIC es idéntico, pero nos falta la interface gráfica. 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 código anterior. Podemos introducir un botón de comando (Command Button) que saldrá con el nombre por defecto de Command1. Haga doble click sobre el botón. Aparecerá el procedimiento Click. Este procedimiento es el que se realiza cuando hacemos click sobre ese botón. Escriba en ese procedimiento este código. Private Sub Command1_Click() ' Esta línea sale automáticamente For N=65 To 90 Label1.caption = Chr ( N ) Label1.RefreshN ' Refresca la etiqueta X = 0 Do While X < 1000 ' Bucle de temporización (*) X = X + 1 Loop Next N ' Termina el bucle de temporización End Sub ' Esta línea sale automáticamente 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 estaría detenido realizando una función bastante triste, contar hasta 1000 para luego continuar el programa. Y lo que es peor, en un ordenador a 300 MHz. Tardaría menos tiempo que en uno a 66. Esta misma función puede hacerla con Sleep que la verá mas adelante, que es la forma limpia y elegante de hacer una temporización Formas de salir de un bucle Para salir de un bucle, podemos esperar a que se complete, bien porque se ha cumplido la condición (Bucles por condición) 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 ejecución total del mismo, por ejemplo, porque ya hemos encontrado lo que estabamos buscando, y sería una pérdida 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 través del puerto serie. (Cuando se conecte, el control MSComm1 detectará la señal DSR que le envía 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 – Guía del Estudiante Capítulo 1 Página 17
  • 18. En el siguiente ejemplo, deseamos transmitir por el puerto serie una serie de números, del 1 al 1000, pero siempre y cuando que el equipo que está al otro lado de la línea serie esté a la escucha (Condición MSComm1.DSRHolding = True) Si se desconecta ese equipo, y la condición 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 capítulos mas adelante. Lo importante es que entienda la idea de salir de un bucle por la vía rápida. Función DoEvents Si hablameos de bucles, necesariamente debemos hablar de la función DoEvents. Y es así por la misma razón que cada vez que ponemos un bucle, deberíamos poner dentro de ese bucle la palabra mágica DoEvents. Imagínese que Visual Basic está ejecutando este código: 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 además no podrá atender a otros eventos que se produzcan en el ordenador (por ejemplo la pulsación 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 ejecución mediante las teclas Ctrl – Pausa. No podrá pararlo mediante el botón Terminar de la barra de herramientas de VB. En un programa compilado posiblemente tenga que reiniciar el equipo mediante Alt – Ctrl – Sup, llevándose por delante el resto de los programas que se estén ejecutando en ese momento en su PC. No es difícil 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 instrucción DoEvents. Cuando VB encuentra esta función el control del microprocesador al sistema operativo, y si hay alguna operación en espera (la pulsación 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 están ejecutando al mismo tiempo. El bucle tomaría 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 ejecución Y ya que explicamos como se sale de un bucle por la vía rápida, veamos como salir de un procedimiento usando también esa “vía rápida”. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 18
  • 19. Para salir de un procedimiento basta con ejecutar la sentencia Exit Sub. En el ejemplo siguiente, usamos el botón BotonLeerNombre para introducir el dato Nombre en una base de datos. Pero ese campo puede tener como máximo, 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 máximo 20 caracteres" Text1.Text = "" Exit Sub ‘Con esta instrucción saldríamos de este procedimiento Else 'Aqui vendrían las lineas de instrucciones donde trataríamos 'el contenido de Text1, si tuviese menos de 20 caracteres End If End Sub NOTA. Los ejemplos anteriores sirven solamente de ilustración para explicar el código que estamos estudiando. No pretenda ver una forma mejor de realizar la misma función, que seguro que existe. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 19
  • 20. BASIC DE VISUAL BASIC ( y 2 ) Funciones de cadena Se denomina CADENA a una sucesión de caracteres. Una cadena puede tener uno o varios caracteres alfanuméricos. Una cadena es también una sucesión de números. Ejemplo de cadenas: Curso de Visual Basic abcdefghijklmnopqrstuvwxyz1234567890 123456789 Hagamos una distinción entre una cadena que contenga números y un número. Un número tiene un valor, pero también tiene una presentación escrita. El valor es algo que estará en el ordenador como una sucesión de bits. Dependiendo de como lo hayamos declarado, tendrá mas o menos bits. Pero esa información no es un número legible por el usuario. Lo que sí es legible por el usuario es la representación en numeración decimal (u octal, o hexadecimal, o incluso en binario) de ese número. Esa representación del número en un determinado sistema de numeración es una cadena. Así, el número nueve, que en la memoria del ordenador será una sucesión de bits, nos lo podrá presentar como: 9 En numeración decimal 9 En numeración hexadecimal 11 En numeración octal 1001 En numeración binaria Esas formas de presentarnos el número son CADENAS de caracteres. El valor del número dentro del ordenador es un NUMERO. Para presentar un número en la pantalla, el ordenador debe convertirlo previamente a una cadena. Cuando introducimos un valor numérico por teclado o pantalla, el ordenador para hacer operaciones con él, debe transformarlo a un número. Estas consideraciones nos llevan a las dos primeras funciones con cadenas: Str (número) Convierte un número a una cadena en numeración decimal. Val (cadena numérica) Obtiene el valor (el número) correspondiente a esa cadena. Ejemplos Variablenumerica = Val (TextBox1.Text) Este ejemplo convierte la cadena de caracteres (numéricos) que hubiese en la caja de texto TextBox1 en un número, y asocia este número a la variable Variablenumerica. Si el contenido de la caja de textos no fuesen caracteres numérico (abcd, por ejemplo), Variablenumerica tomaría el valor 0. Label1.Caption = Str (Variablenumerica) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 20
  • 21. Este ejemplo pondría en la etiqueta Label1 los caracteres correspondientes al valor que tuviese la variable Variablenumerica . Nota para recordar: Siempre habrá que convertir un número a una cadena cuando queramos presentarlo en la pantalla. Siempre habrá que convertir a número la cadena de caracteres numéricos que hayamos introducido por teclado o por pantalla, cuando queramos operar con ese número. Un Label, cuando tiene que presentar un único número, no le pedirá que se lo convierta a cadena, pues VB hace automáticamente esa conversión. Sin embargo, cuando tiene que presentar un número, y además un texto en el mismo Label, VB no realizará automáticamente ese cambio, por lo que le dará un error. Le recomiendo que convierta los números a variables de cadena siempre que los quiera presentar en un Label o TextBox. Cuando tenga mas experiencia en VB verá que esta observación estará un poco de más. Pero de momento, convierta cada dato según lo vaya a necesitar. Existe una función mas amplia que Str. Se trata de Cstr. Esta función no solamente transforma un número a una cadena, como hace Str, sino que convierte cualquier tipo de variable a una variable tipo String (cadena). Esta función 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 también 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 colección 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 carácter extraído el que ocupa el lugar m. (Vea Instrucción Mid mas abajo) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 21
  • 22. Resultado = Mid (cadena, 3, 10) ----> Resultado = rso de Vis LCase (cadena) Devuelve otra cadena igual, pero con todos los caracteres en minúsculas. (LCase = Lower Case) Resultado = Lcase (cadena) ----> Resultado = curso de visual basic UCase (cadena) Devuelve otra cadena igual, pero con todos los caracteres en mayúsculas. (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 número de Bytes empleados para almacenar la cadena. Sorpréndase, es el doble que Len (Cadena) String (n, carácter) 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 función Trim hay que usarla cada vez que convertimos un número a cadena de caracteres. Cuando usamos Str(Número), la función 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 ningún ejemplo de estas funciones, pues sería difícil verlo impreso. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 22
  • 23. InStr (cadena, cadena1) Busca la cadena1 dentro de cadena y devuelve el número 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, según las instrucciones que le sigan. Puede sustituir a UCase o LCase si la instrucción es UpperCase o LowerCase respectivamente, o poner la primera letra de todas las palabras de la cadena en mayúsculas, si la instrucción 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 Instrucción Mid Mid puede usarse también para cambiar el contenido de una cadena. Observe la sutileza entre Mid como Función de cadena y Mid como Instrucción. La Instrucción Mid reemplaza un número 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 más 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 número ASCII de un carácter, y para, sabiendo el número ASCII, hallar el carácter correspondiente. Función Asc Devuelve el código de carácter correspondiente a la primera letra de una cadena de caracteres. Sintaxis MiVariable = Asc (Cadena) Cadena es cualquier expresión de cadena válida. Si la cadena no contiene caracteres, ocurrirá un error en tiempo de ejecución. Ejemplo : Label1 = Asc (“ABCD”) Label1 presentará 65 Nota Hay otra función (AscB) que puede usarse con bytes contenidos en una cadena. En lugar de devolver el código del carácter para el primer carácter, AscB devuelve el primer byte. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 23
  • 24. Función Chr Devuelve el carácter asociado con el código de carácter especificado. Sintaxis Chr (CódigoCarácter) El argumento CódigoCarácter es un número en el intervalo de 0 a 255, inclusive, que identifica a un carácter. Ejemplo Label1 = Chr (65) Label1 contendrá el carácter A Como ejemplos de números de caracteres algo especiales se debe señalar el carácter 10 (avance de línea) y el carácter 13 (Retroceso de carro). La tecla ENTER produce ambos caracteres cada vez que se pulsa. Otros caracteres importantes son, el Backspace (carácter 8), y el espacio (carácter 32) Nota Se proporciona otra función (ChrB) para su uso con datos de byte incluidos en una cadena. En lugar de devolver un carácter, que puede ser de uno o de dos bytes, ChrB siempre devuelve un solo byte. FUNCIONES CON NUMEROS _________________________ Visual Basic puede operar con números tal como lo haría cualquier persona. Conoce las 4 reglas, y puede utilizar paréntesis de la misma forma que los escribimos sobre el papel. Los operadores que utiliza para las operaciones básicas son: + Suma - Resta * Multiplicación / División División sin decimales Mod Resto de una división ^ 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 aritméticos. Existen otras operaciones que se pueden realizar con números: 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 – Guía del Estudiante Capítulo 1 Página 24
  • 25. = 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 decisión. El operador = puede usarse también para comparar cadenas o fechas. Operadores Lógicos Estos operadores podemos usarlos con variables Booleanas, es decir, aquellas que solamente pueden tomar los valores cero y uno, y con caracteres (un carácter = 1 Byte = 8 bits) realizando la operación correspondiente bit a bit con los 8 bits de cada carácter. Pero en este caso, los parámetros deben introducirse en decimal. Por ejemplo, si quiere realizar la función And entre el carácter 15 (00001111) y el 131 (10000011) , debe ponerlo de la forma Resultado = 15 And 132. El resultado de esta operación 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 números Int , FixDevuelven la parte entera de un número con decimales Int y Fix eliminan la fracción de un número y devuelven el valor entero resultante. La diferencia entre Int y Fix es que si el número es negativo, Int devuelve el primer entero negativo menor o igual a número, mientras que Fix devuelve el primer entero negativo mayor o igual a número. Por ejemplo, Int convierte -8,4 en -9, y Fix convierte -8,4 en -8. Abs Devuelve el valor absoluto de un número Sgn Devuelve el signo de un número Sqr Devuelve la raíz cuadrada de un número Exp Devuelve el número elevado al exponente LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 25
  • 26. indicado Log Devuelve el logaritmo natural de ese número Trigonométricas 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 número (Angulo en radianes) Funciones para el Cambio de Base de Numeración Función Hex Devuelve una cadena, es decir, un string, que representa el valor hexadecimal de un número. Sintaxis VariabledeCadena = Hex (número) Si número no es un número entero, se redondea al número entero más cercano antes de ser evaluado. Mediante esta función se puede convertir un número de hasta ocho caracteres hexadecimales. Se pueden representar números hexadecimales directamente, anteponiendo &H. Por ejemplo, &H10 representa al decimal 16 en la notación hexadecimal. Función Oct Devuelve la cadena (String) que representa el valor octal de un número. Sintaxis VariabledeCadena = Oct (número) Si número no es entero, se redondea al número entero más cercano antes de ser evaluado. Puede realizarse la conversión hasta el valor de 11 caracteres octales. Se pueden representar números octales directamente, anteponiendo &O a números en el intervalo apropiado. Por ejemplo, &O10 representa a 8 en base diez en la notación octal. Recuerde que estas dos funciones devuelven una Cadena de caracteres, no un número. El resultado deberá tratarlo como una cadena de caracteres. Funciones Cxxx para conversión del tipo de datos. Son un tipo de funciones que convierten un dato o expresión a un tipo de datos determinado Función Cbool Convierte una expresión al tipo de datos Boolean. Sintaxis VariableBooleana = Cbool (expresión) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 26
  • 27. El argumento expresión es cualquier expresión numérica o expresión de cadena válida. Si expresión es cero, se devuelve False; de lo contrario, se devuelve True Si la expresión no se puede interpretar como un valor numérico, ocurrirá un error de tiempo de ejecución. Función CByte Convierte una expresión al tipo de datos Byte. Función CCur Convierte una expresión al tipo de datos Currency. (Moneda) Función 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 número. Cuando la parte fraccionaria es exactamente 0,5, la función CLng siempre la redondea al número par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2. Función 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 número. Cuando la parte fraccionaria es exactamente 0,5, la función CInt siempre la redondea al número par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2. Función CDbl Convierte una expresión al tipo de datos Double. Función CSng Convierte una expresión a un tipo de datos Single. Debe usar las función 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 configuración de la información local de su PC. Si la expresión a convertir queda fuera del intervalo aceptable para el tipo de datos a obtener, ocurrirá un error. Función CStr Convierte una expresión a un tipo de datos String. Debe usar la función 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 configuración de la información 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 ejecución. Empty String de longitud cero (""). Error String conteniendo la palabra Error seguida del número de error. Numérico String conteniendo el número. Función Cvar Convierte una expresión a un tipo de datos Variant. Función Cdate Convierte una expresión 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 operación entre LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 27
  • 28. números, 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 números 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 operación es que da un error, pues no entiende que sumando varios Byte (números comprendidos entre 0 y 255) puedan dar un número de otro tipo. Dará seguramente el error 6, Overflow. Para que esto no suceda, haremos el truco de convertir el primero de los números que forman parte en la operación matemática a un Long, y de esta forma, VB ya se da cuenta que el resultado de esa operación es un Long: Suma = CLng(I1) + I2 + I3 + I4 + I5 Tenga en cuenta esa observación inicial que NO ocurre en todas las ocasiones. (Y me parece que era un fallo de los muchos que tenía VB5) Otras Funciones Una función curiosa Timer Tiempo acumulado Devuelve el tiempo (en segundos) que ha pasado desde las 12 de la noche. Generación de números 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 números aleatorios generados de esta forma son siempre iguales, eso sí, dependiendo del número que se le introduzca como parámetro. Esta generación de números no produce números aleatorios pues como se dijo, dependen del numero que se meta como parámetro, y si este se repite, se repite la sucesión de números que nos crea el generador aleatorio. (Afortunadamente lo han corregido en la versión 6) La forma de obtener números realmente aleatorios es introducir como parámetro un número que sea variable con el tiempo. Ese número no puede ser otro que el número timer visto antes. Y siempre con la precaución de que medie mas de un segundo entre dos instrucciones Randomize. La función toma entonces la forma: Randomize Timer La función Randomize devuelve una variable Rnd con un número comprendido entre 0 y 1 (Nunca será 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una sucesión de números aleatorios. No es necesario ejecutar la instrucción Randomize Timer cada vez que se quiera obtener un dato de la variable Rnd. Un ejemplo. Generador de números para la Lotería Primitiva Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botón de comando de nombre Command1. Cuando hagamos click sobre el botón de comando deberá generar un número comprendido entre el 1 y el 49. En el procedimiento click de Command1 pondremos el siguiente código: LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 28
  • 29. 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 pequeño programa, con la instrucción Randomize Timer y sin ella. Funciones con fechas. Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la información relativa a la fecha y la hora. Dispone para ello de una declaración 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 día de la semana (En número, 1=Domingo, 2=Lunes,...) Day Obtiene el día, a partir de una fecha Month Obtiene el mes a partir de una fecha. Year Obtiene el año 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 Añade 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 parámetros relativos TimeSerial Compone una hora a partir de parámetros relativos. DateValue Devuelve una fecha a partir de un dato que se le parezca y VB pueda obtener de él una fecha válida Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Por LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 29
  • 30. ejemplo, para obtener el día de hoy solamente: Día = Day (Now) Día será un número El día de la semana lo obtendríamos Diasemana = WeekDay (Now) Diasemana será un número DateValue, una instrucción que le sacará mucho provecho Fecha = DateValue (12-07-96) Fecha = DateValue (12 07 96) Fecha =12/07/96 La función DatePart merece estudio aparte. Con esta función podemos averiguar el mes, trimestre, semana, día del año, etc. La sintaxis de esta función es : VariableNumérica = DatePart (Intervalo, fecha[, primerdíasemana[, primerasemanaaño]]) Valor para Intervalo Obtendremos el q Trimestre m Mes y Día del año d Día w Día de la semana ww Semana h Hora n Minuto s Segundo El parámetro Primerdíasemana puede ser un número 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 día es para nosotros el primero de la semana Constante Número Primer día de la semana vbSunday 1 Domingo (predeterminado) vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado Para el parámetro primerasemanaaño podemos emplear uno de los siguientes números o constantes: Constante Valor Descripción 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 días en el año nuevo. (Standard ISO 8086) vbFirstFullWeek3 Empieza con la primera semana contenida completamente en el año nuevo. Por ejemplo, y tomando como referencia para todos los ejemplos el día 22 de Septiembre de LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 30
  • 31. 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 día de la semana era el domingo - Predeterminado) variable = DatePart ("w", Now, vbMonday) Variable = 2 (Primer día semana = lunes) variable = DatePart ("ww", Now, vbMonday, vbFirstFourDays) Variable = 39, que indica el número de la semana dentro del año. Cuidado con como se escriben las fechas. Una posibilidad es la usada en los ejemplos, pero solamente vale para el día de hoy. Puede expresar la fecha metiéndola entre dos signos #, pero en ese caso debe estar expresada en el formato mm/dd/yy (mes/día/año). Ejemplo : variable = DatePart("ww", #9/22/98#, vbMonday, vbFirstFourDays) Pero lo mas fácil para el formato de fecha usado en España es meter la fecha entre comillas dobles, y usar el formato especificado para el país : variable = DatePart("ww", "22/9/98", vbMonday, vbFirstFourDays) Con las comillas dobles puede incluso no poner el año. En este caso le pone por defecto, el año en curso. variable = DatePart("ww", "22/9", vbMonday, vbFirstFourDays) Estas tres formas de expresar la fecha funcionan perfectamente, al igual que cuando lo hacíamos con Now, y el resultado sigue siendo 39. Nota para recordar de las variables tipo Date (No se extrañe que esta explicación la encuentre solamente en esta Guía del Estudiante) Visual Basic trata las fechas como números. Y precisamente como un número Double. Emplea por lo tanto 8 bytes para representar una fecha. Por ejemplo, al día 12 de Julio de 1999, (Fecha en la que el autor de este libro alcanzó la respetable edad de #9 años) le corresponde el valor de 36563. Ese es el número de días transcurridos desde el origen de tiempos tomado por VB (Y por muchas otras aplicaciones de Microsoft y de otras marcas) hasta ese fatídico día. ¿ Cual es ese origen del tiempo? El 30 diciembre 1899. ¿Que porqué ese día?. No lo sé. Pero es fácil intuir que motivos prácticos para que cualquier fecha del siglo XX tuviese un número positivo. Porque las anteriores a ese día las trata como números negativos. Por ejemplo, el día 12 de Octubre de 1492, VB lo trata como el día número - 148.732. Ese numero puede conocerlo utilizando la función CDbl sobre una variable tipo Date. Puede verlo en el ejercicio Cap12 del disco. Una hora también es una variable tipo Date. Y una composición Día / Hora también. ¿Que como trata los minutos dentro de una variable Date? Pues como decimales de ese número Double. Por ejemplo, la hora 12:00:00 del día 12 de julio de 1999 es para VB 36.563,5 Es decir, la parte decimal representa la fracción de día transcurrido desde el comienzo del día (medianoche) hasta la hora en cuestión. No debemos confundir esta fracción del día (0,5 para las 12:00:00) con el valor de la función Timer para ese instante (45.000)) que representa el número de segundos transcurridos desde la 12 de la noche de ese día. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 31
  • 32. 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 sucesión de caracteres. Si ejecutamos el código: 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 ocurriría si la declarásemos como String o Variant. En cualquiera de estos casos, Pepe contendría el literal introducido, es decir, “12 Julio 1999” De lo anterior se desprende una cosa, dado que la fecha la guarda como un número, no importa en que formato le introduzcamos una fecha. Si ponemos que Fecha1 = “12/7/99” es idéntico a poner fecha1 = 12/07/1999 ó Fecha1 = 1999-07-12. Eso sí, debe reconocer el formato, y luego, el dato, lo tratará como un número Double. Lo volveremos a ver cuando estudiemos las bases de datos. Access trata las fechas de idéntica forma. Función FORMAT Esta función permite presentar cadenas numéricas o fechas de una determinada forma. Permite establecer el Formato de esa cadena. Si recurre a la ayuda de VB acerca de esta función se va a enterar muy poco de lo que puede dar de sí. La sintaxis que presenta es : Format(expresión[, formato[, primerdíadesemana[, primerasemanadelaño]]]) Lo mejor que puede hacer con esta definición de la sintaxis de Format es olvidarla. No le aclara mucho lo que se puede hacer con Format. La función Format se usa para poner una fecha en un determinado formato. Con la expresión : FechadeHoy = Format (Now, “yyyy-mm-dd”) la variable FechadeHoy tendrá el valor 1998-05-21, que se refiere al día 21 de mayo de 1998, según el formato recomendado por la norma ISO-8601 para la presentación de fechas. Si hubiésemos puesto la expresión FechadeHoy = Format (Now, “dd/mm/yy”) , la variable FechadeHoy contendría el valor 21/05/98 referido al día citado. Las posibilidades de Format llegan también al campo de las cadenas numéricas. Por ejemplo la cifra 123456 se transformará en las siguientes expresiones, según como empleemos la función 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 (expresión[, formato[, firstdayofweek[, firstweekofyear]]]) No se complique la vida con el tema del primer día de la semana ni la primera semana del año. No lo usará con frecuencia. Centrémonos mas en el parámetro Formato. Puede tomar muchos valores. Veamos los principales. Primero para números LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 32
  • 33. Observe que usamos la expresión Variable = Format (1234567,”Formato”) para todos los ejemplos de números. Para poner los números separados por millares : Variable = Format(1234567, "##,###,###") Variable = 1.234.567 (Cada carácter # indica que ahí va un número. 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 número 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 número por cien y lo presenta cono porcentaje(123456700,00%) Scientific Usa notación científica (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 RECOMENDACIÓN ISO 8601 Va como cultura general. Esta recomendación 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 recomendación. La Administración Española está obligada a exigir su cumplimiento en todas aquellas aplicaciones que realicen intercambios de fecha y hora. Format dispone de mas opciones. Sería muy largo explicarlas aquí. Para mas información, 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 expresión 12 Julio 1999, y queremos convertir esa fecha al formato ISO 8601, podemos hacerlo de cualquiera de estas dos formas: LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 33
  • 34. 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 función 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 válida. Si lo consigue lo presenta. Si no lo consigue, dará un error. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 34
  • 35. 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 número por orden de lista de ese alumno. Las matrices normalmente comienzan a numerar por el número 0. Este comienzo puede no ser el mas apropiado para la variable que estamos planteando, pues ningún alumno tiene el número de orden 0. Para hacer que una matriz comience a numerar por el 1 se debe definir mediante la instrucción: Option Base 1 que debe colocarse al comienzo del módulo o formulario donde declaremos la matriz. Para declarar la matriz se hace como con todas las variables, especificando entre paréntesis el número 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 también 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 serán 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 número 15 de la clase, será el elemento: Alumno (15, 2) Podemos definir matrices de dimensión superior a dos. Podemos llegar a un máximo de 60 dimensiones. Una matriz de 5 dimensiones se declararía: 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 instrucción ReDim ReDim Alumno (1To 25) Mediante esta instrucción, estamos ReDimensionando una matriz ya declarada. No se puede LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 35
  • 36. redimensionar una matriz inexistente. Mediante la declaración 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 número 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 aplicación, pero esa redimensión no puede afectar al número de dimensiones de la matriz. Si redimensionamos la matriz perderá la información existente. Para evitar perder la información presente en la matriz, debe utilizar la sentencia ReDim Preserve. Si usa la palabra clave Preserve en matrices de dimensión superior a 1, va a encontrarse con comportamientos no esperados. Como podrá ver en la Ayuda de VB, usando ReDim Preserve sólo puede cambiar el tamaño de la última dimensión de matriz y no puede modificar en ningún momento el número de dimensiones. NO es cierto del todo. SÍ lo podrá hacer una sola vez. Respecto a cambiar el número 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 también hemos cambiado el número de elementos en cada dimensión. Si hubiésemos utilizado ReDim Preserve solamente podríamos haber usado la primera de las dos líneas anteriores : ReDim Preserve MiMatriz (1 To 5, 1 To 9) pero ya no podríamos volver a cambiar el número de dimensiones con la segunda línea. Nos daría un error. Con ReDim podemos cambiar el número de elementos de cada dimensión 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 hubiésemos empleado ReDim Preserve, podríamos 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 dimensión : ReDim Preserve (1 To 5, 1 To 20) ReDim Preserve (1 To 5, 1 To 30) LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 36
  • 37. es decir, no podremos hacer esto : ReDim Preserve (1 To 10, 1 To 30) donde se señala en negrita el error. Esto no causa ningún error en una matriz de una dimensión, ya que si la matriz tiene sólo una dimensión, puede cambiar el tamaño de esa dimensión porque es la única y la última. Cuando a lo largo de la aplicación 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 máximo y mínimo de una matriz se usan las funciones UBound y LBound. UBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz. Sintaxis UBound(nombredelamatriz[, dimensión]) LBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz. Sintaxis LBound(nombredelamatriz[, dimensión]) Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de la aplicación se ejecutó la siguiente instrucción válida : 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 Dimensión 1, ISD 1 = Indice Superior Dimensión 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 Función Split Una vez visto lo que es una matriz, vamos a ver una función interesante para el tratamiento de cadenas de caracteres. La función Split Descripción Esta función toma una cadena de caracteres compuesta varias subcadenas, separadas entre ellas mediante un separador, y devuelve una matriz de una dimensión, que contiene esas subcadenas. Sintaxis Split (expresión[, delimitador[, contar[, comparar]]]) Donde: Expresion es la variable que contiene la cadena de caracteres de entrada Delimitador. Contiene el carácter o caracteres que se usan de delimitador entre subcadenas LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 37
  • 38. Contar es un número donde indicamos el número de subcadenas que queremos extraer. Si no se pone nada, extrae todas las cadenas. Si se pone un valor, extrae el número 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 numérico que nos da cuatro opciones de comparación para comparar las subcadenas. Este parámetro es solamente para alumnos avanzados Ejemplo. En el siguiente ejemplo veremos como separar distintos datos que están 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 numérica MiVariable = Split(Text1.Text, ",") ‘Ejecutamos la función 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 – Guía del Estudiante Capítulo 1 Página 38
  • 39. VISUAL BASIC Tras esta pequeña introducción al lenguaje Basic ya estamos en disposición 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 título del programa Visual Basic, con el texto : Proyect1 - Microsoft Visual Basic (Diseño) Por debajo de esta barra de Título del VB, encontramos la barra de menú de VB, con las leyendas : Archivo Edición Ver Proyecto Formato Depuración 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 operación que Vd. puede realizar. Estas operaciones está todas en la línea de menú, y puede acceder a ellas abriendo los menús desplegables que existen en cada una de las palabras Archivo Edición Ver ...... de esta línea 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 – Guía del Estudiante Capítulo 1 Página 39
  • 40. Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de herramientas real que pueda tener un mecánico para realizar su trabajo. En ella están los iconos que representan a los controles con los que Vd. va a desarrollar su aplicación VB. No están todos los que pueden estar, al igual que en una caja de herramientas de un mecánico no están todas las herramientas que puede usar. Están 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 haría un mecánico con una herramienta especial, que la metería en su caja sólo 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 versión y la personalización. Para añadir un nuevo control haga click en Proyecto | Componentes y le aparecerá una caja con todos los controles existentes. Puede seleccionar nuevos controles para añadir 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 añadido a la caja de herramientas. Esos controles le aparecerán 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. Además, cuando realice una aplicación y la distribuya una vez compilada, Visual Basic entregará en los disquetes de distribución las DLL’s u OCX’s 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 inútiles en el ordenador destino de su aplicación. A la hora de compilar el programa (Crear archivo .EXE) quite todos los controles personalizados que no necesite su aplicación. (Sólo 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 análoga, a lo que hizo para meterlos en la caja de herramientas, pero al revés. 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 gráfica de su aplicación, sobre el que podrá añadir los controles que necesite. Lo veremos mas adelante con todo detalle. Puede tener dos ventanas más 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 Depuración. Por cada formulario y cada control que introduzca en el proyecto, le aparecerá otra ventana, denominada Ventana de código. No se extrañe de que esta presentación gráfica del Visual Basic coincida con otros sistemas de desarrollo (Delphi, p.e.). La lógica de desarrollo de una aplicación en Windows ha llevado a varios fabricantes de software a utilizar un entorno gráfico similar (diríamos idéntico). 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 Código. LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 40
  • 41. Fig. 1.3 Ventana de código Esta figura le muestra un Formulario con su ventana de código. Cada objeto gráfico de VB tiene su propia ventana de código. Así, si en este formulario hubiésemos introducido un Label y dos CommandButton, todos ellos tendrían su propia ventana de código. La ventana de código la podemos ver haciendo doble click sobre cualquier objeto de nuestro proyecto. En este caso hemos hecho doble click sobre el único objeto que teníamos : el formulario. Observe las dos cajas de la parte superior, uno con la inscripción Objeto : que en el momento que le sacamos la foto tenía Form, y el otro con la inscripción Proc : (procedimiento), que en el momento de la foto tenía 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 código de ese objeto. Todos los objetos gráficos (controles) existentes dentro de un formulario y el propio formulario aparecerán 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 código en uno de los procedimientos, saldrá por defecto ese procedimiento para el cual hemos escrito el código. Si no hay código en ninguno de los procedimientos, saldrá el que tenga por defecto cada objeto. Solamente nos queda por decir, para cerrar este capítulo, 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 gráfica, lo que le puede ocurrir a un objeto es que se le haga click, doble click, que se pase el cursor del ratón 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 según nuestras necesidades, es decir, debemos escribir el código que necesite nuestra aplicación 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 ningún efecto, basta con dejar sin código el procedimiento correspondiente LSB Visual Basic – Guía del Estudiante Capítulo 1 Página 41