Sunteți pe pagina 1din 11

CURSO DE VB

CAPTULO 1

ndice de contenido
1.- INTRODUCCIN AL CURSO......................................................................................................2
2.- EL ENTORNO DE TRABAJO.......................................................................................................2
MDULOS......................................................................................................................................4
COMPARACIN Y DECLARACIN DE VARIABLES..............................................................4
3.- VARIABLES Y TIPOS DE DATOS...............................................................................................6
VARIABLES...................................................................................................................................6
TIPOS DE DATOS..........................................................................................................................8

Vistame en http://neckkito.eu5.org

1.- INTRODUCCIN AL CURSO


Hola a tod@s:
Voy a empezar este curso diciendo que este no es un curso
de VBA para Access... en el sentido estricto del trmino.
Es decir: si cogis un libro sobre VBA para Access (si tenis
la suerte de pillar alguno que valga la pena) normalmente
hay una parte importante del curso que se refiere a teora
pura y dura, con algn que otro ejemplo, pero pocos...
Por otra parte resulta prcticamente imposible realizar un curso de VBA para Access que logre
abarcar todo lo que puede explicarse sobre este tipo de programacin. Hay cdigos que
funcionan perfectamente... hasta que no funcionan. Por qu? Porque el cdigo funciona si se
est aplicando sobre un textbox (por poner un ejemplo), pero si se aplica a un combobox la
cosa se nos espachurra. Tener en cuenta toda esta casustica es, definitivamente, de locos.
Sin embargo, no debemos desanimarnos por mis anteriores palabras. La cosa no es tan
drstica, en general, como acabo de comentar, pero mi intencin de empezar esta introduccin
as ha sido para que quede claro que:

Si seguimos este curso podremos hacer un montn de cosas, pero no todas. Hay que
moverse, por eso...
No lo s todo de VBA. Mi gran amiga es la tecla F1, y tambin los foros de ayuda que
hay por Internet. Pero, adems...
Utilizad un poquito de imaginacin...

Mi gran ilusin sera que al acabar el curso fuerais capaces no slo de hacer, sino de, si no lo
sabis hacer, sacar de la chistera una solucin vuestra, propia, o si encontris algn cdigo
que alguien ha pensado previamente, seis capaces de entender que hace ese cdigo, y
poder decir: Vaya! Este pedazo de cdigo me sirve para lo que yo necesito... y s cmo
adaptarlo!
Dicho lo anterior esta primera leccin ser un poco dura porque hay que empezar por utilizar
unos conceptos bsicos, y eso representa un poquito de teora. Intentar hacerlo lo ms
suave posible.

2.- EL ENTORNO DE TRABAJO


Nuestro entorno de trabajo va a ser el editor de VBA, que a partir de ahora, como soy tan
fashion, lo voy a llamar VBE (Visual Basic Editor). No me voy a meter a fondo con el VBE,
sino que slo explicar la terminologa fundamental que utilizaremos durante el curso, para
saber como mnimo de qu estamos hablando.
Y como dicen que una imagen vale ms que mil palabras aqu os presento al VBE.

Vistame en http://neckkito.eu5.org

Vamos a ver a nuestros amiguitos:

-- Barra de men (ms que evidente)


-- Barra de herramientas (ms que evidente)
-- Ventana de proyecto: en esta ventana podemos ver los objetos de Access que tienen
algn mdulo asociado (hablaremos de eso ms adelante), y tambin podemos ver los
mdulos estndar (mdlNeckkito) y los mdulos de clase (clsContainers)
-- Ventana de propiedades: que nos muestra las propiedades del elemento que tenemos
seleccionado en ese momento. En la imagen, yo puedo ver que, por ejemplo, el Form1 permite
la adicin de registros (AllowAdditions: True)
-- Ventana inmediato: es una ventana que nos permite ver ciertos resultados de las acciones
del cdigo que estamos programando. Hablando en plata, es un poco para hacer guarreras.
Por ejemplo, si tenemos la ventana inmediato a la vista (si no la tenemos debemos ir a men
Ver Ventana Inmediato, o pulsar la combinacin de teclas CTRL+G), podemos escribir lo
siguiente:
?4 + 3
Y pulsamos Enter
Y como Access es tan listo nos dice que el resultado de esa operacin es 7.
3

