manual visual basic - guía del estudiante (español)

Upload: carlos-osechas

Post on 10-Apr-2018

240 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    1/605

    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 ) nacien el ao 1964 como una herramienta destinado a principiantes, buscando una forma sencillade realizar programas, empleando un lenguaje casi igual al usado en la vida ordinaria ( eningls), y con instrucciones muy sencillas y escasas. Teniendo en cuenta el ao de sunacimiento, 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 impensablecifra 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 aquellapoca lenguajes de alto nivel como el FORTRAN y el COBOL. En 1978 se defini una normapara unificar los Basics existentes crendose la normativa BASIC STANDARD

    Con la aparicin de los primeros ordenadores personales, dedicados comercialmente al usuarioparticular, all por la primera mitad de los ochenta, el BASIC resurgi como lenguaje deprogramacin 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 tipode ordenadores (Versiones BASICA, GW-BASIC), pero todas estas versiones del BASIC nohicieron otra cosa que terminar de rematar este lenguaje. Los programadores profesionales nollegaron a utilizarlo, habida cuenta de las desventajas de este lenguaje respecto a otrasherramientas (PASCAL, C, CLIPPER). El BASIC con estas versiones para PC lleg incluso aperder 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 pasprcticamente inadvertida, a no ser porque las ltimas versiones del sistema operativo MS-DOSincluan una versin de Quick-BASIC algo recortada (Q-Basic) como un producto mas dentro dela amplia gama de ficheros ejecutables que acompaan al sistema operativo, y aprovecha de lel 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 programasmodularmente, mediante subrutinas y mdulos, capaz de crear programas ya competitivos con

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    2/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 2

    otros lenguajes de alto nivel. Sin embargo llegaba tarde, pues los entornos MS-DOS estaban yasuperados por el entorno grfico Windows.

    Sin embargo algo haba en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si aesto se le aade el entorno grfico Windows, el aprovechamiento al mximo de lasposibilidades 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 algoque satisfaga todas las necesidades de programacin en el entorno Windows. La suma detodas estas cosas es VISUAL - BASIC. Esta herramienta conserva del BASIC de los aos 80nicamente su nombre y su sencillez, y tras su lanzamiento al mercado, la aceptacin a nivelprofesional 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 almercado, cada versin supera y mejora la anterior. Dados los buenos resultados a nivelprofesional de este producto, y el apoyo prestado por el fabricante para la formacin deprogramadores, Visual-Basic se ha convertido en la primera herramienta de desarrollo deaplicaciones en entorno Windows.

    Es obligado decir sin embargo, que sigue siendo BASIC. No se pueden comparar susprestaciones con otros lenguajes cuando deseamos llegar al fondo de la mquina y controlaruno a uno sus registros. No es ese el fin perseguido con VB y si es necesario llegar a esasprecisiones 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, lasherramientas aportadas por VB son mas que suficiente para lograr un programa fcil de realizary de altas prestaciones.

    Caractersticas Generales de Visual-Basic

    Visual-Basic es una herramienta de diseo de aplicaciones para Windows, en la que estas sedesarrollan 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 asociadasa los objetos que forman la interface grfica.

    Es por tanto un termino medio entre la programacin tradicional, formada por una sucesinlineal de cdigo estructurado, y la programacin orientada a objetos. Combina ambastendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos tiposde 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 eseprograma. 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 programadoresnoveles. Una aplicacin no se inicia con el teclado, sino sobre un papel.

    - Creacin de un interface de usuario. Este interface ser la principal va decomunicacin hombre mquina, tanto para salida de datos como para entrada. Sernecesario partir de una o varias ventanas - Formularios - a las que le iremos aadiendolos controles necesarios.

    - Definicin de las propiedades de los controles Se dar la forma, posicin, ytodas las caractersticas necesarias a los controles que hayamos colocado en eseformulario. 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. Ala respuesta a estos eventos (click, doble click, una tecla pulsada, etc.) le llamamos

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    3/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 3

    Procedimiento, y deber generarse de acuerdo a las necesidades del programa.

    - Generacin del cdigo del programa. Un programa puede hacerse solamente conla programacin de los distintos procedimientos que acompaan a cada objeto. Sinembargo, VB ofrece la posibilidad de establecer un cdigo de programa separado deestos eventos. Este cdigo puede introducirse en unos bloques llamados Mdulos, en

    otros bloques llamados Funciones, y otros llamados Procedimientos. EstosProcedimientos no responden a un evento acaecido a un control o formulario, sino queresponden a un evento producido durante la ejecucin del programa.

    No es necesario entender de momento lo anterior. Visual Basic introduce un concepto nuevo deprogramacin, y es necesario cambiar hasta el argot del programador. Posiblemente se lehabrn acumulado demasiados trminos de una sola vez. Es normal. A poco que siga leyendover las cosas mas claras cuando se explique una por una.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    4/605

    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 definicinprevia de una variable. Una variable, como Vd. seguro que conoce, es un nombre que en elprograma le asignamos a un dato. Ese dato podr cambiar. Piense por ejemplo, en unprograma 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 nombretales como:

    NombreApellido1Apellido2DireccinTelfonoSalario

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

    valga:JosPedroMaraLuis

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

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

    Declare Nombre As String Le dice que Nombre es una sucesin de letrasDeclare Apellido1 As StringDeclare Apellido2 As StringDeclare Direccin As StringDeclare Telfono As String Le dice que Telfono es una sucesin de letrasDeclare 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 cmodebe trabajar con l. En otros sistemas de programacin distintos de Basic, es necesariorealizar esta declaracin antes de introducir una variable.

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

    Por ejemplo, si Basic encuentra estas instrucciones

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

    entiende que Salario, Nombre y Telfono son variables, que Salario es un nmero (No hemosmetido su valor entre comillas), y que Nombre y Telfono son sucesiones de caracteresalfanumricos (su valor est entre comillas)

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    5/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 5

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

    Print SalarioPrint Nombre

    Print Telwfono

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

    El peligro de no declarar las variables no termina en esa posibilidad de error. Cuando nodeclaramos el tipo de variables, Visual Basic supone que la variable es de un tipo que soportacualquier tipo de datos : una variable tipo Variant. En ese tipo podr meter cualquier tipo devariable, 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 primerainstruccin BASIC que vamos a estudiar:

    OPTION EXPLICIT

    Obliga a declarar previamente las variables que se vayan a usar. De no haberladeclarado antes de usarla, el programa dar una comunicacin de error.

    Esta declaracin debe ponerla al comienzo de la seccin de declaraciones de cada formulario ymdulo que contenga su aplicacin. Pero no se preocupe de ello puesto que VB lo ha hecho porVd. 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 Requerirdeclaracin de variables. A partir de ahora, ser VB quien ponga la sentencia Option Expliciten el lugar correcto. (Fig. 1.1)

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    6/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 6

    TIPOS DE VARIABLES

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

    Booleana (2) Admite los valores 0 y 1, o True (verdadero) y False (falso)Byte (1) Nmeros enteros, en el rango de 0 a 255Integer (2) Nmeros enteros en el rango de -32768 a 32767Long (4) Nmeros enteros en el rango de -2147483648 a 2147483647Single (4) Punto flotante, simple precisinDoble (8) Punto flotante, doble precisin.Currency (8) Entero, con punto decimal fijo (Tpico de monedas)String (*) Cadenas alfanumricas de longitud variable o fijaDate (8) FechasObjet (4) Referencia a objetosVariant (**) 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 lacadena 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 devariables se pueden introducir muchos datos de distinto tipo. Los bytes necesarios paraalmacenar 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 quea 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. Estetipo ocupa mas bytes que, por ejemplo, un integer. Si el tipo de dato que vamos a introducir enuna variable es un integer, y no la hemos declarado como tal, VB asumir para esa variable quees 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, yno 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 delprograma. Lo mismo podemos decir del resto de las variables, y lo importante que esdeclararlas y declararlas bien.

    NOTA. Observe en la lista anterior que un dato Booleano ocupa 2 Bytes, mientras que un datotipo 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 Byteocupamos menos espacio en memoria. Declarar una variable como Boolean tiene tambin susventajas (escribir menos cdigo por lo general cuando necesite leer o escribir una variable tipoBoolean), 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 eltipo de esta forma, pues existe un serio peligro de error. De cualquier forma, eso es potestativodel programador y de sus costumbres.

    Los caracteres que definen cada tipo de variable son:

    % Integer & Long ! Single

    # Double @ Currency $ String

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    7/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 7

    Ejemplos Prcticos de declaracin de variables

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

    Dim Var1 as String Var1 puede tener cualquier nmero de caracteres

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

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

    La declaracin de variables tipo String con nmero de caracteres predefinido presenta tambininconvenientes 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 merecela pena declarar variables tipo String con el nmero de caracteres prefijado, excepto quesea necesario justamente para definir la longitud de la cadena.

    En una gran parte de los casos una variable que se compone de nmeros debe declararsecomo una variable de cadena de caracteres (String), y no como numrica. Cuando pensamospor ejemplo en un nmero de DNI, compuesto por 7 u 8 cifras, un cdigo postal, el nmero deuna calle, el piso de un edificio, parecen invitar a que la variable que los contenga sea unavariable de tipo numrico (Byte, Integer, Long, ...). Estas variables, aunque su contenido seannmeros, siempre se deben declarar como String, ya que se tratan en realidad de cadenas decaracteres, aunque estos no sean letras sino nmeros. Para aclarar mas estas ideas, piense enel nmero del DNI con la letra del NIF incluido, o que el lugar del DNI se deba rellenar con elnmero 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 postalse declara como numrica, el cero de la izquierda lo desprecia, por lo que ese cdigo postalquedara reducido al 8XXX, nmero de 4 cifras que el cartero nunca reconocera como uncdigo postal, que necesariamente ha de tener 5 cifras. Para terminar, piense la forma deintroducir en una variable numrica el nmero 32Bis de una calle o el piso S2 de un edificio. Opiense en una variable que va a contener un cdigo de un producto. Ese cdigo siempre va aser un nmero, por ejemplo de 9 cifras. Ha pensado como tratara el ordenador una variablenumrica que contiene el cdigo 000100123 ?. El resultado sera que convertira ese cdigo enla cifra 100123, y Vd. deber buscarse la vida para aadir los ceros iniciales a la hora desacarlo 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 deltipo Byte. Si ese datos True / False se va a introducir en una base de datos o en fichero en eldisco, 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 puedecontener nmeros mayores de 255 ni nmeros negativos.

    Cada vez que declare una variable numrica piense en los valores que puede tener, sobre todocuando esa variable va a ser el resultado de una operacin matemtica. Recuerde el escasomargen de una variable tipo Integer ( de -32768 a 32767)

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    8/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 8

    Si la aplicacin va a tratar moneda, piense en la forma de expresar los nmeros decimales y elnmero de ellos permitidos, as como el redondeo. La variable correcta para este caso esCurrency, pero Currency le aade automticamente el tipo de moneda de cada pas (Pts. ParaEspaa) lo que con frecuencia es un engorro. Los datos del tipo de moneda los toma delsistema 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. Perodebe ser objeto de un estudio un poco mas extenso para tener claro que es una fecha paraVisual Basic, como las trata y como se pueden comparar. Lo ver mas adelante al estudiar lasfunciones Format y DateDiff.

    Ambito de las variables.

    Denominamos mbito de una variable a las partes del programa donde esa variable estdeclarada. 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 elformulario como cada uno de sus controles tienen una parte del programa, justamente la parterelacionada con cada uno de los eventos que pueden suceder bien al formulario o a loscontroles. A estas partes las habamos llamado Procedimientos. Podemos tener procedimientosque no estn relacionados con ningn evento ocurrido al formulario o a sus controles. (LosProcedimientos que iremos insertando a lo largo de la aplicacin)Aparte de formularios y controles, un programa puede tener Mdulos, y en cada uno de losmdulos podemos insertar cuantos Procedimientos y Funciones queramos. La estructura de unprograma VB puede ser de la siguiente forma:

    Formulario1 Formulario2 Formulario3 Mdulo1 Modulo2

    Declaraciones Declaraciones Declaraciones Declaraciones DeclaracionesProc. A1 Proc.B1 Proc.C1 Proc.D1 Proc.E1Proc. A2 Proc.B2 Proc.C2 Proc.D2 Proc.E2Proc. A3 Proc.B3 Proc.C3 Proc.D3 FuncinE1Proc. A4 Proc.B4 Proc.C4 Proc.D4 FuncinE2Proc. A5 Proc.BB1 Proc.CC1 FuncinE3Proc. AA1 Proc.BB2 Proc.CC2 FuncinE4Proc. AA2 Proc.B33 Proc.CC3 FuncinE5Proc. AA3 Proc.CC4 FuncinE6

    Si se declara una variable dentro de un procedimiento o Funcin, esa variable "NO SALE" delProcedimiento 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. Paradeclarar una variable a nivel de formulario debe hacerse en la seccin de declaraciones, queest 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 todoslos controles del formulario y en los Procedimientos que pudisemos insertar en eseformulario), pero no sale de dicho formulario. Si se declara como Pblica, esa variable puedeverse por todo el formulario, de la misma forma que lo hara declarada como Privada, y ademspuede 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 eseMdulo, o Pblica, pudiendo en este caso usarse en todo el programa. Cuando se declara una

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    9/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 9

    variable como pblica en un Mdulo, basta referirse a ella por su nombre, sin citar el nombre delMdulo donde se declar.

    En VB es posible declarar varias veces las variables, es decir, pueden declararse a nivel deformulario, en su apartado de declaraciones, y esa variable conservar su valor en todas laspartes 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 variabledistinta 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 eseprocedimiento, la variable con ese nombre volver a ser la declarada en el Formulario. Enrealidad, lo que tenemos son dos variables distintas, pero con el mismo nombre, una declaradapara todo el formulario excepto para el procedimiento donde se volvi a declarar, y otra paraese procedimiento concreto.

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

    For I = 1 To NEsa variable I es prctico declararla con el mismo nombre en cada Procedimiento donde seuse.

    Tipos de declaracin de variables.

    Sentencia DIM Es la forma mas comn de declarar una variable comoPrivada. 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 omdulo, el mbito de la variable ser el explicado anteriormente para una variable declaradacomo Privada. Es decir, esa variable no sale del formulario, procedimiento mdulo donde sedeclar. Cada vez que entremos al formulario, procedimiento o mdulo, esa variable tomar elvalor cero (si es numrica) o nulo (si es string).

    Sentencia PRIVATE Es la forma de declarar una variable como Privada. Puedeemplearse solamente en la seccin de declaraciones de unFormulario 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, esavariable puede usarse en todo ese Formulario o Mdulo (En todos sus Procedimientos yFunciones), 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. Puedeemplearse solamente en la seccin de declaraciones de unFormulario o Mdulo. La sintaxis es de la siguiente forma:

    Public nombrevariable As Tipovariable

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    10/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 10

    Declarando una variable de esta forma en la seccin de declaraciones de un Mdulo, esavariable 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 variablepuede usarse en toda el programa. Para nombrarla, si estamos en el Formulario donde sedeclar basta con citarla por su nombre. Si no estamos en ese Formulario, habr que citarla porel 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. Lasintaxis es:

    Global nombrevariable As tipovariable

    La sentencia Global slo puede usarse en el apartado de declaraciones de un Mdulo. Estasentencia 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 salirde l. Lo peor es que una vez que el programa vuelva a entrar en ese procedimiento, la variableestar puesta a cero. Afortunadamente, esto ltimo tiene solucin. Si declarsemos unavariable en un procedimiento o funcin, como esttica, esa variable, aunque no la podremosutilizar fuera de ese procedimiento o funcin, cuando volvamos a l conservar el valor quetena cuando lo abandonamos. Esta declaracin como esttica se realiza mediante lainstruccin Static

    Static nombrevariable As tipovariable

    El nombre de una variable puede ser tan largo como queramos. hasta un mximo de 40caracteres. 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 declaradocon maysculas y luego la cita con minsculas al escribir el cdigo, que automticamente secambie 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, esdecir, no le va a ocupar mas espacio. Utilice siempre nombres que le definan la variable conalgn sentido. Es muy til a la hora de acordarse como se llaman, y sobre todo, a la hora derehacer un programa que realiz hace seis meses.

    Pese a que Visual Basic no obliga a declarar variables, es muy til hacerlo. De esta forma setiene 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 esteprocedimiento, y dentro de l conserva el valor aunque se salga y se vuelva a entrar)

    Static Variable As Tipovariable

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    11/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 11

    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 TipovariableComo Pblica (Puede usarse en toda la aplicacin)

    Public Variable As Tipovariable

    Global Variable As Tipovariable

    Error tpico de un programador novel de Visual Basic

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

    Dim Variable1, Variable2, Variable3, Variable4 As String

    Esta declaracin est MAL hecha. Visual Basic interpretar que Variable1, Variable2 yVariable3 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 lasiguiente :

    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 laFuncin 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 elusuario.

    La cadena de caracteres devuelta porTypeName puede ser una de las siguientes:

    Cadena devuelta La variable contiene

    Byte Un byteEntero Un entero.Largo Un entero largo.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    12/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 12

    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 cadenasposibles con un parntesis vaco adherido. Por ejemplo, si NombreVariable es una matriz deenteros, 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 tresetiquetas (Label). El botn de comando le aparecer con el nombre de Command1 y los labelscon 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 queparece que va a desplegar algo. Haga click sobre esa flecha y luego sobre la palabra Generalque le aparecer. Teclee aqu las declaraciones de varias variables (observe que en la ventanasimilar de la derecha aparece Declaraciones). Puede que ya le aparezca la linea con OptionExplicit. Si no le aparece, teclela.

    Option ExplicitDim MiString As String Hemos declarado que MiString es una variable tipo StringDim MiEntero As IntegerDim 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 referidaahora 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, Integery CommandButton.

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    13/605

    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 empleaQuick Basic. Sin embargo ha aadido otras nuevas instrucciones, inherentes con laprogramacin 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 determinadacondicin. Son las sentencias por las que empieza cualquier texto de Basic, y este no va sermenos.

    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 lodescrito anteriormente toma la forma:

    If condicin ThenInstrucciones

    ElseOtras instruccionesEnd If

    En este ejemplo, o se cumple una condicin y ejecuta unas determinadas instrucciones, o no secumple, y ejecuta otras instrucciones distintas. Puede ocurrir que, caso de no cumplirse lacondicion primera, se abra un abanico de dos o tres posibilidades. La sentencia condicionaltendra entonces la forma:

    If condicin 1 ThenInstruccionesElseIfCondicin 2Otras instrucciones

    ElseIfCondicin 3Otro juego de instruccionesElseInstrucciones 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 juegode instrucciones:

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    14/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 14

    1 a 4

    Case 1Instrucciones a ejecutar en caso de que variable = 1Case 2Instrucciones a ejecutar en caso de que variable = 2

    Case 3Instrucciones a ejecutar en caso de que variable = 3Case 4Instrucciones a ejecutar en caso de que variable = 4Case ElseInstrucciones a ejecutar en caso de que variable sea distinta a los valoresanterioresEnd Select

    Este procedimiento resulta mucho mas sencillo y rpido que las sentencias If Then Elsevistas 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, yel tratamiento es igual para varios de ellos, puede agruparlos as:

    Select Case ValorCase Is < 20

    InstruccionesCase Is = 20

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

    InstruccionesCase Is > 26

    InstruccionesEnd Select

    Cuando lo que queremos es elegir un valor, no ejecutar instrucciones como hacamosanteriormente, disponemos de otras dos funciones: Choose y Switch.

    Switch toma una serie de parmetros, todos por parejas. El primer trmino de cada pareja es laexpresin a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es unafuncin (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 valoresposibles (1, 2 3)

    La sentencia Choose es casi igual, cambia solamente la forma. La misma intruccin anteriorpuede 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 losvalores que se le haban establecido (1, 2 3 en nuestro caso), la sentencia devuelve el valorNulo ( 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 losprogramadores o no las conocen o se lan (y es comprensible) al utilizarlas. Le garantizo quepuede llegar a ser un gran programador sin necesidad de utilizarlas. Use preferentemente IfEnd If y Select Case.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    15/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 15

    Otra sentencia condicional: IIF

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

    Sintaxis Iif(Expresin, SiEsCierto, SiEsFalso)

    Expresin es la expresin a evaluar.

    SiEsCierto Valor o expresin devuelta si Expresin es True.SiEsFalso Valor o expresin devuelta si Expresin es False.

    Observaciones

    IIfsiempre evala SiEsCierto y SiEsFalso, aunque slo vaya a devolver una de ellas. Por estarazn, deber vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluarSiEsFalso se produce un error de divisin entre cero, se generar un error aunque Expresin dcomo resultado True.

    Como ejemplo, en el formulario de nuestro primer programa introduzca un nuevo botn decomando. Introduzca tambin un TextBox. Vea que poco a poco vamos metiendo cosas aunqueno las conocemos todava. Mas tarde las conocer. El TextBox tendr por nombre Text1. Hagadoble click sobre el botn de comando e introduzca el siguiente cdigo :

    Private Sub Command2_Click()Dim MiVariable As StringMiVariable = IIf(Clng(Text1.Text) > 100, "Es mayor", "Es menor")Label1 = MiVariableEnd Sub

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

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

    Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar laspropiedades 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 deinstrucciones, que se estarn realizando mientras se cumpla una condicin o mientras no secumpla 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 dejede cumplirse) una condicin. Es el llamado bucle por condicin.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    16/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 16

    Bucle por contador

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

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

    Este "programa" nos presentar en una caja (Label) los caracteres cuyo nmero ASCII vayadesde el 65 (A) al 90 (Z) Comenzar presentando el correspondiente al nmero 65, e irpresentando 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 = 0Do While X < 1000X = X + 1Loop

    El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero, eincrementa 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 queX sea menor que 1000, sale del bucle. Acabamos de realizar un temporizador, y tambin deexponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Comofinal de leccin, se propone un problema. Con el primer bucle, donde visualizbamos loscaracteres A a la Z, posiblemente no nos diese tiempo de ver cada una de las letras que ibanapareciendo 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 untemporizador cada vez que presente una letra, y as nos dar tiempo a verla. Con los dosbucles vistos anteriormente ya podemos hacerlo.

    Si lo que queremos es que el programa se ejecute mientras no se cumpla una determinadacondicin, la sentencia ser:

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

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

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

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    17/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 17

    Este es nuestro primer programa en BASIC. En VISUAL BASIC es idntico, pero nos falta lainterface grfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece alabrirlo, introducir una etiqueta, (Label) que llevar el nombre por defecto de Label1. Solo nosqueda 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 clicksobre 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 automticamenteFor N=65 To 90Label1.caption = Chr ( N )Label1.RefreshN ' Refresca la etiquetaX = 0Do While X < 1000 ' Bucle de temporizacin (*)X = X + 1LoopNext N ' Termina el bucle de temporizacinEnd Sub ' Esta lnea sale automticamente

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

    (*) Las temporizaciones no se hacen realmente as. El ejemplo anterior no deja de ser unaforma sencilla de detener el programa, para que en los comienzos de su carrera comoprogramador pueda ver el contenido de una etiqueta. Si lo hiciera de esta forma, su ordenadorestara detenido realizando una funcin bastante triste, contar hasta 1000 para luego continuarel programa. Y lo que es peor, en un ordenador a 300 MHz. Tardara menos tiempo que en unoa 66. Esta misma funcin puede hacerla con Sleep que la ver mas adelante, que es la formalimpia 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 lacondicin (Bucles por condicin) o a que se haya llegado al final de la cuenta (Bucles porcontador). Pero puede ocurrir que interese salir del bucle sin haber terminado la ejecucin totaldel mismo, por ejemplo, porque ya hemos encontrado lo que estabamos buscando, y sera unaprdida 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 DoUntil o Do While, o con Exit Forcuando lo hemos comenzado con For ... To

    Ejemplos

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

    Contador = 0Do While Contador < 1000Contador = Contador + 1DoEventsIf MSComm1.DSRHolding = True Then Exit DoSleep (1000)Loop

    Aqu comenzamos a atender al puerto serie

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    18/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 18

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

    For I = 1 To 1000

    If MSComm1.DSRHolding = False Then Exit DoMSComm1.Output = Str(I)Next I

    No se preocupe que no entienda esto del MSComm. Lo entender perfectamente unoscaptulos mas adelante. Lo importante es que entienda la idea de salir de un bucle por la varpida.

    Funcin DoEvents

    Si hablameos de bucles, necesariamente debemos hablar de la funcin DoEvents. Y es as porla misma razn que cada vez que ponemos un bucle, deberamos poner dentro de ese bucle la

    palabra mgica DoEvents.

    Imagnese que Visual Basic est ejecutando este cdigo:

    Do While Valor < 100Valor = valor + 1If Valor = 90 then Valor =1Loop

    Observar que la variable Valor nunca podr llegar a tener el valor 100, puesto que cada vezque llega a 90 le ponemos de nuevo el valor 0. El programa no va a salir nunca del bucle, peroadems no podr atender a otros eventos que se produzcan en el ordenador (por ejemplo lapulsacin de una tecla) ya que el microprocesador est atendiendo solamente a ese bucle. Si loest ejecutando desde el propio entorno de Visual Basic, deber parar la ejecucin mediante lasteclas Ctrl Pausa. No podr pararlo mediante el botn Terminar de la barra de herramientasde 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 esemomento en su PC.

    No es difcil cometer este error involuntariamente. Esto es lo que se llama un bucle infinito. Paraque no suceda, o al menos, que si nuestro programa entra en un bucle infinito se pueda salir deuna forma no tan agresiva, hay que introducir dentro del bucle la instruccin DoEvents. CuandoVB encuentra esta funcin el control del microprocesador al sistema operativo, y si hay algunaoperacin en espera (la pulsacin de una tecla, por ejemplo) la ejecuta y posteriormente vuelvea 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 < 100Valor = valor + 1If Valor = 90 then Valor =1DoEventsLoop

    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 unprocedimiento usando tambin esa va rpida.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    19/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 19

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

    Private Sub BotonLeerNonbre_Click()Mivariable = Text1.TextIf 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 IfEnd Sub

    NOTA. Los ejemplos anteriores sirven solamente de ilustracin para explicar el cdigo queestamos estudiando. No pretenda ver una forma mejor de realizar la misma funcin, que seguroque existe.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    20/605

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    21/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 21

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

    Nota para recordar: Siempre habr que convertir un nmero a una cadena cuando queramos presentarlo en la pantalla. Siempre habr que convertir a nmero la cadena de caracteres

    numricos que hayamos introducido por teclado o por pantalla, cuando queramos operar conese nmero. Un Label, cuando tiene que presentar un nico nmero, no le pedir que se loconvierta a cadena, pues VB hace automticamente esa conversin. Sin embargo, cuando tieneque presentar un nmero, y adems un texto en el mismo Label, VB no realizarautomticamente ese cambio, por lo que le dar un error. Le recomiendo que convierta losnmeros 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. Perode momento, convierta cada dato segn lo vaya a necesitar.

    Existe una funcin mas amplia que Str. Se trata de Cstr. Esta funcin no solamente transformaun nmero a una cadena, como hace Str, sino que convierte cualquier tipo de variable a unavariable 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 esFalse.

    Puede tambin transformar a una cadena de caracteres el valor de un CheckBox o de unOptionButton. En estos casos devuelve 0 y 1 para el CheckBox (Desactivado / Activado) yVerdadero Falso para el OptionButton (Activado / Desactivado)

    label1.Caption = CStr(booleana) Label1.Caption = Verdadero si booleana es trueLabel1.Caption = Falso si booleana es False

    Label2 = CStr(Check1.Value) Label2.Caption = 1 si Check1 est activadoLabel2.Caption = 0 si Check1 est desactivado

    Label3 = CStr(Option1.Value) Label3.Caption = Verdadero si Check1 est activadoLabel3.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 carcterextrado el que ocupa el lugar m.

    (Vea Instruccin Mid mas abajo)

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    22/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 22

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

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

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

    UCase (cadena) Devuelve otra cadena igual, pero con todos loscaracteres 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 lacadena. 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 porSu izquierda.

    Rtrim Elimina los posibles espacios que tenga una cadena porSu derecha.

    Trim Elimina los espacios que tenga una cadena, tanto por suizquierda como por su derecha. (No elimina los espacios

    centrales de la cadena)

    Estas tres funciones se emplean para quitar los posibles espacios que pueden resultarde una entrada de datos. Tienen especial importancia cuando se toman los datos de un archivoo 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 cadenaque, en la mayor parte de los casos, produce un error cuando lo vamos a comparar, a introduciren una base de datos, etc.

    (Vea Ejercicio Cap11 del disco)

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    23/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 23

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

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

    StrConv Convierte una cadena de caracteres en otra, segn lasinstrucciones que le sigan. Puede sustituir a UCase o LCase si lainstruccin es UpperCase o LowerCase respectivamente, o poner laprimera letra de todas las palabras de la cadena en maysculas, si lainstruccin es ProperCase.

    Resultado = StrConv (cadena, UpperCase) ----> Resultado = CURSO DEVISUAL BASIC

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

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

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

    La Instruccin Mid reemplaza un nmero especificado de caracteres en una variable de cadenacon 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 elnmero 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, ocurrirun 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. Enlugar de devolver el cdigo del carcter para el primer carcter, AscB devuelve el primer byte.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    24/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 24

    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 identificaa un carcter.

    Ejemplo Label1 = Chr(65) Label1 contendr el carcterA

    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 amboscaracteres 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 siempredevuelve un solo byte.

    FUNCIONES CON NUMEROS_________________________

    Visual Basic puede operar con nmeros tal como lo hara cualquier persona. Conoce las 4reglas, 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 decimalesMod Resto de una divisin^ Eleva a un exponente

    Ejemplos

    Resultado = 12 + 15 ----> Resultado = 27Resultado = 15 - 12 ----> Resultado = 3Resultado = 15 * 12 ----> Resultado = 180Resultado = 15 / 12 ----> Resultado = 1.25

    Resultado = 15 \ 12 ----> Resultado = 1Resultado = 15 Mod 12 ----> resultado = 3Resultado = 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. Losoperadores que realizan comparaciones se denominan Operadores relacionales. El resultadode las operaciones realizadas con estos operadores solamente admiten dos resultados: True(Cierto) o False (Falso) Estos operadores son:

    = Igual que No igual que

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    25/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 25

    < 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

    Estos operadores podemos usarlos con variables Booleanas, es decir, aquellas que solamentepueden tomar los valores cero y uno, y con caracteres (un carcter = 1 Byte = 8 bits) realizandola operacin correspondiente bit a bit con los 8 bits de cada carcter. Pero en este caso, losparmetros deben introducirse en decimal. Por ejemplo, si quiere realizar la funcin And entreel carcter 15 (00001111) y el 131 (10000011) , debe ponerlo de la forma Resultado = 15 And132. El resultado de esta operacin ser el byte 00000011, pero como Ud. ya se habr dadocuenta, 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=TrueA=False y B=True A=False y B=False

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

    Imp A=True y B=True A=True y B=FalseA=False y B=TrueA=False y B=False

    Not A=False A=True

    Like A=True A=False

    Otras Funciones con nmeros

    Int , FixDevuelven la parte entera de un nmero con decimales

    IntyFixeliminan la fraccin de un nmero y devuelven el valor entero resultante. La diferenciaentre IntyFixes que si el nmero es negativo, Intdevuelve el primer entero negativo menor oigual a nmero, mientras que Fixdevuelve 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 exponenteindicado

    Log Devuelve el logaritmo natural de ese nmero

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    26/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 26

    Trigonomtricas

    Sin Devuelve el valor del seno de un ngulo(Expresado en radianes)

    Cos Devuelve el coseno de un ngulo (En radianes)

    Tan Devuelve la tangente de un ngulo

    Atn Devuelve un arco cuya tangente sea el nmero(Angulo en radianes)

    Funciones para el Cambio de Base de Numeracin

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

    Sintaxis VariabledeCadena = Hex (nmero)

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

    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 elintervalo 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.

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    27/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 27

    Si expresin es cero, se devuelve False; de lo contrario, se devuelve True Si la expresin no sepuede 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 partefraccionaria de un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CLngsiempre la redondea al nmero par ms cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 a 2.

    Funcin CInt Convierte un dato a un tipo Integer.

    CInt se diferencia de las funciones Fix y Int en que trunca, en vez de redondear, la partefraccionaria de un nmero. Cuando la parte fraccionaria es exactamente 0,5, la funcin CIntsiempre 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 proporcionarconversiones que reconozcan las variantes internacionales, cuando se convierte de cualquierotro tipo de datos. Por ejemplo, los diferentes separadores decimales se reconocenadecuadamente, 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 CStren lugar de Strpara proporcionar conversiones que reconozcan lasvariantes internacionales, cuando se convierte de cualquier otro tipo de datos a String. Porejemplo, los diferentes separadores decimales se reconocen adecuadamente, dependiendo dela 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 entrenmeros, 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 variosnmeros tipo Byte. Declaramos las variables de la siguiente forma:

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    28/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 28

    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 seguramenteel error 6, Overflow. Para que esto no suceda, haremos el truco de convertir el primero de losnmeros que forman parte en la operacin matemtica a un Long, y de esta forma, VB ya se dacuenta 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 pareceque era un fallo de los muchos que tena VB5)

    Otras Funciones

    Una funcin curiosa

    Timer Tiempo acumulado Devuelve el tiempo (en segundos) que hapasado desde las 12 de la noche.

    Generacin de nmeros aleatorios

    Randomize (Numero) Inicia el generador aleatorio tomando como dato de partidael Numero. Devuelve el resultado en una variable llamada Rnd.

    NOTA MUY IMPORTANTE para versiones de VB anteriores a la 6.-Los nmeros aleatoriosgenerados 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 puescomo se dijo, dependen del numero que se meta como parmetro, y si este se repite, se repitela sucesin de nmeros que nos crea el generador aleatorio. (Afortunadamente lo han corregidoen la versin 6)

    La forma de obtener nmeros realmente aleatorios es introducir como parmetro un nmeroque 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 instruccionesRandomize. 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 unasucesin de nmeros aleatorios. No es necesario ejecutar la instruccin Randomize Timercada 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 decomando de nombre Command1. Cuando hagamos click sobre el botn de comando debergenerar un nmero comprendido entre el 1 y el 49. En el procedimiento click de Command1pondremos el siguiente cdigo:

    Private Sub Command1.click

    Randomize Timer

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    29/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 29

    A = Rnd * 100A = CInt(A)Do While A > 49A = A - 49LoopDo While A < 1

    A = A + 49LoopLabel1.caption = AEnd 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 ala fecha y la hora. Dispone para ello de una declaracin de variable: Date. Una variable

    declarada como date puede contener una fecha, una fecha y una hora o una hora solamente.

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

    Time Devuelve la hora actual.

    Now Devuelve la fecha y hora actual.

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

    Day Obtiene el da, a partir de una fecha

    Month Obtiene el mes a partir de una fecha.Year Obtiene el ao a partir de una fecha.

    Hour Obtiene la hora a partir de una hora

    Minute Obtiene el minuto a partir de una hora.

    Second Obtiene el segundo a partir de una hora.

    DateAdd Aade un intervalo de tiempo a una fecha

    DateDiff Obtiene el intervalo de tiempo entre dos fechas

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

    DateSerial Compone una fecha a partir de parmetros relativos

    TimeSerial Compone una hora a partir de parmetros relativos.

    DateValue Devuelve una fecha a partir de un dato que se le parezca y VBpueda obtener de l una fecha vlida

    Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Porejemplo, para obtener el da de hoy solamente:

    Da = Day (Now) Da ser un nmero

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    30/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 30

    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 Trimestrem Mesy Da del aod Daw Da de la semanaww Semanah Horan Minutos Segundo

    El parmetro Primerdasemana puede ser un nmero o una constante (veremos a lo largo detodo el curso, que VB usa constantes que son palabras reservadas por VB que generalmentecomienzan porvb) que indica que da es para nosotros el primero de la semana

    Constante Nmero Primer da de la semanavbSunday 1 Domingo (predeterminado)vbMonday 2 LunesvbTuesday 3 MartesvbWednesday 4 MircolesvbThursday 5 JuevesvbFriday 6 ViernesvbSaturday 7 Sbado

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

    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 menoscuatro

    das en el ao nuevo. (Standard ISO 8086)vbFirstFullWeek 3 Empieza con la primera semana contenidacompletamente en

    el ao nuevo.

    Por ejemplo, y tomando como referencia para todos los ejemplos el da 22 de Septiembre de1998, fecha en la que se ha escrito este texto, (Now = 22/09/1998), tenemos :

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    31/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 31

    Variable = DatePart (m, Now) Variable = 10variable = DatePart ("q", Now) Variable = 3variable = DatePart ("d", Now) Variable = 22variable = DatePart ("y", Now) Variable = 265variable = 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, perosolamente vale para el da de hoy. Puede expresar la fecha metindola entre dos signos #, peroen 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 comillasdobles, 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 aoen curso.

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

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

    Nota para recordar de las variables tipo Date

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

    Visual Basic trata las fechas como nmeros. Y precisamente como un nmero Double. Empleapor lo tanto 8 bytes para representar una fecha. Por ejemplo, al da 12 de Julio de 1999, (Fechaen la que el autor de este libro alcanz la respetable edad de #9 aos) le corresponde el valorde 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. Cuales ese origen del tiempo? El 30 diciembre 1899. Que porqu ese da?. No lo s. Pero es fcilintuir 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 deOctubre 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 deldisco.

    Una hora tambin es una variable tipo Date. Y una composicin Da / Hora tambin. Quecomo trata los minutos dentro de una variable Date? Pues como decimales de ese nmeroDouble. 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 paralas 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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    32/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 32

    datos Date determinados datos que no lo son. Por ejemplo, 12 Julio 1999 es tal y como puedeverse, una sucesin de caracteres. Si ejecutamos el cdigo:

    Dim Pepe as DatePepe = 12 Julio 1999 A partir de ahora, Pepe contendr el valor 36.563

    Para ver ese valor basta con hacerLabel1.Caption = CDbl (Pepe)

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

    De lo anterior se desprende una cosa, dado que la fecha la guarda como un nmero, no importaen que formato le introduzcamos una fecha. Si ponemos que Fecha1 = 12/7/99 es idntico aponer 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 puededar de s. La sintaxis que presenta es :

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

    Lo mejor que puede hacer con esta definicin de la sintaxis de Format es olvidarla. No le aclaramucho lo que se puede hacer con Format. La funcin Format se usa para poner una fecha enun 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. Sihubisemos puesto la expresin FechadeHoy = Format (Now, dd/mm/yy) , la variableFechadeHoy contendra el valor21/05/98 referido al da citado.

    Lasposibilidades 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 funcinFormat

    Variable = Format(123456, "Currency") Variable = 123.456 PtsVariable = 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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    33/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 33

    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 tecleCurrency En formato de la moneda de su sistema operativoFixed 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 fechay hora actual (21/07/98 a las 22:16:00 )

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

    Short Time 22:20hh :mm :ss 22 :21 :29hh :mm 22 :21

    RECOMENDACIN ISO 8601

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

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

    Tenga presente esta recomendacin. La Administracin Espaola est obligada a exigir sucumplimiento en todas aquellas aplicaciones que realicen intercambios de fecha y hora.

    Format dispone de mas opciones. Sera muy largo explicarlas aqu. Para mas informacin, enla 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 unavariable tipo fecha

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

    http://www.microsoft.com/http://www.microsoft.com/
  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    34/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 34

    Private Sub LFormat1_Click()Dim Pepe As DatePepe = Text1.TextLFormat1 = Format(Pepe, "yyyy-mm-dd")End Sub

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

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    35/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 35

    MATRICES__________

    Cuando utilizamos varias variables que tienen un significado similar para nosotros, pero que sondistintas (Por ejemplo, el nombre de los alumnos de una clase) podemos utilizar una matriz.Esta matriz est formada por tantos elementos como alumnos tenga la clase. El nombre

    asociado a cada uno de los elementos de la matriz puede ser:

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

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

    Option Base 1

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

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

    Dim Alumno (25) as String

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

    Una matriz tambin se puede declarar de la siguiente forma :

    Dim Alumno(1 To 25) as String

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

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

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

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

    Alumno (15, 2)

    Podemos definir matrices de dimensin superior a dos. Podemos llegar a un mximo de 60dimensiones. Una matriz de 5 dimensiones se declarara:

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

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

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

    ReDim Alumno (1To 25)

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

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    36/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 36

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

    ReDim (25)

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

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

    Si usa la palabra clave Preserve en matrices de dimensin superior a 1, va a encontrarse concomportamientos no esperados. Como podr ver en la Ayuda de VB, usando ReDim Preserveslo puede cambiar el tamao de la ltima dimensin de matriz y no puede modificar en ningnmomento el nmero de dimensiones. NO es cierto del todo. S lo podr hacer una sola vez.

    Respecto a cambiar el nmero de dimensiones, si ha declarado la matriz con unas dimensionesdeterminadas, ya no podr cambiar las dimensiones ni con ReDim ni con ReDim Preserve. Lesaldr 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 lasegunda a 3), sino que tambin hemos cambiado el nmero de elementos en cada dimensin.

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

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

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

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

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

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

    ReDim Preserve (1 To 5, 1 To 9)

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

    ReDim Preserve (1 To 5, 1 To 20)ReDim Preserve (1 To 5, 1 To 30)

  • 8/8/2019 manual visual basic - gua del estudiante (espaol)

    37/605

    LSB Visual Basic Gua del Estudiante Captulo 1 Pgina 37

    es decir, no podremos hacer esto :

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

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

    Cuando a lo largo de la aplicacin se va redimensionando una matriz, podemos llegar lacircunstancia de que, en un momento determinado, no sepamos las dimensiones de esa matriz.

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

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

    Sintaxis UBound(nombredelamatriz[, dimensin])

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

    Sintaxis LBound(nombredelamatriz[, dimensin])

    Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de laaplicacin se ejecut la siguiente instruccin vlida :

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

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

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

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

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

    Descripcin

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

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

    Donde:

    Expresion es la variable que contiene la cadena de caracteres