Tipos de declaración de variables. Sentencia DIM Es la forma mas común de declarar una variable como Privada. Puede emplearse en un Procedimiento, Función, Formulario o Módulo. La sintaxis es de la siguiente forma: Dim nombrevariable As Integer(o el tipo que sea) Declarando una variable con la sentencia DIM, en un formulario, Función, procedimiento o módulo, el entorno de la variable será el explicado anteriormente para una variable declarada como Privada. Es decir, esa variable no sale del formulario, procedimiento ó módulo donde se declaró. Cada vez que entremos al formulario, procedimiento o módulo, esa variable tomará el valor cero (si es numérica) o nulo (si es string). Sentencia PRIVATE Es la forma de declarar una variable como Privada. Puede emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma: Private nombrevariable As Tipovariable Declarando una variable mediante la sentencia PRIVATE en un Formulario o Módulo, esa variable puede usarse en todo ese Formulario o Módulo (En todos sus Procedimientos y Funciones), pero NO fuera del Formulario o Módulo donde se declaró. La sentencia Private no puede usarse en un procedimiento o función. Sentencia PUBLIC Es la forma de declarar una variable como Pública. Puede emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma: Publicnombrevariable As Tipovariable Declarando una variable de esta forma en la sección de declaraciones de un Módulo, esa variable puede usarse en cualquier parte del programa citándola simplemente por su nombre. Si se declara de esta forma en la sección de declaraciones de un Formulario, esa variable puede usarse en toda el programa. Para nombrarla, si estamos en el Formulario donde se declaró basta con citarla por su nombre. Si no estamos en ese Formulario, habrá que citarla por el nombre del Formulario, seguido del nombre de la variable, separados por un punto : NombreFormulario.Nombrevariable En un Módulo puede usarse también la sentencia Global en vez de Public : Sentencia GLOBALDeclara una variable que es válida en todo el programa. La sintaxis es: Global nombrevariable Astipovariable La sentencia Global sólo puede usarse en el apartado de declaraciones de un Módulo. Mediante la sentencia Global la variable puede usarse en todo el espacio del programa. Sentencia STATIC Como se dijo anteriormente, una variable declarada en un procedimiento pierde su valor al salir de él. Lo peor es que una vez que el programa vuelva a entrar en ese procedimiento, la variable estará puesta a cero. Afortunadamente, esto último tiene solución. Si declarásemos una variable en un procedimiento o función, como estática, esa variable, aunque no la podremos utilizar fuera de ese procedimiento o función, cuando volvamos a él conservará el valor que tenía cuando lo abandonamos. Esta declaración como estática se realiza mediante la intrucción Static Static nombrevariable Astipovariable El nombre de una variable puede ser tan largo como queramos. hasta un máximo de 40 caracteres. En la versión VB para España se pueden usar incluso la Ñ y vocales acentuadas. Es indiferente usar mayúscula ó minúsculas. No se sorprenda, si por ejemplo, la ha declarado con mayúsculas y luego la cita con minúsculas al escribir el código, que automáticamente se cambie a mayúsculas. El nombre de una variable siempre debe comenzar por una letra. No hay problema por utilizar variables largas. Al compilar el programa no se lleva el nombre, es decir, no le va a ocupar mas espacio. Utilice siempre nombres que le definan la variable con algún sentido. Es muy útil a la hora de acordarse como se llaman, y sobre todo, a la hora de rehacer un programa que realizó hace seis meses. Pese a que Visual Basic no obliga a declarar variables, es muy útil hacerlo. De esta forma se tiene control sobre el programa. La experiencia se lo irá demostrando. Resumimos la forma de declarar una variable : En un Procedimiento (La variable no puede usarse fuera de esta Procedimiento) Dim Variable As Tipovariable En un Procedimiento, como permanente (La variable no puede usarse fuera de este procedimiento, y dentro de él conserva el valor aunque se salga y se vuelva a entrar) Static Variable As Tipovariable En un Formulario (En su sección de declaraciones) Como Privada (Solamente se puede usar en ese Formulario) Dim Variable As Tipovariable ó Private Variable As Tipovariable Como Pública (Puede usarse en toda la aplicación) Public Variable As Tipovariable En un Módulo Como Privada (Solamente puede usarse en ese Módulo) Dim Variable As Tipovariable ó Private Variable As Tipovariable Como Pública (Puede usarse en toda la aplicación) Public Variable As Tipovariable ó Global Variable As Tipovariable Error típico de un programador novel de Visual Basic Creo que esta costumbre viene del lenguaje C. Pero no vale en VB. Se trata de declarar varias variables juntas en una misma línea : Dim Variable1, Variable2, Variable3, Variable4 As String Esta declaración está MAL hecha. Visual Basic interpretará que Variable1, Variable2 y Variable3 son del tipo Variant, y solamente Variable4 la supone como tipo String La forma correcta de hacerlo, si queremos declarar esas variables un una sola línea, es la siguiente : Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 As String. Lenguaje Basic del Visual Basic. No ha sido un juego de palabras. VB emplea unas instrucciones casi iguales a las que emplea Quick Basic. Sin embargo ha añadido otras nuevas instrucciones, inherentes con la programación visual. Vamos a estudiar aquí las instrucciones y definiciones mas sencillas, comunes a QB y VB. Sentencias condicionales. Llamamos sentencias condicionales a aquellas que se realizan si se cumple una determinada condición. Son las sentencias por las que empieza cualquier texto de Basic, y este no va ser menos. La sentencia condicional mas usada es: Si se cumple una condición Entonces Realiza estas instrucciones Si no se cumple Realiza estas otras instrucciones Fin de la sentencia. Así de fácil es programar en Basic. Lo que ocurre es que esta herramienta habla inglés, y lo descrito anteriormente toma la forma: If condición Then Instrucciones Else Otras instrucciones End If En este ejemplo, la condición era que, o se cumple una condición y ejecuta unas determinadas instrucciones, o no se cumple, y ejecuta otras condiciones distintas. Puede ocurrir que, caso de no cumplirse la condicione primera, se abra un abanico de dos o tres posibilidades. La sentencia condicional tendría entonces la forma: If condición 1 Then Instrucciones ElseIf Condición 2 Otras instrucciones ElseIf Condición 3 Otro juego de instrucciones Else Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3. End If Como decíamos anteriormente, este es el tipo de sentencia condicional mas usada. Existe otra: 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 Case 3 Instrucciones a ejecutar en caso de que variable = 3 Case 4 Instrucciones a ejecutar en caso de que variable = 4 End Select Este procedimiento resulta mucho mas sencillo y rápido que las sentencias If Then Else vistas anteriormente, cuando el margen de elección es mayor que 2. Cuando lo que queremos es elegir un valor, no ejecutar instrucciones como hacíamos anteriormente, disponemos de otras dos funciones: Choose y Switch. Switch toma una serie de parámetros, todos por parejas. El primer término de cada pareja es la expresión a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es una función (las funciones las veremos muy pronto) A = Switch (B=1, 5, B=2, 7, B=3, 11) Esta instrucción obtiene un valor para A que dependerá del valor que tome B entre los valores posibles (1, 2 ó 3) La sentencia Choose es casi igual, cambia solamente la forma. La misma intrucción anterior puede realizarse con Choose de la siguiente forma: A = Choose ( B, 5, 7, 11 ) En estas sentencias, Switch y Choose, si el valor de B no coincide con ninguno de los valores que se le habían establecido (1, 2 ó 3 en nuestro caso), la sentencia devuelve el valor Nulo ( Null ). Esto puede producir algún error si no se contempla esa posibilidad. Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar las propiedades de un objeto, obtener resultados de operaciones, .... Sentencias de bucle. Es muy común utilizar bucles a lo largo de un programa. Un bucle es una sucesión repetitiva de instrucciones, que se estarán realizando mientras se cumpla una condición o mientras no se cumpla otra condición. Es tan sencillo como esto: Mientras condición Instrucciones Fin del bucle Existen dos formas de bucle: Una, que realiza un número determinado de recorridos por el bucle. Es el denominado bucle por contador. Otra, realiza el bucle hasta que se cumpla (o deje de cumplirse) una condición. Es el llamado bucle por condición. Bucle por contador Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a presentar las 26 letras mayúsculas del alfabeto inglés For N=65 To 90 Label1.caption = Chr ( N ) Next N Este "programa" nos presentará en una caja (Label) los caracteres cuyo número ASCII vaya desde el 65 (A) al 90 (Z) Comenzará presentando el correspondiente al número 65, e irá presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parará. Bucles por condición Ejecuta las instrucciones del bucle mientras se cumple una condición X = 0 Do While X < 1000 X = X + 1 Loop El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero, e incrementa su valor una unidad. Analiza si el valor de X es menor que 1000, y si es cierto, vuelve a realizar el bucle. Así hasta que X ya no sea menor que 1000. Al dejar de cumplirse que X sea menor que 1000, sale del bucle. Acabamos de realizar un temporizador, y también de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como final de lección, se propone un problema. Con el primer bucle, donde visualizábamos los caracteres A a la Z, posiblemente no nos diese tiempo de ver cada una de las letras que iban apareciendo en la pantalla, en la etiqueta Label1, dado que cambiaría con mucha velocidad, y solamente veríamos la Z, que es donde se detuvo el programa. Podemos poner un temporizador cada vez que presente una letra, y así nos dará tiempo a verla. Con los dos bucles vistos anteriormente ya podemos hacerlo. Si lo que queremos es que el programa se ejecute mientras no se cumpla una determinada condición, la sentencia será: X = 0 Do Until X > 1000 X = X + 1 Loop Observe que la diferencia entre una y otra es la condición, While para indicar Mientras se cumpla que ... y Until para indicar Mientras no se cumpla que .... Para terminar bien el programa anterior utilizaremos la condición de While (Mientras se cumpla la condición) For N=65 To 90 Label1.caption = Chr ( N ) Label1.RefreshN' Refresca la etiqueta X = 0 Do While X < 1000 X = X + 1 Loop Next N Este es nuestro primer programa en BASIC. En VISUAL BASIC es idéntico, pero nos falta la interface gráfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece al abrirlo, introducir una etiqueta, (Label) que llevará el nombre por defecto de Label1. Solo nos queda pensar donde introducimos el código anterior. Podemos introducir un botón de comando (Command Button) que saldrá con el nombre por defecto de Command1. Haga doble click sobre el botón. Aparecerá el procedimiento Click. Este procedimiento es el que se realiza cuando hacemos click sobre ese botón. Escriba en ese procedimiento este código. Private Sub Command1_Click() ' Esta línea sale automáticamente For N=65 To 90 Label1.caption = Chr ( N ) Label1.RefreshN' Refresca la etiqueta X = 0 Do While X < 1000' Bucle de temporización X = X + 1 Loop Next N' Termina el bucle de temporización End Sub ' Esta línea sale automáticamente Hemos puesto nuestra primera piedra en Visual Basic. Este ejemplo es muy sencillo. Visual Basic es tan sencillo como este ejemplo. BASIC DE VISUAL BASIC (2) ___________________________ Funciones de cadenas Se denomina CADENA a una sucesión de caracteres. Una cadena puede tener uno o varios caracteres alfanuméricos. Una cadena es también una sucesión de números. Ejemplo de cadenas: Curso de Visual Basic abcdefghijklmnopqrstuvwxyz1234567890 123456789 Hagamos una distinción entre una cadena que contenga números y un número. Un número tiene un valor, pero también tiene una presentación escrita. El valor es algo que estará en el ordenador como una sucesión de bits. Dependiendo de como lo hayamos declarado, tendrá mas o menos bits. Pero esa información no es un número legible por el usuario. Lo que sí es legible por el usuario es la representación en numeración decimal (u octal, o hexadecimal, o incluso en binario) de ese número. Esa representación del número en un determinado sistema de numeración es una cadena. Así, el número nueve, que en la memoria del ordenador será una sucesión de bits, el ordenador puede presentárnoslo como: 9 En numeración decimal 9 En numeración hexadecimal 11 En numeración octal 1001 En numeración binaria Esas formas de presentarnos el número son CADENAS de caracteres. El valor del número dentro del ordenador es un NUMERO. Para presentar un número en la pantalla, el ordenador debe convertirlo previamente a una cadena. Cuando introducimos un valor numérico por teclado o pantalla, el ordenador para hacer operaciones con él, debe transformarlo a un número. Estas consideraciones nos llevan a las dos primeras funciones con cadenas: Str (número) Convierte un número a una cadena en numeración decimal. Val (cadena numérica) Obtiene el valor (el número) correspondiente a esa cadena. Ejemplos Variablenumerica = Val (TextBox1.Text) Este ejemplo convierte la cadena de caracteres (numéricos) que hubiese en la caja de texto TextBox1 en un número, y asocia este número a la variable Variablenumerica. Si el contenido de la caja de textos no fuesen caracteres numérico (abcd, por ejemplo), Variablenumerica tomaría el valor 0. Label1.Caption = Str (Variablenumerica) Este ejemplo pondría en la etiqueta Label1 los caracteres correspondientes al valor que tuviese la variable Variablenumerica . Nota para recordar: Siempre habrá que convertir un número a una cadena cuando queramos presentarlo en la pantalla. Siempre habrá que convertir a número la cadena de caracteres numéricos que hayamos introducido por teclado o por pantalla, cuando queramos operar con ese número. Un Label, cuando tiene que presentar un único número, no le pedirá que se lo convierta a cadena, pues VB hace automáticamente esa conversión. Sin embargo, cuando tiene que presentar un número, y además un texto en el mismo Label, VB no realizará automáticamente ese cambio, por lo que le dará un error. Le recomiendo que convierta los números a variables de cadena siempre que los quiera presentar en un Label o TextBox. Existe una función mas amplia que Str. Se trata de Cstr. Esta función no solamente transforma un número a una cadena, como hace Str, sino que convierte cualquier tipo de variable a una variable tipo String (cadena). Esta función transforma, por ejemplo, una variable tipo Booleana en una variable de cadena, devolviendo la cadena "Verdadero" si el valor de la variable booleana es True, y "Falso" si es False. Puede también transformar a una cadena de caracteres el valor de un CheckBox o de un OptionButton. En estos casos devuelve 0 y 1 para el CheckBox (Desactivado / Activado) y Verdadero ó Falso para el OptionButton (Activado / Desactivado) label1.Caption = CStr(booleana) Label1.Caption = Verdadero si booleana es true Label1.Caption = Falso si booleana es False Label2 = CStr(Check1.Value) Label2.Caption = 1 si Check1 está activado Label2.Caption = 0 si Check1 está desactivado Label3 = CStr(Option1.Value) Label3.Caption = Verdadero si Check1 está activado Label3.Caption = Falso si Check1 está desactivado Si se aplica Cstr a una variable tipo Fecha/Hora devuelve la fecha / Hora en formato corto. Mas funciones de cadena: Left (cadena, n) Extrae los n primeros caracteres de una cadena, comenzando por la izquierda. Si cadena = Curso de Visual Basic (Para todos los ejemplos) Resultado = Left (cadena, 10) ----> Resultado = Curso de V Right (cadena, n) Extrae lo n últimos caracteres de la cadena Resultado = Right (cadena, 10) ----> Resultado = sual Basic Mid (cadena, m, n) Extrae n caracteres de la cadena, siendo el primer carácter extraído el que ocupa el lugar m. (Vea Instrucción Mid mas abajo) Resultado = Mid (cadena, 3, 10) ----> Resultado = rso de Vis LCase (cadena) Devuelve otra cadena igual, pero con todos los caracteres en minúsculas. (LCase = Lower Case) Resultado = Lcase (cadena) ----> Resultado = curso de visual basic UCase (cadena) Devuelve otra cadena igual, pero con todos los caracteres en mayúsculas. (UCase = Upper Case) Resultado = UCase (cadena) ----> Resultado = CURSO DE VISUAL BASIC Len (cadena) Devuelve la longitud de la cadena Resultado = Len (cadena) ----> Resultado = 21 LenB (Cadena) Devuelve el número de Bytes empleados para almacenar la cadena. Sorpréndase, es el doble que Len (Cadena) String (n, carácter) Devuelve una cadena de n caracteres como el indicado Resultado = String (8, "a" ----> Resultado = aaaaaaaa Resultado = String (8, Chr(65)) ----> Resultado = AAAAAAAA Resultado = String (8, 65) ----> Resultado = AAAAAAAA Space (n) Devuelve una cadena formada por n espacios. Resultado = "A" + Space (6)+ "B" ----> Resultado = A B LTrim Elimina los posibles espacios que tenga una cadena por su izquierda. Rtrim Elimina los posibles espacios que tenga una cadena por su derecha. Trim Elimina los espacios que tenga una cadena, tanto por su izquierda como por su derecha. (No elimina los espacios centrales de la cadena) Estas tres funciones se emplean para quitar los posibles espacios que pueden resultar de una entrada de datos. Tienen especial importancia cuando se toman los datos de un archivo o base de datos, donde fueron introducidos por otro programa. No se pone ningún ejemplo de estas funciones, pues sería difícil verlo impreso. InStr (cadena, cadena1) Busca la cadena1 dentro de cadena y devuelve el número de orden dentro de cadena donde se encuentra la primera letra de cadena1 Resultado = InStr (cadena, "sua" ----> Resultado = 12 StrConvConvierte una cadena de caracteres en otra, según las instrucciones que le sigan. Puede sustituir a UCase o LCase si la instrucción es UpperCase o LowerCase respectivamente, o poner la primera letra de todas las palabras de la cadena en mayúsculas, si la instrucción es ProperCase. Resultado = StrConv (cadena, UpperCase) ----> Resultado = CURSO DE VISUAL BASIC Resultado = StrConv (cadena, LowerCase) ----> Resultado = curso de visual basic Resultado = StrConv (cadena, ProperCase) ----> Resultado = Curso De Visual Basic Instrucción Mid Mid puede usarse también para cambiar el contenido de una cadena. Observe la sutileza entre Mid como Función de cadena y Mid como Instrucción. La Instrucción Mid reemplaza un número especificado de caracteres en una variable de cadena con caracteres de otra cadena. Sintaxis Mid(cadena1, inicio[, longitud]) = cadena2 Resultado Mid (cadena, 7,2)="Sobre" ---- > Resultado = Curso sobre Visual Basic FUNCIONES CON NUMEROS _________________________ Visual Basic puede operar con números tal como lo haría cualquier persona. Conoce las 4 reglas, y puede utilizar paréntesis de la misma forma que los escribimos sobre el papel. Los operadores que utiliza para las operaciones básicas son: + Suma - Resta * Multiplicación / División División sin decimales Mod Resto de una división ^ Eleva a un exponente Ejemplos Resultado = 12 + 15 ----> Resultado = 27 Resultado = 15 - 12 ----> Resultado = 3 Resultado = 15 * 12 ----> Resultado = 180 Resultado = 15 / 12 ----> Resultado = 1.25 Resultado = 15 12 ----> Resultado = 1 Resultado = 15 Mod 12 ----> resultado = 3 Resultado = 12 ^ 2 ----> Resultado = 144 resultado = ( ( 4 * 3 ) / 2 ) ^ 2 ----> Resultado = 36 Estos operadores se denominan Operadores aritméticos. Existen otras operaciones que se pueden realizar con números: comparaciones. Los operadores que realizan comparaciones se denominan Operadores relacionales. El resultado de las operaciones realizadas con estos operadores solamente admiten dos resultados: True (Cierto) o False (Falso) Estos operadores son: = Igual que <> No igual que < Mayor que <= Mayor o igual que > Menor que => Igual o menor que Estos operadores se suelen utilizar en estructuras de programa donde se tome una decisión. El operador = puede usarse también para comparar cadenas o fechas. Operadores Lógicos Estos operadores sólo tienen sentido cuando hablemos de variables Booleanas, es decir, aquellas que solamente pueden tomar los valores cero y uno. Operador Función Devuelve True si Devuelve False si And Función AND A=True y B=True Cualquier otro caso OrFunción OR A=True o B=True A=False y B=False Xor Función XOR A=True y B=False A=True y B=True A=False y B=True A=False y B=False EqvF. Equivalente A=True y B=True A=True y B=False A=False y B=False A=False y B=True ImpImplicación A=True y B=True A=True y B=False A=False y B=True A=False y B=False Not Negación A=False A=True LikeIgualdad A=True A=False Otras Funciones con números CInt Parte entera Devuelve la parte entera de un número con decimales AbsValor Absoluto Devuelve el valor absoluto de un número SgnSigno Devuelve el signo de un número Sqr Raíz cuadrada Devuelve la raíz cuadrada de un número Exp Exponenciación Devuelve el número elevado al exponente indicado Log Logaritmo Devuelve el logaritmo natural de ese número Trigonométricas Sin Seno Devuelve el valor del seno de un ángulo (Expresado en radianes) Cos Coseno Devuelve el coseno de un ángulo (En radianes) Tan Tangente Devuelve la tangente de un ángulo Atn Arco Tang. Devuelve un arco cuya tangente sea el número (Angulo en radianes) Una función curiosa TimerTiempo acumulado Devuelve el tiempo (en segundos) que ha pasado desde las 12 de la noche. Generación de números aleatorios Randomize (Numero) Inicia el generador aleatorio tomando como dato de partida el Numero. Devuelve el resultado en una variable llamada Rnd. NOTA MUY IMPORTANTE.- Los números aleatorios generados de esta forma son siempre iguales, eso sí, dependiendo del número que se le introduzca como parámetro. Esta generación de números no produce números aleatorios pues como se dijo, dependen del numero que se meta como parámetro, y si este se repite, se repite la sucesión de números que nos crea el generador aleatorio. La forma de obtener números realmente aleatorios es introducir como parámetro un número que sea variable con el tiempo. Ese número no puede ser otro que el número timer visto antes. Y siempre con la precaución de que medie mas de un segundo entre dos instrucciones Randomize. La función toma entonces la forma: Randomize Timer La función Randomize devuelve una variable Rnd con un número comprendido entre 0 y 1 (Nunca será 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una sucesión de números aleatorios. No es necesario ejecutar la instrucción Randomize Timer cada vez que se quiera obtener un dato de la variable Rnd. Un ejemplo. Generador de números para la Lotería Primitiva Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botón de comando de nombre Command1. Cuando hagamos click sobre el botón de comando deberá generar un número comprendido entre el 1 y el 49. En el procedimiento click de Command1 pondremos el siguiente código: Private Sub Command1.click Randomize Timer A = Rnd A = Rnd * 100 A = CInt(A) Do While A > 49 A = A - 49 Loop Do While A < 1 A = A + 49 Loop Label1.caption = A End Sub Realice este pequeño programa, con la instrucción Randomize Timer y sin ella. Funciones con fechas. Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la información relativa a la fecha y la hora. Dispone para ello de una declaración de variable: Date. Una variable declarada como date puede contener una fecha, una fecha y una hora o una hora solamente. Date Devuelve la fecha de hoy. Esta fecha la toma del reloj del ordenador. Time Devuelve la hora actual. Now Devuelve la fecha y hora actual. WeekDay Devuelve el día de la semana (En número, 1=Domingo, 2=Lunes,...) Day Obtiene el día, a partir de una fecha Month Obtiene el mes a partir de una fecha. Year Obtiene el año a partir de una fecha. Hour Obtiene la hora a partir de una hora Minute Obtiene el minuto a partir de una hora. Second Obtiene el segundo a partir de una hora. DateAddAñade un intervalo de tiempo a una fecha DateDiff Obtiene el intervalo de tiempo entre dos fechas DatePart Devuelve una parte de una fecha (semana, trimestre, etc.) DateSerial Compone una fecha a partir de parámetros relativos TimeSerial Compone una hora a partir de parámetros relativos. DateValue Devuelve una fecha a partir de un dato que se le parezca y VB pueda obtener de él una fecha válida Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Por ejemplo, para obtener el día de hoy solamente: Día = Day (Now)Día será un número El día de la semana lo obtendríamos Diasemana = WeekDay (Now) Diasemana será un número DateValue, una instrucción que le sacará mucho provecho Fecha = DateValue (120796) Fecha = DateValue (12 07 96) Fecha =12/07/96 Función FORMAT Esta función permite presentar cadenas de numéricas o fechas de una determinada forma. Permite establecer el Formato de esa cadena. Si recurre a la ayuda de VB acerca de esta función se va a enterar muy poco de lo que puede dar de sí. La sintaxis que presenta es : Format(expresión[, formato[, primerdíadesemana[, primerasemanadelaño]]]) Lo mejor que puede hacer con esta definición de la sintaxis de Format es olvidarla. No le aclara mucho lo que se puede hacer con Format. La función Format se usa para poner una fecha en un determinado formato. Con la expresión : FechadeHoy = Format (Now, "yyyy-mm-dd" la variable FechadeHoy tendrá el valor 1998-05-21, que se refiere al día 21 de mayo de 1998, según el formato recomendado por la norma ISO-8601 para la presentación de fechas. Si hubiésemos puesto la expresión FechadeHoy = Format (Now, "dd/mm/yy" , la variable FechadeHoy contendría el valor 21/05/98 referido al día citado. Las posibilidades de Format llegan también al campo de las cadenas numéricas. Por ejemplo la cifra 123456 se transformará en las siguientes expresiones, según como empleemos la función Format Variable = Format(123456, "Currency" Variable = 123.456 Pts Variable = Format(123456, "Standard" Variable = 123.456,00 Veamos ahora con un poco mas de conocimiento la sintaxis de Format Variable = Format (expresión[, formato[, firstdayofweek[, firstweekofyear]]]) Donde expresión es una cadena o fecha válida formato es uno de los formatos predefinidos (Standard, Currency, etc. Vea mas abajo) firstdayofweek. Especifica el primer día de la semana. Puede tomar uno de estos valores o constantes : Constante Valor Descripción vbUseSystem 0 El especificado en el sistema operativo. VbSunday 1 Domingo (valor por defecto) vbMonday 2 Lunes vbTuesday 3 Martes vbWednesday 4 Miércoles vbThursday 5 Jueves vbFriday 6 Viernes vbSaturday 7 Sábado firstweekofyear Especifica cual es la primera semana del año. Puede tomar uno de los siguientes valores o constantes : Constante Valor Descripción vbUseSystem 0 Usa el valor del sistema operativo vbFirstJan1 1 La primera semana es la que contiene al día 1 de Enero(Valor por defecto vbFirstFourDays 2 La primera semana es la que contiene al menos, 4 días de ese año (Rec. ISO - 8601) vbFirstFullWeek 3 La primera semana es la que tiene todos sus días en ese año No se complique la vida con el tema del primer día de la semana ni la primera semana del año. No lo usará con frecuencia. Centrémonos mas en el parámetro Formato. Puede tomar muchos valores. Veamos los principales. Primero para números Observe que usamos la expresión Variable =Format (1234567,"Formato" para todos los ejemplos de números. Para poner los números separados por millares : Variable = Format(1234567, "##,###,###" Variable = 1.234.567 (Cada carácter # indica que ahí va un número. El separador debe ser una coma, no un punto, aunque esto depende del idioma que esté usando) Puede poner una de estas expresiones, eso si, siempre entre comillas dobles : General Number Muestra el número tal como lo tecleó Currency En formato de la moneda de su sistema operativo Fixed Sin separador de millar y dos decimales (1234567,00) Standard Con separador de millares y dos decimales (1.234.567,00) Percent Multiplica el número por cien y lo presenta cono porcentaje(123456700,00%) Scientific Usa notación científica (1,23E+06) . Para fechas (Observe que usamos el ejemplo Format(Now, "Formato" y Now = 21/07/98 a las 22:16:00 y pico) General Date 21/07/98 22:16:00 Long Date martes 21 de julio de 1998 Medium Date 21-jul-98 Short Date 21/07/98 yyyy-mm-dd 1998-05-21 yy-mm-dd 98-07-21 Long Time 22:19:53 Medium Time 10:20 PM Short Time 22:20 hh :mm :ss 22 :21 :29 hh :mm 22 :21 Format dispone de mas opciones. Sería muy largo explicarlas aquí. Para mas información, en la WEB de Microsoft puede encontrar mas formatos posibles. MATRICES __________ Cuando utilizamos varias variables que tienen un significado similar para nosotros, pero que son distintas (Por ejemplo, el nombre de los alumnos de una clase) podemos utilizar una matriz. Esta matriz está formada por tantos elementos como alumnos tenga la clase. El nombre asociado a cada uno de los elementos de la matriz puede ser: Alumno (n) Donde n es el número por orden de lista de ese alumno. Las matrices normalmente comienzan a numerar por el número 0. Este comienzo puede no ser el mas apropiado para la variable que estamos planteando, pues ningún alumno tiene el número de orden 0. Para hacer que una matriz comience a numerar por el 1 se debe definir mediante la instrucción: Option Base 1 que debe colocarse al comienzo del módulo o formulario donde declaremos la matriz. Para declarar la matriz se hace como con todas las variables, especificando entre paréntesis el número de elementos que componen la matriz: Dim Alumno (25) as String Hemos declarado que la variable alumno es una cadena, y que hay 25 elementos en esa matriz. Una matriz también se puede declarar de la siguiente forma : Dim Alumno(1 To 25) as String Donde le decimos que la variable Alumno tiene 25 elementos, que el primero tiene el índice 1 y el último tiene el índice 25. Pero imaginemos que queremos meter en la misma matriz el nombre, primer apellido y segundo apellido del alumno. Necesitaremos declarar una matriz de 25 por 3. Como todos los elementos serán cadenas de caracteres, podemos declararla de la siguiente forma: Dim Alumno (1 To 25, 1 To 3) As String De esta forma, el primer apellido del alumno que ocupa el puesto número 15 de la clase, será el elemento: Alumno (15, 2) Podemos definir matrices de dimensión superior a dos. Podemos llegar a un máximo de 60 dimensiones. Una matriz de 5 dimensiones se declararía: Dim Variable ( 1 To N, 1 To M, 1 To P, 1 To Q, 1 To R) entendiendo que hay N, M, P, Q y R elementos en cada una de las dimensiones respectivamente. Una variable ya declarada como una matriz puede redimensionarse a lo largo del programa mediante la instrucción ReDim ReDim Alumno (1To 25) Mediante esta instrucción, estamos ReDimensionando una matriz ya declarada. No se puede redimensionar una matriz inexistente. Mediante la declaración 1 To 25 le estamos diciendo que el primer elemento de la matriz es el 1, independientemente de lo que hayamos puesto en OPTION BASE. Si se redimensiona simplemente con el número de elementos : ReDim (25) le estamos diciendo que tiene 25 elementos, pero que el primero sea el 0 ó el 1 depende de haber puesto OPTION BASE 0 u OPTION BASE 1. Una matriz puede redimensionarse cuantas veces se quiera a lo largo de la aplicación, pero esa redimensión no puede afectar al número de dimensiones de la matriz. Si redimensionamos la matriz perderá la información existente. Para evitar perder la información presente en la matriz, debe utilizar la sentencia ReDim Preserve. Si usa la palabra clave Preserve en matrices de dimensión superior a 1, va a encontrarse con comportamientos no esperados. Como podrá ver en la Ayuda de VB, usando ReDim Preserve sólo puede cambiar el tamaño de la última dimensión de matriz y no puede modificar en ningún momento el número de dimensiones. NO es cierto del todo. SÍ lo podrá hacer una sola vez. Respecto a cambiar el número de dimensiones, si ha declarado la matriz con unas dimensiones determinadas, ya no podrá cambiar las dimensiones ni con ReDim ni con ReDim Preserve. Le saldrá un error que dice que las dimensiones de la matriz ya han sido declaradas. Pero si ha declarado la matriz sin dimensiones : Dim MiMatriz() puede cambiar las dimensiones Dim MiMatriz (1 To 5, 1 To 9) y volver a cambiarlas Dim MiMatriz (1 To 8, 1 To 15, 1 To 6) Observe que no solamente la hemos cambiado dos veces de dimensiones (la primera a 2 y la segunda a 3), sino que también hemos cambiado el número de elementos en cada dimensión. Si hubiésemos utilizado ReDim Preserve solamente podríamos haber usado la primera de las dos líneas anteriores : ReDim Preserve MiMatriz (1 To 5, 1 To 9) pero ya no podríamos volver a cambiar el número de dimensiones con la segunda línea. Nos daría un error. Con ReDim podemos cambiar el número de elementos de cada dimensión cuantas veces queramos. Por ejemplo, podemos redimensionar MiMatriz de las siguiente forma : ReDim MiMatriz (1 To 5, 1 To 9) ReDim MiMatriz (1 To 15, 1 To 20) ReDim MiMatriz (1 To 25, 1 To 30) . . . . . . . . . . . . . . . . . . . . . . . . . . . Si hubiésemos empleado ReDim Preserve, podríamos cambiar los elementos de todas las dimensiones de la matriz una vez : ReDim Preserve (1 To 5, 1 To 9) a partir de ahora, solamente podemos cambiar los elementos de la última dimensión : ReDim Preserve (1 To 5, 1 To 20) ReDim Preserve (1 To 5, 1 To 30) es decir, no podremos hacer esto : ReDim Preserve (1 To 10, 1 To 30) donde se señala en negrita el error. Esto no causa ningún error en una matriz de una dimensión, ya que si la matriz tiene sólo una dimensión, puede cambiar el tamaño de esa dimensión porque es la única y la última. Cuando a lo largo de la aplicación se va redimensionando una matriz, podemos llegar la circunstancia de que, en un momento determinado, no sepamos las dimensiones de esa matriz. Para conocer el índice máximo y mínimo de una matriz se usan las funciones UBound y LBound. UBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz. Sintaxis UBound(nombredelamatriz[, dimensión]) LBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz. Sintaxis LBound(nombredelamatriz[, dimensión]) Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de la aplicación se ejecutó la siguiente instrucción válida : ReDim Mimatriz (1 To 100, 0 To 3, 5 To 20) En otro momento queremos tener el control de los índices de esa matriz, y queremos averiguar el índice menor y mayor de cada una de sus dimensiones : (IID1= Indice Inferior Dimensión 1, ISD 1 = Indice Superior Dimensión 1, etc. ) IID 1= LBound (Mimatriz, 1) IID1 = 1 ISD1 = UBound (Mimatriz, 1) ISD1 = 100 IID 2= LBound (Mimatriz, 2) IID1 = 0 ISD2 = UBound (Mimatriz, 2) ISD1 = 3 IID 1= LBound (Mimatriz, 3) IID1 = 5 ISD1 = UBound (Mimatriz, 3) ISD1 = 20 VISUAL BASIC Tras esta pequeña introdución al lenguaje Basic ya estamos en disposición de encender el ordenador y comenzar a trabajar con Visual-Basic. Se supone que su PC tiene instalado el programa Visual basic, bien en su versión de 16 bits si dispone de Windows 3.xx o la de 32 bits si dispone ce Win95 ó Windows NT. Entre en el programa VB. Le aparecerá en pantalla algo similar a esto : (Para VB Vers. 4) Este es el comienzo del programa . Observe que en esta pantalla existen varias cosas. En la parte superior , la barra de título del programa Visual Basic, con el texto : Proyect1 - Microsoft Visual Basic (Diseño) Por debajo de esta barra de Título del VB, encontramos la barra de menú de VB, con las leyendas : Archivo Edición Ver Insertar Ejecutar Herramientas Complementos Ayuda Por debajo de esta barra de menú tenemos la barra de herramientas, donde podrá ver varios iconos, que cada uno representa un determinada operación que Vd. puede realizar. Estas operaciones está todas en la línea de menú, y puede acceder a ellas abriendo los menús desplegables que existen en cada una de las palabrea Archivo Edición Ver ...... de esta línea de menú. El hecho de colocar las operaciones mas usuales en un icono en la barra de herramientas se hace para mayor comodidad del usuario. A la izquierda de la pantalla tiene una caja rectangular con tres columnas de iconos. Esa caja es la Caja de Herramientas (No la confunda con la barra de herramientas de la parte superior) Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de herramientas real que pueda tener un mecánico para realizar su trabajo. En ella están los iconos que representan a los controles con los que Vd. va a desarrollar su aplicación VB. No están todos los que pueden estar, al igual que en una caja de herramientas de un mecánico no están todas las herramientas que puede usar. Están solamente las mas usuales. Si necesita alguna mas, puede cogerla de otra parte (barra de Menú, Herramientas, Controles personalizados) y agregarlos a esa caja de herramientas, al igual que lo haría un mecánico con una herramienta especial, que la metería en su caja sólo cuando va a realizar un trabajo determinado para el que la necesite. Posiblemente esta caja de herramientas no le aparezca tal y como la ve en estos apuntes. Eso depende si Ud. tiene la versión personal o la profesional, o si usa la versión de 16 ó 32 bits. Esa caja de herramientas puede personalizarla a su gusto. Para ello, deberá cargar un proyecto ya existente en los discos de distribución de Visual Basic, llamado AUTO32LD.VBP (versión 32 bits) ó AUTO16LD.VBP (Versión 16 bits) que se encontrará en el directorio donde haya cargado el programa Visual Basic. Este proyecto no tiene otra función que determinar las herramientas con las que quiere abrir el VB. Para introducir herramientas nuevas en la caja de herramientas, basta con desplegar el menú Herramientas de la barra de menú, e ir a Controles personalizados. Haciendo click en esta línea de controles personalizados, podemos seleccionar nuevos controles para añadir a la caja de herramientas, marcando la casilla que está a la izquierda del nombre del control que quiere introducir. Una vez seleccionados todos los nuevos controles, haga click en ACEPTAR, y podrá observar que esos nuevos controles ya se le han añadido a la caja de herramientas. Para que esos nuevos controles le aparezcan de entrada cuando inicia una sesión de VB, debe salir de Visual basic guardando los cambios. Vuelva a entrar y observará que ya le aparecen esos nuevos controles en la caja. No es prudente meter muchos controles en la caja. Ponga solamente los que necesite normalmente en sus aplicaciones. Ocupará menos memoria y tardará menos tiempo en cargar el programa VB. Además, cuando realice una aplicación y la distribuya una vez compilada, Visual Basic entregará en los disquetes de distribución las DLL’s u OCX’s correspondientes a todos los controles personalizados que Vd. tenga en la caja de herramientas, los necesite el programa o no los necesite. Esto le va a suponer que está cargando subprogramas inútiles en el ordenador destino de su aplicación. A la hora de compilar el programa (Crear archivo .EXE) quite todos los controles personalizados que no necesite su aplicación. (Sólo los controles personalizados. Los controles comunes - CommandButton, Label, TextBox, etc.-, no se pueden eliminar de la caja de herramientas) Para quitar controles de su caja de herramientas, debe proceder de forma análoga, cargando el programa AUTOxxLD.VBP, abriendo menú de herramientas, Controles personalizados, quitando la marca al cuadro situado en la parte izquierda del control a eliminar, y guardando el proyecto al salir. En el centro, y ocupando casi toda la pantalla, tenemos el Formulario. Este Formulario es la interface gráfica de su aplicación, sobre el que podrá añadir los controles que necesite. Lo veremos mas adelante con todo detalle. Observa dos ventanas, una denominada Ventana de Propiedades, donde puede ver las propiedades del formulario, Form1, y otra, denominada Ventana de Proyecto. Existe otra ventana, que no está en la figura anterior, la Ventana de Depuración. Por cada formulario y cada control que introduzca en el proyecto, le aparecerá otra ventana, denominada ventana de código. No se extrañe de que esta presentación gráfica del Visual Basic coincida con otros sistemas de desarrollo (Delphi, p.e.). La lógica de desarrollo de una aplicación en Windows ha llevado a varios fabricantes de software a utilizar un entorno gráfico similar (diríamos idéntico). A Visual basic le queda el orgullo de ser el primero en utilizarlo. Con lo descrito anteriormente ya tenemos, al menos, fijado el argot con el que expresarnos para comenzar a estudiar el VISUAL BASIC. Veamos con un poco mas detalle la Ventana de Código. Esta figura le muestra un Formulario con su ventana de código. Cada objeto gráfico de VB tiene su propia ventana de código. Así, si en este formulario hubiésemos introducido un Label y dos CommandButton, todos ellos tendrían su propia ventana de código. La ventana de código la podemos ver haciendo doble click sobre cualquier objeto de nuestro proyecto. En este caso hemos hecho doble click sobre el único objeto que teníamos : el formulario. Observe las dos cajas de la parte superior, uno con la inscripción Objeto : que en el momento que le sacamos la foto tenía Form, y el otro con la inscripción Proc : (procedimiento), que en el momento de la foto tenía Load. A estas cajas les denominamos Lista de Objetos y Lista de Procedimientos respectivamente. Haciendo click sobre la flecha de cada lista, se despliega un menú, en la lista de objetos se desplegará una lista con los nombres de cada objeto existente en ese momento dentro del formulario. Haciendo click sobre uno de los nombres, nos presentará la ventana de código de ese objeto. Todos los objetos gráficos (controles) existentes dentro de un formulario y el propio formulario aparecerán en la misma lista de objetos. Haciendo click sobre la flecha de la lista de procedimientos, se despliega la lista con todos los procedimientos posibles para ese objeto. Siempre saldrá uno. Si tenemos escrito código en uno de los procedimientos, saldrá por defecto ese procedimiento para el cual hemos escrito el código. Si no hay código en ninguno de los procedimientos, saldrá el que tenga por defecto cada objeto. Solamente nos queda por decir, para cerrar este capítulo, que es un procedimiento. Para ello vamos a explicar lo que es un evento. Un Evento es algo que le puede ocurrir a un objeto. En una internase gráfica, lo que le puede ocurrir a un objeto es que se le haga click, doble click, que se pase el cursor del ratón por encima, etc. Este es el Evento. El Procedimiento es la respuesta por parte de ese objeto, al evento que le está sucediendo. Esa respuesta, esa forma de Proceder del objeto al evento que le está sucediendo, debemos programarla según nuestras necesidades, es decir, debemos escribir el código que necesite nuestra aplicación como respuesta al evento que acaba de ocurrir. Posiblemente, no queramos ninguna respuesta a muchos de los eventos que pueden acaecer a un objeto. Cada objeto tiene muchos eventos y solamente queremos aprovechar los que nos interesan. Para que un evento no produzca ningún efecto, basta con dejar sin código el procedimiento correspondiente a ese evento. En los eventos que queramos que realice alguna operación, le escribiremos en su procedimiento el código necesario para que esa operación se realice. Sin darnos cuenta, hemos comenzado a escribir el código de la aplicación. Observará que el primer elemento del menú desplegable de la lista de objetos se denomina General. Este no es en realidad ningún objeto, sino un apartado existente en cada formulario, que, al desplegar su lista de procedimientos tiene la sección de declaraciones, donde debemos declarar las variables que queremos que afecten a todo el formulario y sus controles, y tendrá además, los nombres de todos los procedimientos que introduzcamos (véase un poco mas adelante). En este menú desplegable de la lista de procedimientos del General verá con frecuencia cosas que Vd. no puso allí. Cosas tales como Command1_click, y en la ventana un determinado código. Esto ocurre cuando se borra algún control que tenía escrito código en alguno de sus procedimientos. Visual Basic sabe lo mucho que cuesta escribir el código asociado a un control. Si borramos un control de nuestro formulario accidentalmente, después de haber introducido todo el código asociado a él, Visual Basic nos sorprende con que ese código no lo tira inmediatamente, sino que lo reserva como un procedimiento en ese apartado General del formulario. Si en realidad queríamos borrar el control y todo su código, debemos quitarlo de ese apartado General de nuestro formulario, pues en realidad, si no lo queremos, no hará otra cosa que estorbar. Para quitarlo basta con borrar todo el código que aparece en la ventana de código cuando hacemos click sobre el nombre del control eliminado. Deberemos borrar todo el código, incluida la cabecera donde figura el nombre del control eliminado, y la parte final, que siempre termina con EndSub. El primer estorbo lo observará si crea otro control con el mismo nombre, cosa fácil ya que VB da un nombre por defecto a cada control (Command1, Command2....). El código asociado al control eliminado pasará automáticamente al nuevo control con el mismo nombre. Una aplicación puede tener todo su código escrito en los sucesivos procedimientos del formulario y de los controles que tenga ese formulario. Puede ocurrir que un determinado evento no esté entre los posibles eventos de los controles de nuestra aplicación. Piense por ejemplo, el evento de que la variable A sea igual a la variable B. No existe en ninguno de los controles ese procedimiento. No se preocupe, puede crear un procedimiento que se ejecute cuando su programa lo decida. Podemos añadir cuantos procedimientos queramos. Estos procedimientos se añaden al formulario, y deberán definirse por un nombre que Vd. debe elegir. Para que se ejecuten las instrucciones (código) incluido en ese procedimiento, basta simplemente con nombrarlo por ese nombre. Para insertar un procedimiento debe ir a la barra de menú, hacer click sobre Insertar, y en el menú que le desplegará, volver a hacer click sobre Procedimiento. VB le presentará un cuadro donde le pedirá el nombre, si quiere que sea un procedimiento, una función o una propiedad. A lo largo del curso irá viendo que es cada cosa. Escribiendo el código en los sucesivos procedimientos, bien en los propios de cada objeto, bien en los procedimientos que vayamos creando, es posible completar la aplicación. Pero en una aplicación larga esta forma de escribir el código no sería la mas adecuada. Es mas, posiblemente sería demasiado engorroso escribirla de esta forma, y muy probablemente deberíamos escribir el mismo código para varios procedimientos, lo que alargaría inútilmente el programa y el tiempo de desarrollo. Para disponer de un sitio donde escribir parte (o la mayor parte) de su programa, puede introducir uno o varios módulos. Expliquemos lo que es un módulo. Un Módulo es una parte del programa donde solamente puede escribir código. Es igual que un formulario, sin interface gráfica. Un profesor de Visual Basic lo expresaba diciendo que un Módulo es un Formulario sin cara. En un módulo pueden existir procedimientos al igual que en los formularios, pero como un módulo no tiene interface gráfica, esos procedimientos debe introducirlos el programador tal y como explicamos un poco mas atrás. El módulo tiene su propia ventana de código, al igual que un formulario, con un objeto único, el apartado General. Aquí también tenemos la sección de declaraciones, al igual que los formularios. En esta sección de declaraciones se comporta de manera similar a la de los formularios, pero permite algo que no nos permite la sección de declaraciones de un formulario : Declarar variables que se pueden utilizar en todo el programa. Esto ya lo ha visto mas atrás, con las sentencia de declaración Global y Public. Los módulos se emplean para la declaración de variables globales, y para escribir el código de la aplicación que sea común a varios formularios. Esto nos evita tener que repetir código inútilmente. Ese código común se escribirá en un procedimiento que previamente habremos insertado en este módulo, y lo citaremos por su nombre desde cualquier parte del programa. ¿Cual es el nombre de un procedimiento existente dentro de un módulo ? Depende. Si estamos ejecutando código escrito en otro procedimiento dentro del mismo módulo, es decir, si estamos dentro de ese mismo módulo, basta con citarlo por su nombre : p.e., si en el MóduloA tenemos un procedimiento llamado Procedimiento1, y queremos llamarle desde una línea de código dentro de ese mismo módulo, basta con referirse a él con : BUENO LO MAS PRONTO QUE PUEDA AGREGARE LA PARTE QUE SIGUE
Datos archivados del Taringa! original
0puntos
60visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
6visitas
0comentarios
Dar puntos: