LA BIBLIA DE VB6.pdf

601
 LSB Visual Basic - Guía del Estudiante Capítulo 1 Página 1 Visual Basic - Guía del Estudiante Cap. 1 INTRODUCCION Antecedentes históricos. El lenguaje de programación BASIC (Beginner's All purpose Sy mbolic 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 l os 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 P C 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 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

Transcript of LA BIBLIA DE VB6.pdf

  • LSB Visual Basic - Gua del Estudiante Captulo 1 Pgina 1

    Visual Basic - Gua del Estudiante Cap. 1

    INTRODUCCION Antecedentes histricos.

    El lenguaje de programacin BASIC (Beginner's All purpose Symbolic Instruction Code ) naci en el ao

    1964 como una herramienta destinado a principiantes, buscando una forma sencilla de realizar

    programas, empleando un lenguaje casi igual al usado en la vida ordinaria ( en ingls), y con

    instrucciones muy sencillas y escasas. Teniendo en cuenta el ao de su nacimiento, este lenguaje cubra

    casi todas las necesidades para la ejecucin de programas. Tngase en cuenta que las mquinas

    existentes en aquella poca estaban estrenando los transistores como elementos de conmutacin, los

    ciclos de trabajo llegaban a la impensable cifra de 10.000 por segundo y la memoria no pasaba de unos

    pocos ks en toroides de ferrita.

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

    La evolucin del BASIC por los aos 70 fue escasa, dado el auge que tomaron en aquella poca

    lenguajes de alto nivel como el FORTRAN y el COBOL. En 1978 se defini una norma para unificar los

    Basics existentes crendose la normativa BASIC STANDARD

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

    particular, all por la primera mitad de los ochenta, el BASIC resurgi como lenguaje de programacin

    pensado para principiantes, y muchos de estos pequeos ordenadores domsticos lo usaban como

    nico sistema operativo (Sinclair, Spectrum, Amstrad)

    Con la popularizacin del PC, salieron varias versiones del BASIC que funcionaban en este tipo de

    ordenadores (Versiones BASICA, GW-BASIC), pero todas estas versiones del BASIC no hicieron otra

    cosa que terminar de rematar este lenguaje. Los programadores profesionales no llegaron a utilizarlo,

    habida cuenta de las desventajas de este lenguaje respecto a otras herramientas (PASCAL, C,

    CLIPPER). El BASIC con estas versiones para PC lleg incluso a perder crdito entre los profesionales

    de la informtica.

    Las razones para ello eran obvias:

    - No era un lenguaje estructurado.

    - No existan herramientas de compilacin fiables.

    - No dispona de herramientas de intercambio de informacin.

    - No tena libreras.

    - No se poda acceder al interior de la mquina.

    - Un largo etctera de desventajas respecto a otros lenguajes de programacin.

    Tal fue ese abandono por parte de los usuarios, que la aparicin del Quick-BASIC de Microsoft, una

    versin ya potente del BASIC, que correga casi todos los defectos de las versiones pas prcticamente

    inadvertida, a no ser porque las ltimas versiones del sistema operativo MS-DOS incluan una versin de

    Quick-BASIC algo recortada (Q-Basic) como un producto mas dentro de la amplia gama de ficheros

    ejecutables que acompaan al sistema operativo, y aprovecha de l el editor de textos (Cada vez que se

    llama al EDIT estamos corriendo el editor del Q-Basic).

    Esta versin del popular BASIC ya es un lenguaje estructurado, lo que permite crear programas

    modularmente, mediante subrutinas y mdulos, capaz de crear programas ya competitivos con otros

    lenguajes de alto nivel. Sin embargo llegaba tarde, pues los entornos MS-DOS estaban ya superados por

    el entorno grfico Windows.

    Sin embargo algo haba en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si a esto se

    le aade el entorno grfico Windows, el aprovechamiento al mximo de las posibilidades de Windows en

    cuanto a intercambio de informacin, de sus libreras, de sus drivers y controladores, manejo de bases

    de datos, etc. el producto resultante puede ser algo que satisfaga todas las necesidades de

    programacin en el entorno Windows. La suma de todas estas cosas es VISUAL - BASIC. Esta

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 2

    herramienta conserva del BASIC de los aos 80 nicamente su nombre y su sencillez, y tras su

    lanzamiento al mercado, la aceptacin a nivel profesional hizo borrar por fin el "mal nombre" asociado a

    la palabra BASIC.

    Actualmente (2001) se est comercializando la versin 6.0 de este producto. Desde su salida al

    mercado, cada versin supera y mejora la anterior. Dados los buenos resultados a nivel profesional de

    este producto, y el apoyo prestado por el fabricante para la formacin de programadores, Visual-Basic se

    ha convertido en la primera herramienta de desarrollo de aplicaciones en entorno Windows.

    Es obligado decir sin embargo, que sigue siendo BASIC. No se pueden comparar sus prestaciones con

    otros lenguajes cuando deseamos llegar al fondo de la mquina y controlar uno a uno sus registros. No

    es ese el fin perseguido con VB y si es necesario llegar a esas precisiones ser necesario utilizar otro

    lenguaje que permita bajar el nivel de programacin. (Visual-C). o realizar libreras (DLLs) que lo hagan.

    En la mayor parte de las aplicaciones, las herramientas aportadas por VB son mas que suficiente para

    lograr un programa fcil de realizar y de altas prestaciones.

    Caractersticas Generales de Visual-Basic

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

    en una gran parte a partir del diseo de una interface grfica. En una aplicacin Visual Basic, el

    programa est formado por una parte de cdigo puro, y otras partes asociadas a los objetos que forman

    la interface grfica.

    Es por tanto un termino medio entre la programacin tradicional, formada por una sucesin lineal de

    cdigo estructurado, y la programacin orientada a objetos. Combina ambas tendencias. Ya que no

    podemos decir que VB pertenezca por completo a uno de esos dos tipos de programacin, debemos

    inventar una palabra que la defina : PROGRAMACION VISUAL.

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

    Anlisis . Es el studio de las necesidades que han dado origen a la creacin de ese programa.

    Es lo que se se llama Anlisis de la aplicacin. Es la primera fase que debe tener siempre un

    programa y es tambien la ms olvidada entre los programadores noveles. Una aplicacin no se

    inicia con el teclado, sino sobre un papel.

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

    hombre mquina, tanto para salida de datos como para entrada. Ser necesario partir de una o

    varias ventanas - Formularios - a las que le iremos aadiendo los controles necesarios.

    - Definicin de las propiedades de los controles Se dar la forma, posicin, y todas las caractersticas necesarias a los controles que hayamos colocado en ese formulario. Estas

    propiedades determinarn la forma esttica de los controles, es decir, como son los controles y

    para qu sirven.

    - Generacin del cdigo asociado a los eventos que ocurran a estos controles. A la

    respuesta a estos eventos (click, doble click, una tecla pulsada, etc.) le llamamos Procedimiento,

    y deber generarse de acuerdo a las necesidades del programa.

    - Generacin del cdigo del programa. Un programa puede hacerse solamente con la

    programacin de los distintos procedimientos que acompaan a cada objeto. Sin embargo, VB

    ofrece la posibilidad de establecer un cdigo de programa separado de estos eventos. Este

    cdigo puede introducirse en unos bloques llamados Mdulos, en otros bloques llamados

    Funciones, y otros llamados Procedimientos. Estos Procedimientos no responden a un evento

    acaecido a un control o formulario, sino que responden a un evento producido durante la

    ejecucin del programa.

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

    programacin, y es necesario cambiar hasta el argot del programador. Posiblemente se le habrn

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 3

    acumulado demasiados trminos de una sola vez. Es normal. A poco que siga leyendo ver las cosas

    mas claras cuando se explique una por una.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 4

    VARIABLES. DEFINICION Y ENTORNO

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

    una variable. Una variable, como Vd. seguro que conoce, es un nombre que en el programa le

    asignamos a un dato. Ese dato podr cambiar. Piense por ejemplo, en un programa consistente en la

    toma de datos de los alumnos de un centro escolar. Existirn varias variables para poder introducir los

    datos de los alumnos. Estas variables pueden tener nombre tales como:

    Nombre

    Apellido1

    Apellido2

    Direccin

    Telfono

    Salario

    La variable Nombre tomar valores distintos segn vayamos introduciendo los datos de los distintos

    alumnos. Es posible, que a lo largo de la ejecucin del programa, esta variable Nombre valga:

    Jos

    Pedro

    Mara

    Luis

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

    lo ver mas claro.

    Decamos que Basic no exige la definicin previa de las variables. Otras herramientas exigen que se

    haga as. Por lo tanto es normal encontrar, en otros sistemas de programacin, que un programa

    comienza de la siguiente forma:

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

    Declare Apellido1 As String

    Declare Apellido2 As String

    Declare Direccin As String

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

    Declare Salario As Nmero Le dice que Salario es un nmero

    Mediante estas declaraciones, el programa sabe de que tipo de dato se trata y por tanto cmo debe

    trabajar con l. En otros sistemas de programacin distintos de Basic, es necesario realizar esta

    declaracin antes de introducir una variable.

    Basic permite que no se declaren. Cuando a lo largo del programa le introducimos una variable nueva,

    asume que es una variable y que el tipo es el adecuado para el valor que le estamos introduciendo en

    ese momento.

    Por ejemplo, si Basic encuentra estas instrucciones

    Salario=50000000

    Nombre ="Pedro"

    Telfono = "1234567"

    entiende que Salario, Nombre y Telfono son variables, que Salario es un nmero (No hemos metido su

    valor entre comillas), y que Nombre y Telfono son sucesiones de caracteres alfanumricos (su valor

    est entre comillas)

    Esta particularidad de no necesitar declarar las variables hace que sea sencillo introducir una variable

    nueva. Sin embargo entraa un gran peligro. Imagnese que en un paso posterior del programa, le

    mandamos escribir esos tres datos anteriores con la instruccin PRINT

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 5

    Print Salario

    Print Nombre

    Print Telwfono

    Habr observado en tercer lugar la palabra Telwfono, que por error ha introducido el programador.

    Basic interpreta que Telwfono es una variable e ir a leer en memoria el valor que tiene. No tendr

    ningn valor. Por lo tanto no escribir nada y encima no dar ningn aviso de que se ha cometido un

    error. Nada es gratis en esta vida, y la facilidad para introducir variables se paga con la posibilidad de un

    error.

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

    tipo de variables, Visual Basic supone que la variable es de un tipo que soporta cualquier tipo de datos :

    una variable tipo Variant. En ese tipo podr meter cualquier tipo de variable, pero a costa de ocupar

    mucho mas espacio en la memoria que si la hubiese declarado con el tipo correcto para el dato que va a

    meter en ella.

    Basic ha pensado en ese problema, y se puede solucionar con esta que ser la primera instruccin

    BASIC que vamos a estudiar:

    OPTION EXPLICIT

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

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

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

    que contenga su aplicacin. Pero no se preocupe de ello puesto que VB lo ha hecho por Vd. Basta que

    lo programe en las opciones del VB. Haga click en Herramientas | Opciones de la barra de men del

    VB y le aparecer este cuadro, donde debe marcar las casilla Requerir declaracin de variables. A

    partir de ahora, ser VB quien ponga la sentencia Option Explicit en el lugar correcto. (Fig. 1.1)

    TIPOS DE VARIABLES

    Las variables pueden ser de los siguientes tipos: (El nmero indicado en segundo lugar indica el nmero

    de Bytes que ocupa en memoria.)

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 6

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

    Byte (1) Nmeros enteros, en el rango de 0 a 255

    Integer (2) Nmeros enteros en el rango de -32768 a 32767

    Long (4) Nmeros enteros en el rango de -2147483648 a 2147483647

    Single (4) Punto flotante, simple precisin

    Doble (8) Punto flotante, doble precisin.

    Currency (8) Entero, con punto decimal fijo (Tpico de monedas)

    String (*) Cadenas alfanumricas de longitud variable o fija

    Date (8) Fechas

    Objet (4) Referencia a objetos

    Variant (**) Otros tipos de datos

    (*) Una variable tipo String ocupa el mismo nmero de bytes que caracteres tenga la cadena.

    (**) Una variable tipo Variant ocupa 16 bytes si se trata de un nmero y 22 bytes + longitud de la cadena

    si se trata de un dato tipo cadena de caracteres.

    Existen tambin variables definidas por el usuario (Ya ver la sentencia Type). En este tipo de variables

    se pueden introducir muchos datos de distinto tipo. Los bytes necesarios para almacenar esa variable

    depender de los datos que se hayan definido.

    Dentro de las variables Objet (variables que se refieren a objetos) existe una gran variedad que a estas

    alturas del curso no debemos complicarnos con ellas. Pero para adelantar algo, veremos que una

    variable puede ser del tipo Form - Formulario - , tipo Recordset, etc. etc.

    Cada tipo de variable ocupa unos determinados bytes. Si no se define una variable, VB toma como tipo

    por defecto para la variable el tipo Variant, tal como citbamos anteriormente. Este tipo ocupa mas bytes

    que, por ejemplo, un integer. Si el tipo de dato que vamos a introducir en una variable es un integer, y no

    la hemos declarado como tal, VB asumir para esa variable que es del tipo Variant, lo que le llevar a

    gastar mas bytes de memoria (16) que los que necesitara (2) si la hubisemos declarado previamente.

    Si esa variable va a estar en el rango de 0 a 255, y no declaramos previamente que la variable va a ser

    del tipo Byte, o la declaramos como integer, p. e., estamos desperdiciando memoria RAM y

    posiblemente, retardando la ejecucin del programa. Lo mismo podemos decir del resto de las variables,

    y lo importante que es declararlas y declararlas bien.

    NOTA. Observe en la lista anterior que un dato Booleano ocupa 2 Bytes, mientras que un dato tipo Byte

    ocupa un byte. En muchas ocasiones declaramos variables tipo Boolean con la intencin de que ocupen

    menos espacio. Paradoja del VB. Si la declaramos como Byte ocupamos menos espacio en memoria.

    Declarar una variable como Boolean tiene tambin sus ventajas (escribir menos cdigo por lo general

    cuando necesite leer o escribir una variable tipo Boolean), pero tenga presente esta observacin

    respecto al tamao de los datos Boolean.

    Puede declarar el tipo de la variable mediante un carcter despus del nombre de la variable. Esta

    tcnica, obligatoria en Quick-Basic, est en desuso en VB. No es recomendable definir el tipo de esta

    forma, pues existe un serio peligro de error. De cualquier forma, eso es potestativo del programador y de

    sus costumbres.

    Los caracteres que definen cada tipo de variable son:

    % Integer & Long ! Single

    # Double @ Currency $ String

    Ejemplos Prcticos de declaracin de variables

    En Visual Basic, cuando declaramos una variable como String (Cadena de caracteres), no es necesario

    declarar su longitud. VB aceptar cualquier nmero de caracteres. Si desea evitar que se puedan

    introducir ms de un determinado nmero de caracteres, debe declarar su nmero. Por ejemplo :

    Dim Var1 as String Var1 puede tener cualquier nmero de caracteres

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 7

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

    En este segundo caso, si se introduce como Var2 una cadena de caracteres con mas de 15 caracteres,

    Var2 tomar solamente los 15 primeros. Visual basic no presenta ningn aviso de que esa variable ha

    omitido los caracteres que han sobrepasado la cifra de 15. Si desea que el usuario conozca esa

    circunstancia, debe introducir el cdigo oportuno para producir el aviso.

    La declaracin de variables tipo String con nmero de caracteres predefinido presenta tambin

    inconvenientes a la hora de tratar esa cadena de caracteres con sentencias tales como Mid, Left y Right,

    o a la hora de aadir una cadena a otra. La experiencia nos indica que NO merece la pena declarar

    variables tipo String con el nmero de caracteres prefijado, excepto que sea necesario justamente

    para definir la longitud de la cadena.

    En una gran parte de los casos una variable que se compone de nmeros debe declararse como una

    variable de cadena de caracteres (String), y no como numrica. Cuando pensamos por ejemplo en un

    nmero de DNI, compuesto por 7 u 8 cifras, un cdigo postal, el nmero de una calle, el piso de un

    edificio, parecen invitar a que la variable que los contenga sea una variable de tipo numrico (Byte,

    Integer, Long, ...). Estas variables, aunque su contenido sean nmeros, siempre se deben declarar

    como String, ya que se tratan en realidad de cadenas de caracteres, aunque estos no sean letras sino

    nmeros. Para aclarar mas estas ideas, piense en el nmero del DNI con la letra del NIF incluido, o que

    el lugar del DNI se deba rellenar con el nmero del permiso de residencia, (lleva letras). Piense en el

    cdigo postal de una provincia que comienza por 0 ( 08XXX = Barcelona ) . Si la variable que va a

    contener ese cdigo postal se declara como numrica, el cero de la izquierda lo desprecia, por lo que

    ese cdigo postal quedara reducido al 8XXX, nmero de 4 cifras que el cartero nunca reconocera

    como un cdigo postal, que necesariamente ha de tener 5 cifras. Para terminar, piense la forma de

    introducir en una variable numrica el nmero 32Bis de una calle o el piso S2 de un edificio. O piense en

    una variable que va a contener un cdigo de un producto. Ese cdigo siempre va a ser un nmero, por

    ejemplo de 9 cifras. Ha pensado como tratara el ordenador una variable numrica que contiene el

    cdigo 000100123 ?. El resultado sera que convertira ese cdigo en la cifra 100123, y Vd. deber

    buscarse la vida para aadir los ceros iniciales a la hora de sacarlo a una impresora, por ejemplo.

    En todos los casos anteriores, el nmero no representa una cantidad numrica, sino un nombre.

    Lo que ocurre es que ese nombre contiene solamente nmeros.

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

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

    Las variables booleanas (True/False) pueden en muchos casos sustituirse por una variable del tipo Byte.

    Si ese datos True / False se va a introducir en una base de datos o en fichero en el disco, puede ser mas

    prudente poner 0 en vez de False y 1 en vez de True.

    Una variable byte ocupa muy poco, simplemente 1 byte como su nombre indica. Pero no puede contener

    nmeros mayores de 255 ni nmeros negativos.

    Cada vez que declare una variable numrica piense en los valores que puede tener, sobre todo cuando

    esa variable va a ser el resultado de una operacin matemtica. Recuerde el escaso margen de una

    variable tipo Integer ( de -32768 a 32767)

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

    de ellos permitidos, as como el redondeo. La variable correcta para este caso es Currency, pero

    Currency le aade automticamente el tipo de moneda de cada pas (Pts. Para Espaa) lo que con

    frecuencia es un engorro. Los datos del tipo de moneda los toma del sistema operativo del ordenador,

    por lo que no se extrae si le expresa el nmero de pesetas en dlares. Cambie el pas en su S. O.

    Otro tipo de variable es Date. Este tipo de variable representa una fecha o una hora. Pero debe ser

    objeto de un estudio un poco mas extenso para tener claro que es una fecha para Visual Basic, como las

    trata y como se pueden comparar. Lo ver mas adelante al estudiar las funciones Format y DateDiff.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 8

    Ambito de las variables.

    Denominamos mbito de una variable a las partes del programa donde esa variable est declarada.

    Para entenderlo mejor, veamos someramente la forma de un programa desarrollado en VB.

    Un programa VB tiene uno o varios formularios. Cada formulario tiene varios controles. Tanto el

    formulario como cada uno de sus controles tienen una parte del programa, justamente la parte

    relacionada con cada uno de los eventos que pueden suceder bien al formulario o a los controles. A

    estas partes las habamos llamado Procedimientos. Podemos tener procedimientos que no estn

    relacionados con ningn evento ocurrido al formulario o a sus controles. (Los Procedimientos que iremos

    insertando a lo largo de la aplicacin)

    Aparte de formularios y controles, un programa puede tener Mdulos, y en cada uno de los mdulos

    podemos insertar cuantos Procedimientos y Funciones queramos. La estructura de un programa VB

    puede ser de la siguiente forma:

    Formulario1 Formulario2 Formulario3 Mdulo1 Modulo2

    Declaraciones Declaraciones Declaraciones Declaraciones Declaraciones

    Proc. A1 Proc.B1 Proc.C1 Proc.D1 Proc.E1

    Proc. A2 Proc.B2 Proc.C2 Proc.D2 Proc.E2

    Proc. A3 Proc.B3 Proc.C3 Proc.D3 FuncinE1

    Proc. A4 Proc.B4 Proc.C4 Proc.D4 FuncinE2

    Proc. A5 Proc.BB1 Proc.CC1 FuncinE3

    Proc. AA1 Proc.BB2 Proc.CC2 FuncinE4

    Proc. AA2 Proc.B33 Proc.CC3 FuncinE5

    Proc. AA3 Proc.CC4 FuncinE6

    Si se declara una variable dentro de un procedimiento o Funcin, esa variable "NO SALE" del

    Procedimiento o Funcin donde se declar. El procedimiento puede estar en un Formulario (Cualquier

    procedimiento de un control o un procedimiento creado por nosotros) o en un Mdulo (En este caso, el

    procedimiento solo puede ser creado por nosotros)

    En un Formulario, una variable puede declararse de dos formas : Privada o Pblica. Para declarar una

    variable a nivel de formulario debe hacerse en la seccin de declaraciones, que est la ventana de

    cdigo Objeto = General, Proc. = Declaraciones. Si se declara Privada, esa variable se puede ver en

    todo el formulario, (es decir, en todos los procedimientos de todos los controles del formulario y en los

    Procedimientos que pudisemos insertar en ese formulario), pero no sale de dicho formulario. Si se

    declara como Pblica, esa variable puede verse por todo el formulario, de la misma forma que lo hara

    declarada como Privada, y adems puede ser usada desde otro Formulario o Mdulo, citndola con el

    nombre del Formulario, seguido del nombre de la variable (Formulario.Variable)

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

    Pblica, pudiendo en este caso usarse en todo el programa. Cuando se declara una variable como

    pblica en un Mdulo, basta referirse a ella por su nombre, sin citar el nombre del Mdulo donde se

    declar.

    En VB es posible declarar varias veces las variables, es decir, pueden declararse a nivel de formulario,

    en su apartado de declaraciones, y esa variable conservar su valor en todas las partes de ese

    formulario. Sin embargo, si se declara una variable con el mismo nombre a un nivel inferior, por ejemplo

    al principio de un procedimiento, esa variable ser una variable distinta a la anterior, aunque tenga el

    mismo nombre, al declararla en un Procedimiento, solamente ser vlida en ese Procedimiento. Una vez

    que hayamos salido de ese procedimiento, la variable con ese nombre volver a ser la declarada en el

    Formulario. En realidad, lo que tenemos son dos variables distintas, pero con el mismo nombre, una

    declarada para todo el formulario excepto para el procedimiento donde se volvi a declarar, y otra para

    ese procedimiento concreto.

    NOTA.- No es recomendable declarar una variable a dos niveles. Es mucho mejor utilizar otro nombre

    para esa variable dentro del procedimiento donde se le declarara por segunda vez. A esta nota cabe

    exceptuar cuando declaramos variables para una operacin tipo contador

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 9

    For I = 1 To N

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

    Tipos de declaracin de variables.

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

    Privada. Puede emplearse en un Procedimiento, Funcin, Formulario o

    Mdulo. La sintaxis es de la siguiente forma:

    Dim nombrevariable As Integer (o el tipo que sea)

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

    mbito de la variable ser el explicado anteriormente para una variable declarada como Privada. Es

    decir, esa variable no sale del formulario, procedimiento mdulo donde se declar. Cada vez que

    entremos al formulario, procedimiento o mdulo, esa variable tomar el valor cero (si es numrica) o nulo

    (si es string).

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

    emplearse solamente en la seccin de declaraciones de un Formulario o

    Mdulo. La sintaxis es de la siguiente forma:

    Private nombrevariable As Tipovariable

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

    usarse en todo ese Formulario o Mdulo (En todos sus Procedimientos y Funciones), pero NO fuera del

    Formulario o Mdulo donde se declar.

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

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

    emplearse solamente en la seccin de declaraciones de un Formulario o

    Mdulo. La sintaxis es de la siguiente forma:

    Public nombrevariable As Tipovariable

    Declarando una variable de esta forma en la seccin de declaraciones de un Mdulo, esa variable

    puede usarse en cualquier parte del programa citndola simplemente por su nombre.

    Si se declara de esta forma en la seccin de declaraciones de un Formulario, esa variable puede usarse

    en toda el programa. Para nombrarla, si estamos en el Formulario donde se declar basta con citarla por

    su nombre. Si no estamos en ese Formulario, habr que citarla por el nombre del Formulario, seguido

    del nombre de la variable, separados por un punto :

    NombreFormulario.Nombrevariable

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

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

    sintaxis es:

    Global nombrevariable As tipovariable

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

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

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 10

    Sentencia STATIC

    Como se dijo anteriormente, una variable declarada en un procedimiento pierde su valor al salir de l. Lo

    peor es que una vez que el programa vuelva a entrar en ese procedimiento, la variable estar puesta a

    cero. Afortunadamente, esto ltimo tiene solucin. Si declarsemos una variable en un procedimiento o

    funcin, como esttica, esa variable, aunque no la podremos utilizar fuera de ese procedimiento o

    funcin, cuando volvamos a l conservar el valor que tena cuando lo abandonamos. Esta declaracin

    como esttica se realiza mediante la instruccin Static

    Static nombrevariable As tipovariable

    El nombre de una variable puede ser tan largo como queramos. hasta un mximo de 40 caracteres. En

    la versin VB para Espaa se pueden usar incluso la y vocales acentuadas. Es indiferente usar

    mayscula minsculas. No se sorprenda, si por ejemplo, la ha declarado con maysculas y luego la

    cita con minsculas al escribir el cdigo, que automticamente se cambie a maysculas. El nombre de

    una variable siempre debe comenzar por una letra.

    No hay problema por utilizar variables largas. Al compilar el programa no se lleva el nombre, es decir, no

    le va a ocupar mas espacio. Utilice siempre nombres que le definan la variable con algn sentido. Es

    muy til a la hora de acordarse como se llaman, y sobre todo, a la hora de rehacer un programa que

    realiz hace seis meses.

    Pese a que Visual Basic no obliga a declarar variables, es muy til hacerlo. De esta forma se tiene

    control sobre el programa. La experiencia se lo ir demostrando.

    Resumimos la forma de declarar una variable:

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

    Dim Variable As Tipovariable

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

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

    Static Variable As Tipovariable

    En un Formulario (En su seccin de declaraciones)

    Como Privada (Solamente se puede usar en ese Formulario)

    Dim Variable As Tipovariable

    Private Variable As Tipovariable

    Como Pblica (Puede usarse en toda la aplicacin)

    Public Variable As Tipovariable

    En un Mdulo

    Como Privada (Solamente puede usarse en ese Mdulo)

    Dim Variable As Tipovariable

    Private Variable As Tipovariable

    Como Pblica (Puede usarse en toda la aplicacin)

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 11

    Public Variable As Tipovariable

    Global Variable As Tipovariable

    Error tpico de un programador novel de Visual Basic

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

    juntas en una misma lnea :

    Dim Variable1, Variable2, Variable3, Variable4 As String

    Esta declaracin est MAL hecha. Visual Basic interpretar que Variable1, Variable2 y Variable3 son del

    tipo Variant, y solamente Variable4 la supone como tipo String

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

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

    Forma de conocer el tipo de una variable. Funcin TypeName

    Podemos conocer el tipo con el que se ha declarado una variable. Esto se hace mediante la Funcin

    TypeName, que devuelve una cadena con el tipo de una variable.

    MiTipo = TypeName(NombreVariable)

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

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

    Cadena devuelta La variable contiene

    Byte Un byte

    Entero Un entero.

    Largo Un entero largo.

    Simple Un nmero de punto flotante de precisin simple.

    Doble Un nmero de punto flotante de precisin doble.

    Moneda Un valor de moneda.

    Fecha Una fecha.

    Cadena Una cadena.

    Boolean Un valor Boolean.

    Error Un valor de error.

    Empty No inicializado.

    Null No hay datos vlidos.

    Objeto Un objeto que no respalda Automatizacin OLE.

    Desconocido Un objeto de Automatizacin OLE cuyo tipo es desconocido.

    Nada Una variable de objeto que no se refiere a un objeto.

    Si NombreVariable es una matriz, la cadena devuelta puede ser cualquiera de las cadenas posibles con

    un parntesis vaco adherido. Por ejemplo, si NombreVariable es una matriz de enteros, TypeName

    devolver "Integer()".

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

    aparece nada mas arrancarlo, un botn de comando (CommandButton) y tres etiquetas (Label). El botn

    de comando le aparecer con el nombre de Command1 y los labels con Label1, Label2 y Label3. Haga

    doble click sobre el formulario. Le aparecer una ventana. En la parte superior izquierda tiene una lnea

    con la palabra Form y una flecha hacia abajo que parece que va a desplegar algo. Haga click sobre esa

    flecha y luego sobre la palabra General que le aparecer. Teclee aqu las declaraciones de varias

    variables (observe que en la ventana similar de la derecha aparece Declaraciones). Puede que ya le

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 12

    aparezca la linea con Option Explicit. Si no le aparece, teclela.

    Option Explicit

    Dim MiString As String Hemos declarado que MiString es una variable tipo String Dim MiEntero As Integer

    Dim MiObjeto As Control Hemos declarado que MiObjeto es una variable tipo Objeto

    Haga doble click sobre el botn de comando. Le aparecer la ventana anterior, pero referida ahora al

    Command1. Teclee el siguiente cdigo :

    Private Sub Command1_Click()

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

    Label1 = TypeName(MiString)

    label2 = TypeName(MiEntero)

    Label3 = TypeName(MiObjeto)

    End Sub

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

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

    por otro programador.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 13

    Lenguaje Basic del Visual Basic.

    No ha sido un juego de palabras. VB emplea unas instrucciones casi iguales a las que emplea Quick

    Basic. Sin embargo ha aadido otras nuevas instrucciones, inherentes con la programacin visual.

    Vamos a estudiar aqu las instrucciones y definiciones mas sencillas, comunes a QB y VB.

    Sentencias condicionales.

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

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

    La sentencia condicional ms usada es:

    Si se cumple una condicin Entonces

    Realiza estas instrucciones

    Si no se cumple

    Realiza estas otras instrucciones

    Fin de la sentencia.

    As de fcil es programar en Basic. Lo que ocurre es que esta herramienta habla ingls, y lo descrito

    anteriormente toma la forma:

    If condicin Then

    Instrucciones

    Else

    Otras instrucciones

    End If

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

    y ejecuta otras instrucciones distintas. Puede ocurrir que, caso de no cumplirse la condicion primera, se

    abra un abanico de dos o tres posibilidades. La sentencia condicional tendra entonces la forma:

    If condicin 1 Then

    Instrucciones

    ElseIf Condicin 2

    Otras instrucciones

    ElseIf Condicin 3

    Otro juego de instrucciones

    Else

    Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3.

    End If

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

    Existe otra sentencia condicional muy usada: Select Case

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

    instrucciones:

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

    Case 1

    Instrucciones a ejecutar en caso de que variable = 1

    Case 2

    Instrucciones a ejecutar en caso de que variable = 2

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 14

    Case 3

    Instrucciones a ejecutar en caso de que variable = 3

    Case 4

    Instrucciones a ejecutar en caso de que variable = 4

    Case Else

    Instrucciones a ejecutar en caso de que variable sea distinta a los valores

    anteriores

    End Select

    Este procedimiento resulta mucho mas sencillo y rpido que las sentencias If Then Else

    vistas anteriormente, cuando el margen de eleccin es mayor que 2.

    Puede agrupar varios valores en una misma lnea. Por ejemplo, si tiene 100 valores posibles, y el

    tratamiento es igual para varios de ellos, puede agruparlos as:

    Select Case Valor

    Case Is < 20

    Instrucciones

    Case Is = 20

    Instrucciones

    Case Is = 21, 22, 23, 24, 25, 26

    Instrucciones

    Case Is > 26

    Instrucciones

    End Select

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

    disponemos de otras dos funciones: Choose y Switch.

    Switch toma una serie de parmetros, todos por parejas. El primer trmino de cada pareja es la

    expresin a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es una funcin

    (las funciones las veremos muy pronto)

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

    Esta instruccin obtiene un valor para A que depender del valor que tome B entre los valores posibles

    (1, 2 3)

    La sentencia Choose es casi igual, cambia solamente la forma. La misma intruccin anterior puede

    realizarse con Choose de la siguiente forma:

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

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

    le haban establecido (1, 2 3 en nuestro caso), la sentencia devuelve el valor Nulo ( Null ). Esto puede

    producir algn error si no se contempla esa posibilidad.

    Las sentencias Switch y Choose no se usan mucho en programacin. Parece que los programadores

    o no las conocen o se lan (y es comprensible) al utilizarlas. Le garantizo que puede llegar a ser un gran

    programador sin necesidad de utilizarlas. Use preferentemente If End If y Select Case.

    Otra sentencia condicional: IIF

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

    Sintaxis Iif (Expresin, SiEsCierto, SiEsFalso)

    Expresin es la expresin a evaluar.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 15

    SiEsCierto Valor o expresin devuelta si Expresin es True.

    SiEsFalso Valor o expresin devuelta si Expresin es False.

    Observaciones

    IIf siempre evala SiEsCierto y SiEsFalso, aunque slo vaya a devolver una de ellas. Por esta razn,

    deber vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar SiEsFalso se

    produce un error de divisin entre cero, se generar un error aunque Expresin d como resultado True.

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

    Introduzca tambin un TextBox. Vea que poco a poco vamos metiendo cosas aunque no las conocemos

    todava. Mas tarde las conocer. El TextBox tendr por nombre Text1. Haga doble click sobre el botn

    de comando e introduzca el siguiente cdigo :

    Private Sub Command2_Click()

    Dim MiVariable As String

    MiVariable = IIf(Clng(Text1.Text) > 100, "Es mayor", "Es menor")

    Label1 = MiVariable

    End Sub

    Al ejecutar el programa, debe introducir un valor numrico en Text1. Si ese valor numrico es menor que

    100, MiVariable tomar el valor Es menor (No se cumple la condicin expresada en el primer parmetro Text1.Text > 1000). Si introduce una cantidad mayor, se cumple esa condicin, por lo que

    MiVariable tomar el valor Es mayor. El valor que toma la variable puede verlo en Label1.

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

    caracteres.

    Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar las

    propiedades de un objeto, obtener resultados de operaciones, ....

    Sentencias de bucle.

    Es muy comn utilizar bucles a lo largo de un programa. Un bucle es una sucesin repetitiva de

    instrucciones, que se estarn realizando mientras se cumpla una condicin o mientras no se cumpla otra

    condicin. Es tan sencillo como esto:

    Mientras condicin

    Instrucciones

    Fin del bucle

    Existen dos formas de bucle: Una, que realiza un nmero determinado de recorridos por el bucle. Es el

    denominado bucle por contador. Otra, realiza el bucle hasta que se cumpla (o deje de cumplirse) una

    condicin. Es el llamado bucle por condicin.

    Bucle por contador

    Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a presentar

    las 26 letras maysculas del alfabeto ingls

    For N=65 To 90

    Label1.caption = Chr ( N )

    Next N

    Este "programa" nos presentar en una caja (Label) los caracteres cuyo nmero ASCII vaya desde el 65

    (A) al 90 (Z) Comenzar presentando el correspondiente al nmero 65, e ir presentando

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 16

    sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parar.

    Bucles por condicin

    Ejecuta las instrucciones del bucle mientras se cumple una condicin

    X = 0

    Do While X < 1000

    X = X + 1

    Loop

    El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero, e

    incrementa su valor una unidad. Analiza si el valor de X es menor que 1000, y si es cierto, vuelve a

    realizar el bucle. As hasta que X ya no sea menor que 1000. Al dejar de cumplirse que X sea menor que

    1000, sale del bucle. Acabamos de realizar un temporizador, y tambin de exponer las sentencias

    condicionales y los bucles, inicio de cualquier curso de Basic. Como final de leccin, se propone un

    problema. Con el primer bucle, donde visualizbamos los caracteres A a la Z, posiblemente no nos

    diese tiempo de ver cada una de las letras que iban apareciendo en la pantalla, en la etiqueta Label1,

    dado que cambiara con mucha velocidad, y solamente veramos la Z, que es donde se detuvo el

    programa. Podemos poner un temporizador cada vez que presente una letra, y as nos dar tiempo a

    verla. Con los dos bucles vistos anteriormente ya podemos hacerlo.

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

    sentencia ser:

    X = 0

    Do Until X > 1000

    X = X + 1

    Loop

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

    ... y Until para indicar Mientras no se cumpla que ....

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

    condicin)

    For N=65 To 90

    Label1.caption = Chr ( N )

    Label1.RefreshN ' Refresca la etiqueta

    X = 0

    Do While X < 1000

    X = X + 1

    Loop

    Next N

    Este es nuestro primer programa en BASIC. En VISUAL BASIC es idntico, pero nos falta la interface

    grfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece al abrirlo, introducir una

    etiqueta, (Label) que llevar el nombre por defecto de Label1. Solo nos queda pensar donde

    introducimos el cdigo anterior. Podemos introducir un botn de comando (Command Button) que

    saldr con el nombre por defecto de Command1. Haga doble click sobre el botn. Aparecer el

    procedimiento Click. Este procedimiento es el que se realiza cuando hacemos click sobre ese botn.

    Escriba en ese procedimiento este cdigo.

    Private Sub Command1_Click() ' Esta lnea sale automticamente

    For N=65 To 90

    Label1.caption = Chr ( N )

    Label1.RefreshN ' Refresca la etiqueta

    X = 0

    Do While X < 1000 ' Bucle de temporizacin (*)

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 17

    X = X + 1

    Loop

    Next N ' Termina el bucle de temporizacin

    End Sub ' Esta lnea sale automticamente

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

    sencillo como este ejemplo.

    (*) Las temporizaciones no se hacen realmente as. El ejemplo anterior no deja de ser una forma

    sencilla de detener el programa, para que en los comienzos de su carrera como programador pueda ver

    el contenido de una etiqueta. Si lo hiciera de esta forma, su ordenador estara detenido realizando una

    funcin bastante triste, contar hasta 1000 para luego continuar el programa. Y lo que es peor, en un

    ordenador a 300 MHz. Tardara menos tiempo que en uno a 66. Esta misma funcin puede hacerla con

    Sleep que la ver mas adelante, que es la forma limpia y elegante de hacer una temporizacin

    Formas de salir de un bucle

    Para salir de un bucle, podemos esperar a que se complete, bien porque se ha cumplido la condicin

    (Bucles por condicin) o a que se haya llegado al final de la cuenta (Bucles por contador). Pero puede

    ocurrir que interese salir del bucle sin haber terminado la ejecucin total del mismo, por ejemplo, porque

    ya hemos encontrado lo que estabamos buscando, y sera una prdida de tiempo seguir ejecutando el

    bucle cuando ya hemos obtenido lo que buscamos. Para ello, basta con ejecutar la sentencia Exit Do

    (Cuando hemos comenzado el bucle con Do Until o Do While, o con Exit For cuando lo hemos

    comenzado con For ... To

    Ejemplos

    En el siguiente ejemplo pretendemos parar el programa cierto tiempo, a la espera que otro equipo se

    conecte a travs del puerto serie. (Cuando se conecte, el control MSComm1 detectar la seal DSR que

    le enva el otro equipo y deberemos salir inmediatamente del bucle para, por ejemplo, atender a ese

    puerto serie)

    Contador = 0

    Do While Contador < 1000

    Contador = Contador + 1

    DoEvents

    If MSComm1.DSRHolding = True Then Exit Do

    Sleep (1000)

    Loop

    Aqu comenzamos a atender al puerto serie

    En el siguiente ejemplo, deseamos transmitir por el puerto serie una serie de nmeros, del 1 al 1000,

    pero siempre y cuando que el equipo que est al otro lado de la lnea serie est a la escucha (Condicin

    MSComm1.DSRHolding = True) Si se desconecta ese equipo, y la condicin pasa de True a False,

    deseamos salir del bucle:

    For I = 1 To 1000

    If MSComm1.DSRHolding = False Then Exit Do

    MSComm1.Output = Str(I)

    Next I

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

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

    Funcin DoEvents

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

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 18

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

    DoEvents.

    Imagnese que Visual Basic est ejecutando este cdigo:

    Do While Valor < 100

    Valor = valor + 1

    If Valor = 90 then Valor =1

    Loop

    Observar que la variable Valor nunca podr llegar a tener el valor 100, puesto que cada vez que llega a

    90 le ponemos de nuevo el valor 0. El programa no va a salir nunca del bucle, pero adems no podr

    atender a otros eventos que se produzcan en el ordenador (por ejemplo la pulsacin de una tecla) ya que

    el microprocesador est atendiendo solamente a ese bucle. Si lo est ejecutando desde el propio

    entorno de Visual Basic, deber parar la ejecucin mediante las teclas Ctrl Pausa. No podr pararlo mediante el botn Terminar de la barra de herramientas de VB. En un programa compilado posiblemente

    tenga que reiniciar el equipo mediante Alt Ctrl Sup, llevndose por delante el resto de los programas que se estn ejecutando en ese momento en su PC.

    No es difcil cometer este error involuntariamente. Esto es lo que se llama un bucle infinito. Para que no

    suceda, o al menos, que si nuestro programa entra en un bucle infinito se pueda salir de una forma no

    tan agresiva, hay que introducir dentro del bucle la instruccin DoEvents. Cuando VB encuentra esta

    funcin el control del microprocesador al sistema operativo, y si hay alguna operacin en espera (la

    pulsacin de una tecla, por ejemplo) la ejecuta y posteriormente vuelve a ejecutar el bucle. De esta

    forma, podemos salvar al menos los datos de las otras aplicaciones que se estn ejecutando al mismo

    tiempo.

    El bucle tomara esta forma:

    Do While Valor < 100

    Valor = valor + 1

    If Valor = 90 then Valor =1

    DoEvents

    Loop

    Salir de un procedimiento antes de terminar su ejecucin

    Y ya que explicamos como se sale de un bucle por la va rpida, veamos como salir de un

    procedimiento usando tambin esa va rpida.

    Para salir de un procedimiento basta con ejecutar la sentencia Exit Sub. En el ejemplo siguiente,

    usamos el botn BotonLeerNombre para introducir el dato Nombre en una base de datos. Pero ese

    campo puede tener como mximo, 20 caracteres. Si el usuario ha introducido mas de 20 caracteres,

    debemos salir del procedimiento donde se introduce ese dato sin ejecutarlo de forma ntegra:

    Private Sub BotonLeerNonbre_Click()

    Mivariable = Text1.Text

    If Len(Mivariable) > 20 Then

    MsgBox "El Campo Nombre debe tener como mximo 20 caracteres"

    Text1.Text = ""

    Exit Sub Con esta instruccin saldramos de este procedimiento Else

    'Aqui vendran las lineas de instrucciones donde trataramos

    'el contenido de Text1, si tuviese menos de 20 caracteres

    End If

    End Sub

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 19

    NOTA. Los ejemplos anteriores sirven solamente de ilustracin para explicar el cdigo que estamos

    estudiando. No pretenda ver una forma mejor de realizar la misma funcin, que seguro que existe.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 20

    BASIC DE VISUAL BASIC ( y 2 )

    Funciones de cadena

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

    alfanumricos. Una cadena es tambin una sucesin de nmeros.

    Ejemplo de cadenas:

    Curso de Visual Basic

    abcdefghijklmnopqrstuvwxyz1234567890

    123456789

    Hagamos una distincin entre una cadena que contenga nmeros y un nmero. Un nmero tiene un

    valor, pero tambin tiene una presentacin escrita. El valor es algo que estar en el ordenador como una

    sucesin de bits. Dependiendo de como lo hayamos declarado, tendr mas o menos bits. Pero esa

    informacin no es un nmero legible por el usuario. Lo que s es legible por el usuario es la

    representacin en numeracin decimal (u octal, o hexadecimal, o incluso en binario) de ese nmero. Esa

    representacin del nmero en un determinado sistema de numeracin es una cadena.

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

    presentar como:

    9 En numeracin decimal

    9 En numeracin hexadecimal

    11 En numeracin octal

    1001 En numeracin binaria

    Esas formas de presentarnos el nmero son CADENAS de caracteres. El valor del nmero dentro del

    ordenador es un NUMERO.

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

    Cuando introducimos un valor numrico por teclado o pantalla, el ordenador para hacer operaciones con

    l, debe transformarlo a un nmero.

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

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

    decimal.

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

    cadena.

    Ejemplos

    Variablenumerica = Val (TextBox1.Text)

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

    TextBox1 en un nmero, y asocia este nmero a la variable Variablenumerica.

    Si el contenido de la caja de textos no fuesen caracteres numrico (abcd, por ejemplo),

    Variablenumerica tomara el valor 0.

    Label1.Caption = Str (Variablenumerica)

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

    variable Variablenumerica .

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 21

    Nota para recordar: Siempre habr que convertir un nmero a una cadena cuando queramos

    presentarlo en la pantalla. Siempre habr que convertir a nmero la cadena de caracteres numricos que

    hayamos introducido por teclado o por pantalla, cuando queramos operar con ese nmero. Un Label,

    cuando tiene que presentar un nico nmero, no le pedir que se lo convierta a cadena, pues VB hace

    automticamente esa conversin. Sin embargo, cuando tiene que presentar un nmero, y adems un

    texto en el mismo Label, VB no realizar automticamente ese cambio, por lo que le dar un error. Le

    recomiendo que convierta los nmeros a variables de cadena siempre que los quiera presentar en un

    Label o TextBox. Cuando tenga mas experiencia en VB ver que esta observacin estar un poco de

    ms. Pero de momento, convierta cada dato segn lo vaya a necesitar.

    Existe una funcin mas amplia que Str. Se trata de Cstr. Esta funcin no solamente transforma un

    nmero a una cadena, como hace Str, sino que convierte cualquier tipo de variable a una variable tipo

    String (cadena).

    Esta funcin transforma, por ejemplo, una variable tipo Booleana en una variable de cadena, devolviendo

    la cadena Verdadero si el valor de la variable booleana es True, y Falso si es False.

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

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

    OptionButton (Activado / Desactivado)

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

    Label1.Caption = Falso si booleana es False

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

    Label2.Caption = 0 si Check1 est desactivado

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

    Label3.Caption = Falso si Check1 est desactivado

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

    Vea mas adelante la coleccin de funciones Cxx

    Mas funciones de cadena:

    Left (cadena, n)

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

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

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

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

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

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

    extrado el que ocupa el lugar m.

    (Vea Instruccin Mid mas abajo)

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

    LCase (cadena) Devuelve otra cadena igual, pero con todos los

    caracteres en minsculas. (LCase = Lower Case)

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 22

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

    UCase (cadena) Devuelve otra cadena igual, pero con todos los

    caracteres en maysculas. (UCase = Upper Case)

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

    Len (cadena) Devuelve la longitud de la cadena

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

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

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

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

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

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

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

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

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

    LTrim Elimina los posibles espacios que tenga una cadena por

    Su izquierda.

    Rtrim Elimina los posibles espacios que tenga una cadena por

    Su derecha.

    Trim Elimina los espacios que tenga una cadena, tanto por su

    izquierda como por su derecha. (No elimina los espacios

    centrales de la cadena)

    Estas tres funciones se emplean para quitar los posibles espacios que pueden resultar de una

    entrada de datos. Tienen especial importancia cuando se toman los datos de un archivo o base de datos,

    donde fueron introducidos por otro programa.

    La funcin Trim hay que usarla cada vez que convertimos un nmero a cadena de caracteres. Cuando

    usamos Str(Nmero), la funcin Str introduce un espacio al comienzo de la cadena que, en la mayor

    parte de los casos, produce un error cuando lo vamos a comparar, a introducir en una base de datos,

    etc.

    (Vea Ejercicio Cap11 del disco)

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

    InStr (cadena, cadena1) Busca la cadena1 dentro de cadena y devuelve el

    nmero de orden dentro de cadena donde se encuentra la primera letra de cadena1

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

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 23

    StrConv Convierte una cadena de caracteres en otra, segn las

    instrucciones que le sigan. Puede sustituir a UCase o LCase si la

    instruccin es UpperCase o LowerCase respectivamente, o poner la primera

    letra de todas las palabras de la cadena en maysculas, si la instruccin es

    ProperCase.

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

    VISUAL BASIC

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

    basic

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

    Basic

    Instruccin Mid

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

    como Funcin de cadena y Mid como Instruccin.

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

    caracteres de otra cadena.

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

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

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

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

    Funciones Asc y Chr

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

    ASCII, hallar el carcter correspondiente.

    Funcin Asc

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

    Sintaxis MiVariable = Asc (Cadena)

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

    en tiempo de ejecucin.

    Ejemplo : Label1 = Asc (ABCD) Label1 presentar 65

    Nota Hay otra funcin (AscB) que puede usarse con bytes contenidos en una cadena. En lugar de

    devolver el cdigo del carcter para el primer carcter, AscB devuelve el primer byte.

    Funcin Chr

    Devuelve el carcter asociado con el cdigo de carcter especificado.

    Sintaxis Chr (CdigoCarcter)

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

    carcter.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 24

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

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

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

    pulsa.

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

    Nota Se proporciona otra funcin (ChrB) para su uso con datos de byte incluidos en una cadena. En

    lugar de devolver un carcter, que puede ser de uno o de dos bytes, ChrB siempre devuelve un solo

    byte.

    FUNCIONES CON NUMEROS

    _________________________

    Visual Basic puede operar con nmeros tal como lo hara cualquier persona. Conoce las 4 reglas, y

    puede utilizar parntesis de la misma forma que los escribimos sobre el papel.

    Los operadores que utiliza para las operaciones bsicas son:

    + Suma

    - Resta

    * Multiplicacin

    / Divisin

    \ Divisin sin decimales

    Mod Resto de una divisin

    ^ Eleva a un exponente

    Ejemplos

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

    Resultado = 15 - 12 ----> Resultado = 3

    Resultado = 15 * 12 ----> Resultado = 180

    Resultado = 15 / 12 ----> Resultado = 1.25

    Resultado = 15 \ 12 ----> Resultado = 1

    Resultado = 15 Mod 12 ----> resultado = 3

    Resultado = 12 ^ 2 ----> Resultado = 144

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

    Estos operadores se denominan Operadores aritmticos.

    Existen otras operaciones que se pueden realizar con nmeros: comparaciones. Los operadores que

    realizan comparaciones se denominan Operadores relacionales. El resultado de las operaciones

    realizadas con estos operadores solamente admiten dos resultados: True (Cierto) o False (Falso)

    Estos operadores son:

    = Igual que

    No igual que

    < Menor que

    Mayor que

    >= Igual o mayor que

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

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

    Operadores Lgicos

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 25

    Estos operadores podemos usarlos con variables Booleanas, es decir, aquellas que solamente pueden

    tomar los valores cero y uno, y con caracteres (un carcter = 1 Byte = 8 bits) realizando la operacin

    correspondiente bit a bit con los 8 bits de cada carcter. Pero en este caso, los parmetros deben

    introducirse en decimal. Por ejemplo, si quiere realizar la funcin And entre el carcter 15 (00001111) y

    el 131 (10000011) , debe ponerlo de la forma Resultado = 15 And 132. El resultado de esta operacin

    ser el byte 00000011, pero como Ud. ya se habr dado cuenta, le devolver el valor 3. En el ejercicio

    Cap11 puede ver un ejemplo muy explicativo

    Operador Devuelve True si Devuelve False si

    And A=True y B=True Cualquier otro caso

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

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

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

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

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

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

    A=False y B=True

    A=False y B=False

    Not A=False A=True

    Like A=True A=False

    Otras Funciones con nmeros

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

    Int y Fix eliminan la fraccin de un nmero y devuelven el valor entero resultante. La diferencia entre Int

    y Fix es que si el nmero es negativo, Int devuelve el primer entero negativo menor o igual a nmero,

    mientras que Fix devuelve el primer entero negativo mayor o igual a nmero. Por ejemplo, Int convierte -

    8,4 en -9, y Fix convierte -8,4 en -8.

    Abs Devuelve el valor absoluto de un nmero

    Sgn Devuelve el signo de un nmero

    Sqr Devuelve la raz cuadrada de un nmero

    Exp Devuelve el nmero elevado al exponente

    indicado

    Log Devuelve el logaritmo natural de ese nmero

    Trigonomtricas

    Sin Devuelve el valor del seno de un ngulo

    (Expresado en radianes)

    Cos Devuelve el coseno de un ngulo (En radianes)

    Tan Devuelve la tangente de un ngulo

    Atn Devuelve un arco cuya tangente sea el nmero

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 26

    (Angulo en radianes)

    Funciones para el Cambio de Base de Numeracin

    Funcin Hex Devuelve una cadena, es decir, un string, que representa el valor

    hexadecimal de un nmero.

    Sintaxis VariabledeCadena = Hex (nmero)

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

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

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

    representa al decimal 16 en la notacin hexadecimal.

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

    nmero.

    Sintaxis VariabledeCadena = Oct (nmero)

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

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

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

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

    Recuerde que estas dos funciones devuelven una Cadena de caracteres, no un nmero. El

    resultado deber tratarlo como una cadena de caracteres.

    Funciones Cxxx para conversin del tipo de datos.

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

    Funcin Cbool Convierte una expresin al tipo de datos Boolean.

    Sintaxis VariableBooleana = Cbool (expresin)

    El argumento expresin es cualquier expresin numrica o expresin de cadena vlida.

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

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

    Funcin CByte Convierte una expresin al tipo de datos Byte.

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

    Funcin CLng Convierte un dato a un tipo Long.

    CLng se diferencia de las funciones Fix e Int en que trunca, en vez de redondear, la parte fraccionaria

    de un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CLng siempre la redondea al

    nmero par ms cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.

    Funcin CInt Convierte un dato a un tipo Integer.

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 27

    CInt se diferencia de las funciones Fix y Int en que trunca, en vez de redondear, la parte fraccionaria de

    un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CInt siempre la redondea al

    nmero par ms cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.

    Funcin CDbl Convierte una expresin al tipo de datos Double.

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

    Debe usar las funcin CByte, CCur, CLng, CInt en lugar de Val para proporcionar conversiones que

    reconozcan las variantes internacionales, cuando se convierte de cualquier otro tipo de datos. Por

    ejemplo, los diferentes separadores decimales se reconocen adecuadamente, dependiendo de la

    configuracin de la informacin local de su PC.

    Si la expresin a convertir queda fuera del intervalo aceptable para el tipo de datos a obtener, ocurrir un

    error.

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

    Debe usar la funcin CStr en lugar de Str para proporcionar conversiones que reconozcan las variantes

    internacionales, cuando se convierte de cualquier otro tipo de datos a String. Por ejemplo, los diferentes

    separadores decimales se reconocen adecuadamente, dependiendo de la configuracin de la

    informacin local de su sistema.

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

    Boolean String conteniendo True o False.

    Date String conteniendo una fecha en el formato de fecha corta de su sistema.

    Null Un error de tiempo de ejecucin.

    Empty String de longitud cero ("").

    Error String conteniendo la palabra Error seguida del nmero de error.

    Numrico String conteniendo el nmero.

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

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

    Nota curiosa y a tener muy en cuenta

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

    cuyas variables que los contienen se han declarado de distinto tipo, puede ocurrir que d un error. Por

    ejemplo, queremos obtener una suma que debe ser un Long, a partir de varios nmeros tipo Byte.

    Declaramos las variables de la siguiente forma:

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

    Suma = I1 + I2 + I3 + I4 + i5

    El resultado de esta operacin es que da un error, pues no entiende que sumando varios Byte (nmeros

    comprendidos entre 0 y 255) puedan dar un nmero de otro tipo. Dar seguramente el error 6, Overflow.

    Para que esto no suceda, haremos el truco de convertir el primero de los nmeros que forman parte en

    la operacin matemtica a un Long, y de esta forma, VB ya se da cuenta que el resultado de esa

    operacin es un Long:

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

    Tenga en cuenta esa observacin inicial que NO ocurre en todas las ocasiones. (Y me parece que era

    un fallo de los muchos que tena VB5)

    Otras Funciones

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 28

    Una funcin curiosa

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

    pasado desde las 12 de la noche.

    Generacin de nmeros aleatorios

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

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

    NOTA MUY IMPORTANTE para versiones de VB anteriores a la 6.- Los nmeros aleatorios

    generados de esta forma son siempre iguales, eso s, dependiendo del nmero que se le introduzca

    como parmetro. Esta generacin de nmeros no produce nmeros aleatorios pues como se dijo,

    dependen del numero que se meta como parmetro, y si este se repite, se repite la sucesin de nmeros

    que nos crea el generador aleatorio. (Afortunadamente lo han corregido en la versin 6)

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

    variable con el tiempo. Ese nmero no puede ser otro que el nmero timer visto antes. Y siempre con la

    precaucin de que medie mas de un segundo entre dos instrucciones Randomize. La funcin toma

    entonces la forma:

    Randomize Timer

    La funcin Randomize devuelve una variable Rnd con un nmero comprendido entre 0 y 1

    (Nunca ser 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una sucesin de

    nmeros aleatorios. No es necesario ejecutar la instruccin Randomize Timer cada vez que se quiera

    obtener un dato de la variable Rnd.

    Un ejemplo. Generador de nmeros para la Lotera Primitiva

    Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botn de comando de

    nombre Command1. Cuando hagamos click sobre el botn de comando deber generar un nmero

    comprendido entre el 1 y el 49. En el procedimiento click de Command1 pondremos el siguiente cdigo:

    Private Sub Command1.click

    Randomize Timer

    A = Rnd * 100

    A = CInt(A)

    Do While A > 49

    A = A - 49

    Loop

    Do While A < 1

    A = A + 49

    Loop

    Label1.caption = A

    End Sub

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

    Funciones con fechas.

    Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la informacin relativa a la fecha y

    la hora. Dispone para ello de una declaracin de variable: Date. Una variable declarada como date

    puede contener una fecha, una fecha y una hora o una hora solamente.

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

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 29

    Time Devuelve la hora actual.

    Now Devuelve la fecha y hora actual.

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

    Day Obtiene el da, a partir de una fecha

    Month Obtiene el mes a partir de una fecha.

    Year Obtiene el ao a partir de una fecha.

    Hour Obtiene la hora a partir de una hora

    Minute Obtiene el minuto a partir de una hora.

    Second Obtiene el segundo a partir de una hora.

    DateAdd Aade un intervalo de tiempo a una fecha

    DateDiff Obtiene el intervalo de tiempo entre dos fechas

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

    DateSerial Compone una fecha a partir de parmetros relativos

    TimeSerial Compone una hora a partir de parmetros relativos.

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

    pueda obtener de l una fecha vlida

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

    obtener el da de hoy solamente:

    Da = Day (Now) Da ser un nmero

    El da de la semana lo obtendramos

    Diasemana = WeekDay (Now) Diasemana ser un nmero

    DateValue, una instruccin que le sacar mucho provecho

    Fecha = DateValue (12-07-96)

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

    La funcin DatePart merece estudio aparte. Con esta funcin podemos averiguar el mes, trimestre,

    semana, da del ao, etc.

    La sintaxis de esta funcin es :

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

    Valor para Intervalo Obtendremos el

    q Trimestre

    m Mes

    y Da del ao

    d Da

    w Da de la semana

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 30

    ww Semana

    h Hora

    n Minuto

    s Segundo

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

    curso, que VB usa constantes que son palabras reservadas por VB que generalmente comienzan por

    vb) que indica que da es para nosotros el primero de la semana

    Constante Nmero Primer da de la semana

    vbSunday 1 Domingo (predeterminado)

    vbMonday 2 Lunes

    vbTuesday 3 Martes

    vbWednesday 4 Mircoles

    vbThursday 5 Jueves

    vbFriday 6 Viernes

    vbSaturday 7 Sbado

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

    Constante Valor Descripcin

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

    (predeterminado).

    vbFirstFourDays 2 Empieza con la primera semana que tenga al menos cuatro

    das en el ao nuevo. (Standard ISO 8086)

    vbFirstFullWeek 3 Empieza con la primera semana contenida completamente en

    el ao nuevo.

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

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

    Variable = DatePart (m, Now) Variable = 10 variable = DatePart ("q", Now) Variable = 3

    variable = DatePart ("d", Now) Variable = 22

    variable = DatePart ("y", Now) Variable = 265

    variable = DatePart ("w", Now) Variable = 3 (Martes, pues el primer da de la semana

    era el domingo - Predeterminado)

    variable = DatePart ("w", Now, vbMonday) Variable = 2 (Primer da semana = lunes)

    variable = DatePart ("ww", Now, vbMonday, vbFirstFourDays)

    Variable = 39, que indica el nmero de la semana dentro del ao.

    Cuidado con como se escriben las fechas. Una posibilidad es la usada en los ejemplos, pero solamente

    vale para el da de hoy. Puede expresar la fecha metindola entre dos signos #, pero en ese caso debe

    estar expresada en el formato mm/dd/yy (mes/da/ao). Ejemplo :

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

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

    usar el formato especificado para el pas :

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

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

    curso.

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

    Estas tres formas de expresar la fecha funcionan perfectamente, al igual que cuando lo hacamos con

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 31

    Now, y el resultado sigue siendo 39.

    Nota para recordar de las variables tipo Date

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

    Visual Basic trata las fechas como nmeros. Y precisamente como un nmero Double. Emplea por lo

    tanto 8 bytes para representar una fecha. Por ejemplo, al da 12 de Julio de 1999, (Fecha en la que el

    autor de este libro alcanz la respetable edad de #9 aos) le corresponde el valor de 36563. Ese es el

    nmero de das transcurridos desde el origen de tiempos tomado por VB (Y por muchas otras

    aplicaciones de Microsoft y de otras marcas) hasta ese fatdico da. Cual es ese origen del tiempo? El

    30 diciembre 1899. Que porqu ese da?. No lo s. Pero es fcil intuir que motivos prcticos para que

    cualquier fecha del siglo XX tuviese un nmero positivo. Porque las anteriores a ese da las trata como

    nmeros negativos. Por ejemplo, el da 12 de Octubre de 1492, VB lo trata como el da nmero -

    148.732. Ese numero puede conocerlo utilizando la funcin CDbl sobre una variable tipo Date. Puede

    verlo en el ejercicio Cap12 del disco.

    Una hora tambin es una variable tipo Date. Y una composicin Da / Hora tambin. Que como trata

    los minutos dentro de una variable Date? Pues como decimales de ese nmero Double. Por ejemplo, la

    hora 12:00:00 del da 12 de julio de 1999 es para VB

    36.563,5

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

    (medianoche) hasta la hora en cuestin. No debemos confundir esta fraccin del da (0,5 para las

    12:00:00) con el valor de la funcin Timer para ese instante (45.000)) que representa el nmero de

    segundos transcurridos desde la 12 de la noche de ese da.

    Cuando se tratan variables tipo Date, VB que es un lenguaje inteligente, interpreta como tipo de datos

    Date determinados datos que no lo son. Por ejemplo, 12 Julio 1999 es tal y como puede verse, una

    sucesin de caracteres. Si ejecutamos el cdigo:

    Dim Pepe as Date

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

    Al estar Pepe declarada como variable tipo Date, VB busca todas las posibilidades de extraer una fecha

    (o una hora) del dato que le estamos metiendo. Otra cosa ocurrira si la declarsemos como String o

    Variant. En cualquiera de estos casos, Pepe contendra el literal introducido, es decir, 12 Julio 1999

    De lo anterior se desprende una cosa, dado que la fecha la guarda como un nmero, no importa en que

    formato le introduzcamos una fecha. Si ponemos que Fecha1 = 12/7/99 es idntico a poner fecha1 = 12/07/1999 Fecha1 = 1999-07-12. Eso s, debe reconocer el formato, y luego, el dato, lo tratar como

    un nmero Double. Lo volveremos a ver cuando estudiemos las bases de datos. Access trata las fechas

    de idntica forma.

    Funcin FORMAT

    Esta funcin permite presentar cadenas numricas o fechas de una determinada forma. Permite

    establecer el Formato de esa cadena.

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

    La sintaxis que presenta es :

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

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 32

    Lo mejor que puede hacer con esta definicin de la sintaxis de Format es olvidarla. No le aclara mucho lo

    que se puede hacer con Format. La funcin Format se usa para poner una fecha en un determinado

    formato. Con la expresin :

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

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

    formato recomendado por la norma ISO-8601 para la presentacin de fechas. Si hubisemos puesto la

    expresin FechadeHoy = Format (Now, dd/mm/yy) , la variable FechadeHoy contendra el valor 21/05/98 referido al da citado.

    Las posibilidades de Format llegan tambin al campo de las cadenas numricas. Por ejemplo la cifra

    123456 se transformar en las siguientes expresiones, segn como empleemos la funcin Format

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

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

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

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

    No se complique la vida con el tema del primer da de la semana ni la primera semana del ao. No lo

    usar con frecuencia. Centrmonos mas en el parmetro Formato. Puede tomar muchos valores.

    Veamos los principales. Primero para nmeros

    Observe que usamos la expresin Variable = Format (1234567,Formato) para todos los ejemplos de nmeros.

    Para poner los nmeros separados por millares :

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

    (Cada carcter # indica que ah va un nmero. El separador debe ser una coma, no un punto, aunque

    esto depende del idioma que est usando)

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

    General Number Muestra el nmero tal como lo tecle

    Currency En formato de la moneda de su sistema operativo

    Fixed Sin separador de millar y dos decimales (1234567,00)

    Standard Con separador de millares y dos decimales (1.234.567,00)

    Percent Multiplica el nmero por cien y lo presenta cono

    porcentaje(123456700,00%)

    Scientific Usa notacin cientfica (1,23E+06)

    .

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

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

    Long Date martes 21 de julio de 1998

    Medium Date 21-jul-98

    Short Date 21/07/98

    yyyy-mm-dd 1998-05-21

    yy-mm-dd 98-07-21

    Long Time 22:19:53

    Medium Time 10:20 PM

    Short Time 22:20

  • LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 33

    hh :mm :ss 22 :21 :29

    hh :mm 22 :21

    RECOMENDACIN ISO 8601

    Va como cultura general. Esta recomendacin dice que el formato de fecha