Академический Документы
Профессиональный Документы
Культура Документы
Página 1 de 64
Microsoft Access 2003 - I
TEMARIO GENERAL
1. CONCEPTOS BASICOS DE VBA
2. CREACION DE UN SUB-PROCEDIMIENTO NUEVO
3. ESTRUCTURAS DE DECISION
4. ESTRUCTURAS DE BUCLE
5. TIPOS DE DATOS VARIABLES
6. LOS ASISTENTES
7. PERSONALIZAR UNA APLICACIÓN CON VBA
8. LOCALIZARY FILTRAR REGISTROS EN UN FORMULARIO
9. RESPUESTAS A EVENTOS DE INTRODUCCION DE DATOS
10. REUNIR INFORMACION EN UN CUADRO DE DIALOGO
11. EXPLORACION DE OBJETOS Y COLECCIONES
12. PERSONALIZAR INFORMES CON VBA
13. MENUS Y BARRAS DE HERRAMIENTAS PERSONALIZADOS.
Página 2 de 64
Microsoft Access 2003 - I
Página 3 de 64
Microsoft Access 2003 - I
LOS MODULOS
Los módulos son los objetos enlos que se guarda el código que va a utilizar VBA.
• Módulos generales
• Módulos asociados a formularios e informes
• Módulos de clase.
Una vez hecho esto se abre el editor de vba y nos crea un módulo con el original
nombre Modulo1.
Option Explicit
Una vez hecho esto grabamos el modulo dándole al botón guardar. Aceptamos el
nombre por defecto Modulo 1 y cerramos la ventana.
Para que nos de plena libertad de actuación, vamos a desactivar el botón del
Asistente para controles.
Página 4 de 64
Microsoft Access 2003 - I
Página 5 de 64
Microsoft Access 2003 - I
Página 6 de 64
Microsoft Access 2003 - I
Página 7 de 64
Microsoft Access 2003 - I
Página 8 de 64
Microsoft Access 2003 - I
Página 9 de 64
Microsoft Access 2003 - I
Página 10 de 64
Microsoft Access 2003 - I
Página 11 de 64
Microsoft Access 2003 - I
Página 12 de 64
Microsoft Access 2003 - I
Página 13 de 64
Microsoft Access 2003 - I
Página 14 de 64
Microsoft Access 2003 - I
Página 15 de 64
Microsoft Access 2003 - I
Página 16 de 64
Microsoft Access 2003 - I
Página 17 de 64
Microsoft Access 2003 - I
Página 18 de 64
Microsoft Access 2003 - I
Página 19 de 64
Microsoft Access 2003 - I
Página 20 de 64
Microsoft Access 2003 - I
Página 21 de 64
Microsoft Access 2003 - I
Página 22 de 64
Microsoft Access 2003 - I
Página 23 de 64
Microsoft Access 2003 - I
Página 24 de 64
Microsoft Access 2003 - I
Página 25 de 64
Microsoft Access 2003 - I
Página 26 de 64
Microsoft Access 2003 - I
Página 27 de 64
Microsoft Access 2003 - I
Página 28 de 64
Microsoft Access 2003 - I
Página 29 de 64
Microsoft Access 2003 - I
Página 30 de 64
Microsoft Access 2003 - I
Página 31 de 64
Microsoft Access 2003 - I
Página 32 de 64
Microsoft Access 2003 - I
Página 33 de 64
Microsoft Access 2003 - I
I el icono “Rectángulo”:
Página 34 de 64
Microsoft Access 2003 - I
Página 35 de 64
Microsoft Access 2003 - I
Bien, la parte “visual” del programa ya está hecha, vamos a por la parte de
“creación de código”...
Veamos:
Página 36 de 64
Microsoft Access 2003 - I
Página 37 de 64
Microsoft Access 2003 - I
II) Se trata de hacer en este apartado lo mismo que en el anterior, pero para el
“trapecio”…
- CLIC en [Nuevo]
Página 38 de 64
Microsoft Access 2003 - I
Página 39 de 64
Microsoft Access 2003 - I
Aspecto:
Características:
Página 40 de 64
Microsoft Access 2003 - I
• Para el botón 1:
• Para el botón 2:
• Para el botón 3:
- Ejecuta y prueba los botones del formulario PROGRAMA1, pero antes graba
el formulario.
Página 41 de 64
Microsoft Access 2003 - I
Página 42 de 64
Microsoft Access 2003 - I
Hasta ahora nos hemos dedicado a programar en VBA sin utilizar “datos” de la
base de datos subyacente a nuestros programas. Aunque en los últimos ejercicios
hemos utilizado formularios, sólo los hemos utilizado como soporte “visual”.
Vamos a comenzar a trabajar con “datos” de nuestras bases de datos. Piensa, que
en realidad la “programación en Visual Basic del Access”, ha de ser un
instrumento para mejorar la gestión de nuestras bases de datos Access.
En algunos de los ejercicios anteriores hemos utilizado órdenes propias del Access,
como DoCmd.OpenForm “Triángulo”; veremos en este apartado una forma muy
fácil de estudiar este tipo de instrucciones.
Página 43 de 64
Microsoft Access 2003 - I
• Cuadro 1:
Etiqueta: Socio Anterior
Propiedades:
Nombre: SocioA
Activado: No
• Cuadro 2:
Etiqueta: (ninguna)
Propiedades:
Nombre: Nom
Activado: No
• Cuadro 3:
Etiqueta: Nivel de Confianza
Propiedades:
Nombre: Nivel
Índice de tabulación: 1
Página 44 de 64
Microsoft Access 2003 - I
- Como no tenemos ni idea de cuál deben ser estas órdenes, utilizaremos un truco
muy útil:
• Crearemos una “macro” que contenga las órdenes que nos interesan.
• Convertiremos la macro en un programa VB, de esta forma podremos
“localizar” lo que nos interesa.
Página 45 de 64
Microsoft Access 2003 - I
Graba la macro, tal como nos advierte un mensaje de advertencia y haz clic en
[Convertir] en el segundo mensaje que aparece.
Página 46 de 64
Microsoft Access 2003 - I
- Con el cursor del ratón en el “punto negro” pulsa el botón derecho del ratón y
accede a sus propiedades.
Observemos el programa:
• Al abrir el formulario (Form_Open)
• Declaramos dos variables x, y de tipo String
• Nos situamos en el último registro (acLast)
• Asignamos a x e y los valores de los campos NumSocio y NombreApell,
que serán los últimos, porque estamos situados en el último registro.
• Nos situamos en un nuevo registro (acNewRec)
• Asignamos a los controles SocioA y Nom, los valores de las variables x e
y.
Página 47 de 64
Microsoft Access 2003 - I
- Supongo que te das cuenta del problema: estamos en un nuevo registro pero los
datol que aparecen en los dos primeros controles del formulario, no
corresponden al último registro.
Vamos a intentar solucionar el problema:
• Sitúate en la pantalla de diseño del formulario Socios
• Inserta un botón de comando con las siguientes propiedades:
Nombre: NRegistro
Título: Otro
• Accede al módulo del formulario y escribe el siguiente procedimiento de
evento:
Private Sub NRegistro_Click()
Dim x As String, y As String
DoCmd.GoToRecord , "", acLast
x = [NumSocio]: y = [NombreApell]
DoCmd.GoToRecord , "", acNewRec
[SocioA] = x
[Nom] = y
End Sub
Como puedes observar se trata de exactamente el mismo programa
Form_Open
Página 48 de 64
Microsoft Access 2003 - I
NumSocio.SetFocus
End Sub
Recuerda que es importante ir grabando todos los cambios que vamos haciendo.
- Vamos a resolver la segunda parte del problema que nos habíamos propuesto
(el del Nivel de Confianza), que será muy fácil de solucionar gracias a la nueva
instrucción:
NombreCampo.SetFocus: coloca el foco en “NombreCampo”
Observa:
“Al salir del campo NombreApell (NombreApell_Exit)”
“Si en el control Nivel hay un 1 (If [Nivel]=”1”)”
“Entonces sitúate en el campo Teléfono (Then Teléfono.SetFocus)”
Es decir, que en la práctica nos saltaremos los campos NIF y Dirección.
Página 49 de 64
Microsoft Access 2003 - I
Página 50 de 64
Microsoft Access 2003 - I
Módulos y Procedimientos
- Módulos estándar:
• Accedemos a ellos a través de la pantalla inicial de la BD, objeto:
Módulos y click en [Nuevo] o [Diseño]
• En dichos módulos escribimos los procedimientos “Sub” y las funciones.
Página 51 de 64
Microsoft Access 2003 - I
MÓDULO MÓDULO DE
Ámbito de un procedimiento:
- Private:
Indica que el procedimiento sólo es accesible para los procedimientos restantes
del módulo en el que se encuentra.
- Public:
Indica que el procedimiento es accesible para todos los procedimientos de todos
los módulos.
Página 52 de 64
Microsoft Access 2003 - I
Página 53 de 64
Microsoft Access 2003 - I
Página 54 de 64
Microsoft Access 2003 - I
Página 55 de 64
Microsoft Access 2003 - I
Página 56 de 64
Microsoft Access 2003 - I
Página 57 de 64
Microsoft Access 2003 - I
Página 58 de 64
Microsoft Access 2003 - I
Página 59 de 64
Microsoft Access 2003 - I
Página 60 de 64
Microsoft Access 2003 - I
Este informe fue diseñado para un departamento de ventas, el cual manda una
carta a sus vendedores cada trimestre, y lo interesante de este es que el informe
crea una elipse alrededor del trimestre en el cual el vendedor llego o sobrepaso su
gol trimestral. Aquí va el código para lograr esto (el reporte tiene un subreporte el
cual muestra los trimestres):
' Utilizar Loop alrededor de todos los controles que van a tener un circulo.
' If ctl is not Null (si ctl no es Null), then determine if value is (entonces
determninar si el 'valor es) 90% or (mas grande que el valor de el text box Goal
For intI = 1 To 4
Set ctl = Me("Qtr" & intI)
If Not IsNull(ctl) Then
intPrintCircle = (ctl >= 0.9 * Me!Goal)
Página 61 de 64
Microsoft Access 2003 - I
End Sub
¿Cómo?
Página 62 de 64
Microsoft Access 2003 - I
Repita este procedimiento para cada formulario o informe al que desee anexar la
barra de menús.
¿Cómo?
Página 63 de 64
Microsoft Access 2003 - I
Repita este procedimiento para cada formulario o informe al que desee anexar la
barra de herramientas.
Página 64 de 64