Curso
sobre Visual Basic
por
Guillermo Llanderas
Primera Parte
Los temas incluidos:
Datos Básicos
Detalles
Usar la letra ARIAL tipo 8 o MS Sans Serif de cuerpo 8 puntos
Nombres de los botones estándar:
OK
Cancelar
Cerrar
Ayuda
Salir
Imprimir
Crear
Modificar
Suprimir
Reintentar
La longitud máxima de una línea de código es de 1024 caracteres. Para
poder cortarse una instrucción en 2 líneas, se usa el subguión ( _ ) colocado
al final de la línea.
Los comentarios se ponen con un apóstrofe ( ' ) delante.
El operador '+' suma los operandos, mientras que '&' los une:
X = "ABC" + "DE" 'X="ABCDE"
X = "ABC" & "DE" 'X="ABCDE"
X = 12 + 3 'X=15
Y = 12 & 3 'X="123"
Tipos de Datos
Tipo dato Sufijo Tamaño Rango de valores
(bytes)
Byte 1 De 0 a 255
Boolean 2 True o False
Integer % 2 De -32,768 a 32767
Long & 4 De -2,147,483,648 2,147,483,647
Single ! 4 De -3.402823E38 a -1.401298E-45 (negativos)
de 1.401298E-45 a 3.402823E38 (positivos)
Double # 8 De -1.79769313486232E308 a
-4.94065645841247E-324 (para negativos)
De 4.94065645841247E-324 a
1.79769313486232E308 (para positivos)
Currency @ 8 De -922,337,203,685,477.5808 a
922,337,203,685,477.5807
Date 8 De 1 de Enero del 100 al 31 de Dic de 9999
Object 4 Referencias a objetos
String $ Var Con tamaño variable 10 bytes + 1 byte/char
Con tamaño fijo, 1 byte/char
(hasta 65400 caracteres)
Variant Var Con número, 16 bytes
Con caracteres, 22 bytes + 1 byte/char
Type Var El rango de cada tipo fundamental
Operadores
> Mayor que
< Menor que
= Igual a
<= Inferior o igual a
>= Superior o igual a
<> Distinto a
Like Como el modelo de cadena propuesto
Con Like se pueden usar los siguientes comodines:
* Para cero, uno o más caracteres cualesquiera
? Para un carácter único cualquiera
# Para una cifra única cualquiera
[ListaChars] Para todo carácter único que se encuentre en la lista
[!ListaChars] Para todo carácter único que no se encuentre en la lista
Ejemplos:
if CodigoProducto Like "S??4T#" Then
If CodigoProducto Like "[!KR]*" Then 'El primer carácter no puede
ser ni una K ni una R
If CodigoProducto Like "[!K-R]*" Then 'No está comprendido entre
la K y la R inclusive.
Trabajar con datos y variables
&H -> hexadecimal (&H3F)
&O -> octal (&O13)
Dim Variable [As Tipo]
Dim Variable As String * Longitud (va desde 0 hasta Longitud)
Tipos definidos por el usuario:
Type NombreTipo
NombreElemento1 As TipoElemento1
NombreElemento2 As TipoElemento2
NombreElementoN As TipoElementoN
End Type
Dim Variable As NombreTipo
Variable.NombreElemento1 = ...
Matrices:
{Dim/Static/Private/Public} NombreMatriz ([Rango1[,Rango2[,...]]]) As Tipo
El rango va desde 0 hasta el indicado. El rango máximo va desde -32.769
hasta 32.767 Para hacer que el rango no empieze en 0, sino en 1 se debe de
declarar en el módulo: Option Base {0/1}
El rango también puede indicarse usando desde una cota hasta otra.
Dim Meses(11) As String 'Matriz de 12 elementos, del 0 al 11
Dim Num(2 To 5) As Integer 'Matriz de 4 elementos, del 2 al 5
Para poder usar matrices que cambian la dimensión en tiempo de ejecución,
se deben de declarar como las normales, pero sin indicar el rango dentro de los
paréntesis (pero sí que se deben de poner los paréntesis) y para cambiar la
dimensión hacer:
ReDim [Preserve] NombreMatriz(Rango1[,Rango2[,...]]) As Tipo
Funciones para obtener información de las matrices:
UBound(NombreMatriz[,Dimension]) : indica el límite superior
LBound(NombreMatriz[,Dimension]) : indica el límite inferior
Estructuras de Control
If Condicion Then If Condicion1 Then
[Instrucciones] [Instrucciones1]
[Else [Elseif Condicion2
[Instrucciones]] [Instrucciones2]]
End If [Elseif Condicion3
[Instrucciones3]]
...
[Else
[InstruccionesN]]
IIf(Condicion,ExpVerdadera,ExpFalsa) End If
Select Case Expresion Select Case WeekDay(Date)
[Case ListaComprobacion1 Case 2,3
[Instrucciones1]] Print "Es principio de semana"
[Case ListaComprobacion2 Case 4
[Instrucciones2]] Print "Hoy es Miércoles"
[Case ListaComprobacion3 Case 5, 6
[Instrucciones3]] Print "Terminando la semana"
... Case Is < 2, Is > 6
[Case Else Print "Fin de semana"
[InstruccionesN]] End Select
End Select
Choose(ExpIndice, Expresion1 [,Expresion2 [,... [,ExpresionN]]])
'Se evalua ExpIndice y éste debe de variar entre 1 y N
Do [{While/Until} Condicion] Num = 0
[Instrucciones] Do While Num < 5
[Exit Do] Num = Num + 1
[Instrucciones] Loop
Loop Print Num 'Resultado=5
Do La diferencia entre poner las clausulas
[Instrucciones] While/Until con el Do o con el Loop es
[Exit Do] que en el primer caso puede que no se
[Instrucciones] ejecuten nunca las instrucciones del
Loop [{While/Until} Condicion] bucle y en el segundo caso se ejecutan
al menos una vez.
While Condicion No permite el uso de Exit Do.
[Instrucciones] Es similar a un Do While... Loop
Wend
For Variable = ExpInicio To ExpFinal [Step ExpIncremento]
[Instrucciones]
[Exit For]
[Instrucciones]
Next [Variable]
Ambito y Visibilidad
Ambito de las variables:
De Procedimiento: Si han sido declaradas dentro de los procedimientos. Son
creadas automáticamente al comenzar el procedimiento y su destrucción
se realiza también automáticamente cuanto éste finaliza.
De Módulo: Si han sido declaradas en la sección de declaraciones de un
módulo. Se crean de forma automática cuando comienza la ejecución de
la aplicación y se destruyen al finalizar la misma.
Visibilidad de las variables:
Private : Sólo es posible acceder a estas variables desde el procedimiento
o módulo en que han sido declaradas.
Public : Se puede acceder desde cualquier parte de la aplicación.
Variables estáticas: Se usa con variables de procedimiento para que no se
destruyan al terminar la ejecución del procedimiento en cuestión.
Dim Variable [As Tipo] - definición de una variable privada
Private Variable [As Tipo] - definición de una variable privada
Public Variable [As Tipo] - definición de una variable pública
Static Variable [As Tipo] - definición de una variable estática
Para romper la ocultación de variables, se usa una admiración (!)
Form!Label1 accedería a Label1 de Form y no al Label1
del procedimiento donde se ejecute.
Constantes:
[Public/Private] Const Constante [As Tipo] = Expresión
Procedimientos
Un procedimiento de tipo Private sólo podrá ser invocado desde el módulo
donde ha sido declarado. Si es de tipo Public podrá ser invocado desde
cualquier módulo de la aplicación. Por defecto son públicos.
Si un procedimiento se declara como Static, todas sus variables serán de
tipo estático.
Procedimientos Sub (subrutinas): No devuelven un valor directamente.
[Private/Public] [Static] Sub NombreSubrutina[(ListaParametros)]
[Instrucciones]
[Exit Sub]
[Instrucciones]
End Sub
Call NombreSubrutina(Parametro1, Parametro2, ...)
NombreSubrutina Parametro1, Parametro2, ...
Procedimientos Function (funciones): Devuelven un valor.
[Private/Public] [Static] Function NombreFuncion[(ListaParam)] [As Tipo]
[Instrucciones]
[NombreFuncion = Valor]
[Exit Function]
[Instrucciones]
End Function
Valor = NombreFuncion(Parametro1, Parametro2, ...)
Call NombreFuncion Parametro1, Parametro2, ... 'Se pierde el resultado
Procedimientos Property: Permiten crear y manipular propiedades. Mediante su
uso, es posible hacer que se ejecute un cierto código cada vez que se
establece u obtiene el valor de la propiedad a la que representa.
[Public/Private] [Static] Property {Get/Let/Set} NomPropiedad
([LisParametros]) [As Tipo]
[Instrucciones]
End Property
-Let: Establece el valor de la propiedad
[Objeto.]NombrePropiedad[(ListaArgumentos)]=Expresion
-Get: Devuelve el valor de la propiedad
Variable=[Objeto.]NombrePropiedad[(ListaArgumentos)]
-Set: Establece la propiedad mediante una referencia a un objeto
Set [Objeto.]NombrePropiedad[(ListaArgumentos)]=Objeto
En los procedimientos tipo Get y Set se deben especificar un parámetro más
que en el caso del Let. En este parámetro, que es el último, se pasa el
valor de la propiedad.
Pase de parámetros:
[Optional] [ByRef/ByVal] [ParamArray] NombreParametro[()] [As Tipo]
en caso de que haya más parámtros, irán separados por comas.
Se puede declarar cualquier de los tipos de datos de Visual Basic, con la
excepción de las cadenas de tamaño fijo. También es posible pasar matrices
(en la llamada y en la declaración se deben poner los paréntesis vacíos).
Optional: indica que el argumento es opcional. Si se especifica, todos los
argumentos que estén a la derecha también deben ser de tipo Optional. Para
saber si nos han pasado o no un parámetro, se puede usar IsMissing(NombreParam)
que devuelve true si no ha sido especificado.
ByRef/ByVal: especifican si el argumento correspondiente será pasado por
referencia o por valor. Por defecto, lo parámetros se pasan por referencia.
ParamArray: Indica que el parámetro es una matriz opcional de elementos
Variant. Debe ser la última declaración de parámetro y no puede usarse con
Optional, ByRef ni ByVal. Se usa para poder pasar un número variable de
parámetros al procedimiento. Estos parámetros quedarán situados por orden en
los distintos elementos de la matriz.
Funciones de conversión y comprobación de tipos de datos
Función Descripción CBool Convierte una expresión al tipo Boolean CByte Convierte una expresión al tipo Bute CCur Convierte una expresión al tipo Currency CDate Convierte una expresión al tipo Date CDbl Convierte una expresión al tipo Double CInt Convierte una expresión al tipo Integer CLng Convierte una expresión al tipo Long CSng Convierte una expresión al tipo Single CStr Convierte una expresión al tipo String CVar Convierte una expresión al tipo Variant IsArray Devuelve TRUE si el parámetro pasado es un nombre de matriz IsDatey Devuelve TRUE si el parámetro es el nombre de un dato tipo Date IsEmpty Devuelve TRUE si el pará. es el nombre de una var. no inicializada IsNull Devuelve TRUE si el pará. es el nombre de una var. que contiene Null IsNumeric Devuelve TRUE si el parámetro es el nombre de dato de tipo numérico Str Devuelve la representación de un número en forma de cadena TypeName Devuelve en forma de nombre el tipo de variable del parámetro pasado Val Devuelve el número representado por una cadena de caracteres ValType Devuelve en forma de número el tipo de variable del parámetro pasado
Funciones de tratamiento de datos numéricos
Función Descripción
Abs Devuelve el valor absoluto de un número
Atn Devuelve el arcotangente de un número
Cos Devuelve el coseno de un número
Exp Devuelve el exponencial de un número en base e
Fix Devuelve la parte entera de un número, redondeando los valores al
Siguiente valor superior
Hex Devuelve una cadena que representa el valor hexadecimal de un
número
Int Devuelve la parte entera de un número
Log Devuelve el logaritmo natural de un número (en base e)
Oct Devuelve una cadena de caracteres que representa el valor octal
Rnd Devuelve un número aleatorio menor que 1 y mayor o igual que 0
Sgn Devuelve el signo de un número (-1 si es negativo, 0 si es nulo y
1 si es positivo)
Sin Devuelve el seno de un número
Sqr Devuelve la raíz cuadrada de un número
Tan Devuelve la tangente de un número
Val Devuelve el número representado por una cadena de caracteres
Funciones de tratamiento de cadenas de caracteres
Función Descipción
Asc Devuelve el código ASCII del primer carácter de una cadena
Chr Devuelve el carácter asociado al código ASCII de un número
Format Formatea una expresión según una formato pasado como parámetro
InStr Devuelve la posición de la primera ocurrencia de una cadena
dentro de otra
LCase Devuelve una cadena con sus caracteres convertidos a minúsculas
Left Devuelve un número especificado de caracteres desde la izquierda
de una cadena
Len Devuelve el número de caracteres de una cadena, o el espacio en
bytes ocupado por una variable
LTrim Devuelve una cadena, eliminando los espacios en blanco a la
izquierda
Mid Devuelve la subcadena de tamaño y posición especificada dentro de
una cadena
Right Devuelve un número especificado de caracteres desde la derecha de
una cadena
RTrim Devuelve una cadena, eliminando los espacios en blanco a la derecha
Space Devuelve una cadena formada por un número especificado de espacios
en blanco
Str Devuelve la representación de un número en forma de cadena
StrComp Devuelve un valor que indica el resultado de una comparación entre
cadenas
StrConv Devuelve una cadena con diversos tipos de conversiones realizadas
sobre ella
String Devuelve una cadena compuesta de un carácter repetido un
determinado
número de veces
Trim Devuelve una cadena, eliminando los espacios en blanco a izquierda
y derecha
UCase Devuelve una cadena con sus caracteres convertidos a mayúsculas
Funciones de tratamiento de fechas y horas
Función Descripción
Date Devuelve la fecha actual del sistema
DetaAdd Devuelve una fecha añadiéndole un cierto intervalo de tiempo
especificado
DeteDiff Devuelve el número de intervalos de tiempo entre dos fechas
especificadas
DatePart Devuelve una parte de una fecha especificada (el año, el día,
los minutos, etc)
Dateserial Devuelve la fecha correspondiente a un determinado día, mes y año
DateValue Convierte una expresión a una fecha válida
Day Devuelve un número entre 1 y 31 representando el día del mes
Hour Devuelve un número entre 0 y 23 representando la hora del día
Minute Devuelve un número entre 0 y 59 representando los minutos de la
hora
Month Devuelve un número entre 1 y 12 representando el mes del año
Now Devuelve la fecha y hora actual del sistema
Second Devuelve un número entre 0 y 59 representando los segundos de
minuto
Time Devuelve la hora actual del sistema
Timer Devuelve el número de segundos transcurridos desde la medianoche
TimeSerial Devuelve la hora correspondiente a una determinada hora, minuto
y segundo
TimeValue Convierte una expresión a una hora válida
WeekDay Devuelve un número que representa el día de la semana
Year Devuelve un número entero representando el año
Funciones diversas
Command Devuelve los parámetros pasados en la línea de comando en la
llamada al programa Visual Basic
CurDir Devuelve el path actual
DoEvents Pasa el control a Windows para que pueda ejecutar las tareas
eventualmente en espera
Environ Devuelve el valor de la variable de entorno especificada
FileDateTime Devuelve un dato de tipo Date con la fecha y hora de la última
modificación del fichero especificado como parámetro
FileLen Devuelve la longitud en bytes del fichero especificado como parám.
GetAttr Devuelve los atributos de un fichero
InputBox Abre un cuadro de diálogo que permite la introducción de un dato.
Devuelve el contenido del TextBox.
MsgBox Abre un cuadro de diálogo visualizando un mensaje, espera a que el
usuario valide el cuadro. Devuelve un valor indicando el botón.
Shell Ejecuta el programa pasado como parámetro
Error Devuelve el texto del mensaje de error relativo al número de error
pasado como parámetro de la función.
Menus
Visualizar un menu pop-up:
[object].PopupMenu menuname, [flags], [x], [y], [boldcommand]
-object: En caso de no aparecer, se asume que el form que tiene el foco es
el objeto a usar.
-menuname: Nombre del pop-up menu.
-flags: Especifica la localización y el comportamiento del menu. Los
valores
que acepta son:
vbPopupMenuLeftAlign El lado izquiedo del menu se pone en x
vbPopupMenuCenterAlign El menú se centra en x
vbPopupMenuRightAlign El lado derecho del menu se pone en x
vbPopupMenuLeftButton Las entradas del menu resonden sólo si se
pulsa al botón izquierdo del ratón
vbPopupMenuRightButton Las entradas del menu resonden cuando se
pulsa al botón derecho o el izquierdo
-x: Especifica la coordenada x donde se mostrará el menú. Si se omite se
usa la coordenada x del ratón
-y: Especifica la coordenada y donde se mostrará el menú. Si se omite se
usa la coordenada y del ratón
-boldcommand: Especifica el nombre de una opción del menú que se mostrará
en negrita. Sólo funciona en W95 o WNT 4.0
Añadir una entrada al menú:
Load [formulario.]MatrizDeMenu(indice)
Borrar una entrada de menú:
Unload [formulario.]MatrizDeMenu(indice)
Trabajar con objetos
Variables objeto:
Se declaran mediante la instrucción:
{ Dim | ReDim | Static | Private | Public } Variable As [New] Clase
-New: La variable hace referencia a una nueva instancia de la clase.
La instancia no se creará hasta que se haga una referencia a la variable
-Clase: Tipo de datos de la variable
Una vez declaradas, la variable sólo podrá hacer referencia a instancias
de esa clase. Es posible declarar variables objeto que hagan referencia a un
formulario específico de la aplicación, pero no se pueden declarar para que
hagan referencia a un control específico. Ejemplo:
Dim Tb As TextBox
Dim frm1 As New Form1
Existen cuatro tipos de objetos genéricos, que permiten declarar variables
para hacer referencia a distintos tipos de objetos:
-Form: Puede hacer referencia a cualquier formulario de la aplicación,
incluido el formulario MDI
-Control: Puede hacer referencia a cualquier control disponible en la
aplicación
-MDIForm: Sólo puede hacer referencia al formulario MDI
-Object: Puede hacer referencia a cualquier objeto de la aplicación, ya
sea un formulario o un control
Asignación de una variable objeto a un objeto determinado:
Set Variable = { [New] Objeto | Nothing }
-New: Permite crear nuevas instancias en tiempo de ejecución. La instancia
se crea automaticamente
-Objeto: Nombre del objeto a asignar o nombre de otra variable objeto. Debe
de ser del mismo tipo de objeto con el que se declaro la variable
-Nothing: Elimina la referencia de una variable objeto
Comparación de variables de referencia de objetos:
Objeto1 Is Objeto2
La expresión valdrá True cuando ambas hagan referencia al mismo objeto y
False en caso contrario.
Acceso al valor de una propiedad de un objeto:
Objeto.Propiedad = Expresion
Variable = Objeto.Propiedad
Ejemplo: Print Obj1 Is Obj2 visualizaría True o False
Comprobación de tipo de objeto:
TypeIf VarObjeto
Ejemplo: If TypeOf Obj1 Is TextBox Then...
Llamada a un método de un objeto:
Objeto.Metodo [ListaArgumentos]
Variable = Objeto.Metodo ([ListaArgumentos)]
Colecciones de objetos:
Agrupan varios objetos que pueden ser de diferentes tipos. A cada uno de
los objetos le corresponde un número de índice que indica su posición dentro de
la colección. Tiene una propiedad, Count, que indica el número de elementos de
la colección.
Creación de una colección:
Dim NombreColeccion As New Colletion
Añadido de elementos a la colección:
Objeto.Add(Miembro[, Identificador [, Antes[, Despues]]])
-Miembro: nombre del elemento a añadir
-Identificador: cadena de caracteres que identificará al elemento
cuando
se quiera acceder a él
-Antes: el nuevo miembro se situará antes del especificado
-Despues: el nuevo miembro se situará después del especificado
Por defecto, los elementos se añaden al final de la colección. Los
parámetros Antes y Después son excluyentes.
Acceso a un elemento de la colección:
NombreColeccion(indice).{ Propiedad | Metodo }
NombreColeccion(identificador).{ Propiedad | Metodo }
NombreColeccion!identificador.{ Propiedad | Metodo }
Eliminación de elementos de la colección:
Objeto.Remove(indice)
Objeto.Remove(identificador)
Recorrerse todos los elementos de la colección:
For Each Elemento In NombreColeccion
Elemento.{ Propiedad | Metodo }
Next
Colecciones predefinidas:
-Forms: contiene todos los formularios de la aplicación que se
encuentran cargados.
-Controls: contiene todos los controles de un formulario
-Printers: contiene todas las impresoras disponibles del sistema
Acceso al contenedor de un control:
Elemento.Container