Vistame en http://neckkito.eu5.org

Otra prueba, utilizando un poco de lgebra. Escribamos lo siguiente:


a=3
b=5
?a+b
Y la ventana inmediato nos mostrar que el valor es 8.
Flipante, verdad? ;)

-- Ventana de cdigo: aqu se nos abrirn las ventanas


de los mdulos donde podremos escribir nuestros cdigos.
Como vemos en el ejemplo, yo tengo abiertas tres ventanas
correspondientes a dos formularios y un informe.
Y por ahora esos seis elementos sern suficientes para ir tirando.
Aprovecharemos la imagen para explicar otros conceptos:
MDULOS

Mdulo de objeto: es el mdulo que se asocia a aquel objeto de Access que contiene
cdigo. Si miramos la ventana de proyecto veremos que mi BD tiene tres formularios y un
informe con cdigo asociado.

Mdulo estndar: es un tipo de mdulo que no est asociado a ningn objeto. En


general contiene cdigo accesible desde cualquier mdulo estndar o de objeto.

Mdulo de clase: es mdulo que, como su nombre indica, sirve para definir clases. Este
tipo de mdulo es algo complejo de entender para quien se inicia en VBA, por lo que lo
dejaremos para una explicacin posterior.
Qu ventaja tiene programar mdulos estndar? Para que nos entendamos, para trabajar
menos. Vamos a poner un ejemplo abstracto: imaginemos que tenemos un formulario con
diez cuadros de texto, y que necesitamos que en cada uno de ellos, tras escribir un valor, se
realice una comprobacin para saber si el valor es correcto. Deberamos programar el evento
Despus de actualizar de cada TextBox de la manera siguiente:
.- Cgeme el valor introducido
.- Haz todas estas operaciones de comprobacin
.- Avsame si el valor introducido no es correcto.
Ello nos obligara a escribir ese cdigo en cada uno de los TextBox (bendito copy-paste!).
Pero, y si creamos un mdulo que nos haga las operaciones de comprobacin? Esas
operaciones slo deberan ser escritas una sola vez, mientras que a los TextBox deberamos
decirle: llmame al mdulo y dime si ha detectado que el valor es incorrecto.
S que esta explicacin es un poco abstracta, pero an no tenemos las herramientas
necesarias para un ejemplo prctico. Que no cunda el pnico, que pronto podremos ver lo
abstracto en accin ;)
COMPARACIN Y DECLARACIN DE VARIABLES
Si nos fijamos en la imagen vemos que los tres mdulos de objeto que se ven empiezan
siempre con dos lneas:

Vistame en http://neckkito.eu5.org

Option Compare Database


Option Explicit
La primera le est diciendo a Access que utilice el sistema
predeterminado para comparar valores.
Vamos a clarificar este concepto con un ejemplo:
En el VBE nos vamos a men Insertar Mdulo. Nos
aparecer la ventana de cdigo de ese mdulo, en blanco.
Escribimos lo siguiente, debajo de esas dos lneas (a quien
le salga slo una lnea que no se preocupe: llegaremos a la
segunda en breve):

Option Compare Database


Private Sub miComparacin()
If "Neckkito" = "NECKKITO" Then
MsgBox "Es el mismo nombre"
Else
MsgBox "Es un nombre diferente"
End If
End Sub

Si ahora situamos el cursor dentro del cdigo y en la barra de mens le damos al Play (o
pulsamos la tecla F5) veremos que Access nos dice que es el mismo nombre. Esto es as
porque lo ha comparado como texto.
Cmo podramos hacer para discriminar entre maysculas y minsculas? Pues para hacer eso
le deberamos indicar que queremos otro sistema de comparacin, que sera el BINARY.
Es decir, que si ahora cambiamos nuestra primera lnea de cdigo, de manera que nos quede
as:

Option Compare Binary


Private Sub miComparacin()
If "Neckkito" = "NECKKITO" Then
MsgBox "Es el mismo nombre"
Else
MsgBox "Es un nombre diferente"
End If
End Sub

y ejecutamos el cdigo el resultado ser que se trata de un nombre diferente.


En definitiva, que tenemos tres opciones de comparacin para nuestra base de datos:

Option Compare Database


Option Compare Text
Option Compare Binary

Truco: si en el VBE situamos el cursor sobre la palabra Compare y pulsamos F1 se nos


abrir la ayuda, que nos ampliar un poquito ms estos conceptos.
Y ahora vayamos con la segunda de las lneas. Para programar cdigo solemos utilizar
variables (veremos las variables ms adelante). Una variable es simplemente una palabra
que utilizamos para poder almacenar un valor. Podemos definir directamente un valor para una
variable, simplemente escribiendo esto en el cdigo (siempre y cuando no nos aparezca la
5

Vistame en http://neckkito.eu5.org

lnea Option Explicit):


miValor = 3
Sin embargo, como su nombre indica, podemos pensar que
miValor va a almacenar un nmero, y durante el cdigo
podra ser que almacenara, por ejemplo, una fecha. Eso
producira un error de cdigo, que sera difcil de depurar
(segn el cdigo). Para evitar lo anterior podemos decidir
que Access nos obligue a indicar qu tipo de variable (qu
tipo de dato) va a ser nuestra variable. As, cuando no se
cumpla que miValor es un nmero Access nos llevar a la
lnea donde miValor ya no es un nmero, con lo que la
depuracin es ms eficaz.
Cuando forzamos la definicin de variables Access nos avisa aadiendo esa lnea en los
mdulos: Option Explicit.
Y cmo podemos llevar a cabo esa definicin de variables? Pues muy fcil: nos vamos a men
Herramientas Opciones, y marcamos el check Requerir declaracin de variables. A partir
de ese momento mdulo que se cree nuevo mdulo que requerir la declaracin de variables.

3.- VARIABLES Y TIPOS DE DATOS


VARIABLES
Y ya que estamos hablando de variables vamos a ver cmo podemos definir las variables.
Antes de empezar vamos a ver un par de tipos de variables:

CONST: si declaramos una variable como Const estamos dicindole a Access que esa
variable siempre tendr un valor constante y que no puede cambiar.

DIM: si declaramos una variable como Dim estamos dicindole a Access que esa
variable puede ir cambiando su valor

STATIC: si declaramos una variable como STATIC estamos dicindole a Access que esa
variable puede ir cambiando su valor, el cual no se reiniciar en cada pasada del cdigo.
Claro, verdad? Como yo no lo tengo tan claro vamos a utilizar un ejemplo muy simple para
ver cmo funciona la historia.
Creamos un mdulo (ahora ya deberamos saber cmo hacerlo) y escribimos el siguiente
cdigo:

Private Sub misVariables()


Const miConstante As Integer = 5
Dim miDim As Integer
Static miStatic As Integer
miDim = miDim + 1
miStatic = miStatic + 10
Debug.Print miConstante
Debug.Print miDim
Debug.Print miStatic
End Sub

Vistame en http://neckkito.eu5.org

Si ahora ejecutamos el cdigo (F5) en la ventana Inmediato encontraremos los siguientes


valores:
5
1
10
Volvamos a ejecutar el cdigo. Los valores obtenidos ahora
son:
5
1
20
La constante, como buena constante, ha seguido manteniendo su valor en 5
La variable DIM, en la primera ejecucin, ha asumido que su valor inicial era cero y como le
hemos sumado uno el resultado final ha sido 1.
En la segunda ejecucin la DIM se ha reinicializado, de manera que ha vuelto a suponer que su
valor inicial era cero y como le sumamos 1 el resultado final ha sido 1.
La variable STATIC, en la primera ejecucin, ha asumido que su valor inicial era cero y como le
hemos sumado 10 el resultado final ha sido 10.
En la segunda ejecucin, por ser static, no se ha reinicializado, sino que ha guardado el valor
final de la primera ejecucin. Por ello, si volvemos a sumarle diez, el resultado final ser,
lgicamente, 20.
Qu ms cosas podemos aprender del cdigo que hemos utilizado? Pues, por ejemplo,
cmo se declaran las variables. As, ahora ya sabemos que:

Una variable Const se declara con la siguiente estructura

Const <nombreVariable> As <tipoDato> = <valor>

Una variable Dim se declara con la siguiente estructura

Dim <nombreVariable> As <tipoDato>

Una variable Static se declara con la siguiente estructura

Static <nombreVariable> As <tipoDato>

Otra cosa que podemos ver es que las variables numricas, como en este caso, aceptan la
realizacin de operaciones matemticas.
Es decir, hemos utilizado la suma, pero podramos haber utilizado expresiones del tipo:
miDim = miDim * 3
miDim = miDim / 2
Y lgicamente podemos mezclar las distintas variables, siempre y cuando sean del mismo tipo
de dato.
Por ejemplo, podramos haber escrito:
miDim = miConst + miStatic
Tambin ahora ya sabemos que para ver los resultados en la ventana Inmediato debemos
7

Vistame en http://neckkito.eu5.org

utilizar Debug.Print <valor/variable>


TIPOS DE DATOS
Hay varios (unos cuantos) tipos de datos. Vamos a realizar
aqu una enumeracin de los tipos de datos, sin entrar en
detalles, porque como durante este curso vamos a
utilizarlos la prctica nos permitir ver peculiaridades.
De todas maneras no voy a repetir lo que Microsoft ya ha
escrito. As, si estamos interesados en saber las
peculiaridades de cada tipo de variable, lo que tenemos que
hacer es, simplemente:
1.- En cualquier ventana de cdigo escribimos el tipo de dato (v.gr., escribimos String)
2.- Situamos el cursor encima de lo que hemos escrito y pulsamos F1
Y ahora s, vamos con los tipos de datos:
String: es una cadena de texto (se incluyen los espacios en blanco). Deben definirse
siempre entre comillas. Por ejemplo:
Const miNick As String = Neckkito
Date: es un dato de tipo fecha/hora. Lo debemos definir entre almohadillas. Por ejemplo
Const miDtm As Date = #22/03/11#
Boolean: es un dato de tipo verdadero/falso. Las palabras claves para definirlo son True o
False. Por ejemplo
Const miBln As Boolean = True
Hay que tener en cuenta que tambin puede coger su valor en funcin de si se cumple una
condicin o no. Por poner un ejemplo tonto, el booleano miBln cogera el valor False si lo
defino as: miBln = 8<3
Variant: es un dato de tipo cajn de sastre. La podemos utilizar cuando no estamos
seguros de qu tipo de dato adquirir la variable. Por ejemplo
Dim niIdea As Variant
Si escribimos en el cdigo algo as como
niIdea = Ahora ya s lo que es esta variable Variant adquirir las caractersticas de una
variable tipo String.
Los siguientes tipos son nmeros sin decimales:
Byte: es un dato de tipo numrico, que va de 0 a 255. Por ejemplo
Const miBit As Byte = 3
Integer: es un dato de tipo numrico, que abarca un mayor rango de valores que el tipo
anterior. Por ejemplo
Const miInt As Integer = 10000
Long: es un dato de tipo numrico, que abarca un mayor rango de valores que los dos
anteriores. Por ejemplo
Const miLng As Long = 100000
8

Vistame en http://neckkito.eu5.org

Y los siguientes son tipos de nmeros con decimales; es decir, lo que se denomina con coma
flotante:
Single: es un dato de tipo numrico con . Por ejemplo
Const miSing As Single = 2.1
Double: es un dato de tipo numrico, de mayor rango
que el single (y de mayor precisin en los decimales). Por
ejemplo
Const miDbl As Double = 24.456
Currency: es un dato de tipo numrico, de mayor precisin que el double. Por ejemplo
Const miCurrency As Currency = 1526.63579
Aunque pueda parecer que el tipo currency lo utilizamos slo para valores de moneda, lo
podemos utilizar si queremos una precisin muy grande en los decimales.
Decimal: es un dato de tipo numrico, con una enorme precisin en los decimales. En
Access no podemos declararlo directamente, sino que primero lo tenemos que declarar como
Variant y despus convertirlo a decimal. Esto lo veremos en un captulo posterior.
Un par de puntualizaciones al tema de las variables y tipos de datos:
Existen lo que se denominan caracteres de definicin de tipos, que permiten identificar el
tipo de la variable sin tener que escribir dicho tipo. Es decir, que si yo escribo
Dim miVariable% es como si escribiera Dim miVariable As Integer
La lista de equivalencias existentes la tenis aqu:
CARCTER DE DEFINICIN DE TIPO

TIPO VARIABLE

String

Integer

&

Long

Single

Double

Currency

Existen unos valores que no pueden ser definidos por los tipos de datos que hemos visto,
exceptuando uno: el tipo de dato Variant.
Es decir, si no hay valor en un campo ese campo es nulo (NULL), o tambin podemos tener un
dato vaco (EMPTY), un valor nada (NOTHING), o un valor error (ERROR). Para recoger esa
ausencia o tipo especial de valor debemos emplear el tipo Variant. Ahora es un poco difcil
entrar en detalles sobre esta caracterstica, pero a lo largo del curso veremos algunos ejemplos
de lo anterior y lo entenderemos perfectamente.
Y ya para acabar con este tema vamos a ver la utilidad de nuestra Option Explicit, ahora que
controlamos el tema de las variables y de los tipos de datos. Vamos a hacer lo siguiente:
1.- En nuestro VBE creamos un nuevo mdulo (o reciclamos uno que tengamos con las
pruebas que hayamos podido hacer). Escribimos el siguiente cdigo:
9

Vistame en http://neckkito.eu5.org


Private Sub miError()
Dim miInt As Integer
miString = "Aqu hay un error"
Debug.Print miString
End Sub

Si ejecutamos el cdigo nos salta el siguiente error:

Y nos marca la variable que no se ha definido (miString).


Ahora nos ha marcado en amarillo la primera lnea del procedimiento que hemos escrito,
bloqueando cualquier ejecucin de cdigo.
Para desbloquear la interrupcin del cdigo le damos al botn stop (restablecer)

Ahora, detectado el error, reescribimos el cdigo de la siguiente manera:

Private Sub miError()


Dim miInt As Integer
miInt = "Aqu hay un error"
Debug.Print miString
End Sub

Y ejecutamos el cdigo... Je, je... alguien nos chiva que hay algo mal?
Por tercera vez reescribimos el cdigo de la siguiente manera:

Private Sub miError()


Dim miInt As Integer
miInt = "Aqu hay un error"
Debug.Print miInt
End Sub

Y lo ejecutamos... obteniendo lo siguiente:

10

Vistame en http://neckkito.eu5.org

Por qu? Porque hemos definido miInt como Integer y cuando el valor que hemos asignado es
de tipo String.
Es interesante que nos vayamos familiarizando con el error 13 en tiempo de ejecucin, dado
que, en nuestros primeros proyectos, con toda probabilidad se va a convertir en un buen
amigo nuestro... O al menos as lo dicta mi experiencia!
Os dejo como ejercicio (fcil, fcil) la correccin del cdigo para que en la ventana inmediato
os aparezca un valor.
Suerte!

11

Vistame en http://neckkito.eu5.org

S-ar putea să vă placă și