Vba Excel 2013.pdf

  • Uploaded by: Fabian Mahecha
  • 0
  • 0
  • February 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Vba Excel 2013.pdf as PDF for free.

More details

  • Words: 50,454
  • Pages: 260
Loading documents preview...
Ediciones ENI

VBA Excel 2013 Programación en Excel: Macros y Lenguaje VBA

Colección Recursos Informáticos

Extracto del Libro

283

Capítulo 8

Administración de eventos 1. Presentación

Administración de eventos

Un evento es una acción del usuario o del sistema reconocido por un objeto de Microsoft Excel. El evento desencadena un procedimiento, asociado al evento del objeto activo. Estos procedimientos le permiten asociar un código personalizado en respuesta a un evento que se produce en un objeto Excel (libro, hoja, formulario, gráfico, etc.).

VBA Excel 2013

284

Programación en Excel: macros y lenguaje VBA

2. Escritura de eventos 2.1 Eventos de libro, de hoja o de formulario Usted puede acceder a los procedimientos de eventos asociados a un objeto de la siguiente manera: dEn la ventana Explorador de proyectos, haga doble clic en el objeto deseado (libro, hoja o formulario) para hacer aparecer la ventana de código correspondiente. dAbra la lista desplegable a la izquierda de la ventana de código y seleccione Workbook, Worksheet o UserForm, según el objeto seleccionado. dTambién puede seleccionar un evento vinculado al objeto seleccionado en la lista desplegable de la derecha, para asociarle un código personalizado. Observación

© Editions ENI - All rights reserved

La ejecución de los procedimientos de eventos, se puede desactivar en cualquier momento asignando el valor False a la propiedad EnableEvents del objeto Application.

Administración de eventos Capítulo 8 Ejemplo Este ejemplo muestra cómo obtener un listado histórico de todos los hipervínculos visitados en la hoja de cálculo activa.

Resultado en Excel:

285

VBA Excel 2013

286

Programación en Excel: macros y lenguaje VBA

2.2 Eventos del objeto Application Se necesitan tres etapas para la escritura y ejecución de los eventos del objeto Application. Etapa 1 dInserte un módulo de clase: Insertar - Módulo de clase o abra la lista

y haga clic en Módulo de clase.

dUna vez insertado el módulo, asígnele un nombre. Ejemplo Dele el nombre ObjApplication al módulo de clase.

Etapa 2 dEn el módulo de clase, cree un objeto Application con el siguiente código: Public WithEvents NomObjeto As Application

Ejemplo Creación del objeto MiAplicación como aplicación. Public WithEvents MiAplicacion As Application

dSeleccione el objeto creado en la lista de la izquierda del módulo y luego seleccione el evento esperado en la lista de la derecha. Escriba el código de los procedimientos que desea generar.

© Editions ENI - All rights reserved

El objeto así creado queda disponible en la lista de la izquierda del módulo.

Administración de eventos Capítulo 8 Ejemplo Creación de dos procedimientos de eventos: el primero realiza la inserción de una nueva hoja; el segundo, la creación de un nuevo libro. Public WithEvents MiAplicacion As Excel.Application ______________________________________________________________________ Private Sub MiAplicacion_WorkbookNewSheet _ (ByVal Wb As Workbook, ByVal Sh As Object) Dim NomHoja As String ' Cada vez que se agrega una hoja se pide al usuario ' que introduzca un nombre que a continuación se destinará a la hoja ' insertada tras las hojas existentes NomHoja = InputBox("Introduzca el nombre de la hoja") ActiveSheet.Name = NomHoja ActiveSheet.Move After:=Sheets(Sheets.Count) End Sub ______________________________________________________________________ Private Sub MiAplicacion_NewWorkbook(ByVal Wb As Workbook) Dim NbHojas As Integer Dim NbActual As Integer Dim Diferencia As Integer ' Por cada nuevo libro, ' solicitamos al usuario la cantidad de hojas ' Según el caso, se agregan o eliminan las hojas necesarias Do NbHojas = Application.InputBox _ ("¿Cantidad de hojas?", Type:=1) Loop While NbHojas = False NbActual = Sheets.Count Diferencia = NbActual - NbHojas ' Eliminar las hojas de más ' Eliminar los mensajes de alerta con el fin ' de no obtener mensajes en la eliminación de hojas Do While Diferencia > 0 Application.DisplayAlerts = False Sheets.Item(Diferencia).Select ActiveWindow.SelectedSheets.Delete Diferencia = Diferencia - 1 Loop ' Agregar hojas necesarias ' Se desactivan los eventos para ' no indicar los nombres de las nuevas hojas Do While Diferencia < 0 Application.EnableEvents = False Sheets.Add

287

VBA Excel 2013

288

Programación en Excel: macros y lenguaje VBA Diferencia = Diferencia + 1 Loop ' Reactivar eventos y alertas Application.EnableEvents = True Application.DisplayAlerts = True End Sub

Etapa 3 dActive un módulo cualquiera y conecte el objeto declarado en el módulo de clase con el objeto Application para las siguientes instrucciones: Dim NomVariable As New NomModuloDeClase Sub NomProced () Set NomVariable.NomObjeto = Application End Sub

Ejemplo Agregue el siguiente código en el módulo Declaraciones. Option Explicit Dim app As New ObjApplication ________________________________________________________________ Sub InicializaMiAplicacion() Set app.MiAplicacion = Application End Sub

Finalmente, llame al procedimiento InicializaMiAplicacion al abrir el libro (módulo de clase ThisWorkbook).

Cuando se abra el libro, se ejecutarán automáticamente los procedimientos de eventos creados durante la etapa 2 y se agregarán los libros o las hojas. Estos procedimientos se desactivarán al cerrar el libro.

© Editions ENI - All rights reserved

Private Sub Workbook_Open() InicializaMiAplicacion End Sub

Ediciones ENI

VBA Access 2013 Programar en Access

Colección Recursos Informáticos

Extracto del Libro

207

Capítulo 6

Gestión de los eventos 1. Presentación

Gestión de los eventos

1.1 Definición Un evento es el resultado de una acción del usuario o del sistema sobre un objeto. Desencadena la ejecución del código correspondiente al procedimiento de evento del objeto activado.

208

VBA Access 2013

Programar en Access

La utilización de un procedimiento de evento o de una macro permite asociar un tratamiento específico en respuesta a un evento que se produzca en un formulario, en un informe o en un control.

1.2 Asociación de código VBA a un evento Puede asignar código VBA al evento de un objeto de dos maneras: – a partir de la ficha Eventos de la ventana de propiedades del objeto en Access.

© Editions ENI - All rights reserved

– a partir de las listas desplegables de objetos y de eventos en el editor Visual Basic.

209

Gestión de los eventos Capítulo 6

2. Categorías de eventos Las siguientes listas de eventos están clasificadas por tipo y contienen: – el nombre del evento, – el nombre de la propiedad correspondiente en la ventana de propiedades del objeto (entre paréntesis), – la descripción del evento, – la columna de la derecha (Cancelación) indica si el evento puede cancelarse. La cancelación de un evento se describe en el apartado Cancelación de un evento.

2.1 Eventos de tipo Ventana Cancelación Open

(AlAbrir) Sí Se produce al abrir un formulario pero antes de que se muestre el primer registro. Se produce al abrir un informe, pero antes de su impresión.

Load

(AlCargar) No Se produce al abrir un formulario cuando se muestra el primer registro.

Resize

(AlCambiarTamaño) No Se produce al mostrar por primera vez el formulario y al cambiar su tamaño.

UnLoad

(AlDescargar) Sí Se produce al cerrar y cuando se liberan los registros, pero antes de que el formulario desaparezca.

Close

(AlCerrar) No Se produce cuando el formulario o el informe desaparece al cerrarlo.

VBA Access 2013

210

Programar en Access

2.2 Eventos de tipo Enfoque Les eventos de tipo "enfoque" pueden aplicarse a los formularios (Activate, Deactivate, GotFocus, LostFocus) o a los controles (Enter, Exit, SetFocus, LostFocus). Decimos que un objeto tiene el enfoque (o foco) cuando puede recibir una entrada del usuario a través de acciones con el ratón o con el teclado. Los objetos que tienen el enfoque se llaman objetos activos (ActiveForm o ActiveControl). Observación El método SetFocus permite dar el foco a un control o a un formulario.

Cancelación Activate

No (AlActivar) Se produce cuando la ventana del formulario o del informe se convierte en activa.

Enter

(AlEntrar) No Se produce antes de que un control tome el foco a partir de un control o al abrir el formulario.

Exit

(AlSalir) Sí Se produce antes de que un control pierda el enfoque en provecho de otro control del formulario o de otro formulario.

GotFocus

(AlRecibirEnfoque) No Se produce cuando un control o un formulario sin control activo recibe el foco.

LostFocus

(AlPerderEnfoque) No Se produce cuando un control o un formulario pierde el enfoque.

© Editions ENI - All rights reserved

Deactivate (AlDesactivar) No Se produce al activar otra ventana, pero antes de que esta última esté activada. Se produce también al cerrar la ventana.

211

Gestión de los eventos Capítulo 6

2.3 Eventos de tipo Datos Los eventos de tipo "datos" se aplican a los formularios asociados a un origen de datos (propiedad RecordSource rellenada a partir de un nombre de tabla o de una consulta) y a los controles asociados a un campo del origen de datos del formulario (propiedad ControlSource rellenada). Cancelación AfterInsert

(DespuésDeInsertar) No Se produce después de agregar un nuevo registro a la tabla.

AfterUpdate

(DespuésDeActualizar) No Se produce después de la actualización de un control o de un registro con datos modificados.

AfterDelConfirm

(DespuésDeConfirmarEliminación) No Se produce después de que el usuario haya respondido a la solicitud de eliminación de los registros.

BeforeInsert

(AntesDeInsertar) Sí Se produce al teclear el primer carácter de un nuevo registro, pero antes de agregar realmente el registro.

BeforeUpdate

(AntesDeActualizar) Sí Se produce antes de la actualización de un control o de un registro con datos modificados.

BeforeDel-Confirm

(AntesDeConfirmarEliminación) Sí Se produce después de que el usuario haya eliminado registros y antes que Access solicite confirmación.

VBA Access 2013

212

Programar en Access

NotInList

(AlNoEnLaLista) No Se produce al entrar un valor que no existe en una lista y cuando la propiedad LimitarALista es verdadera.

Current

(AlActivarRegistro) No Se produce cuando el foco pasa de un registro a otro. Se produce también al abrir, antes de que el primer registro se convierta en el actual.

Change

(AlCambiar) No Se produce al modificar el contenido de un cuadro de texto o un cuadro combinado (teclado o macro/Visual Basic).

Updated

(AlActualizar) No Se produce cuando los datos de un objeto OLE han sido modificados.

Delete

(AlEliminar) Sí Se produce antes de la eliminación efectiva. Al pulsar [Supr] por ejemplo.

Dirty

Sí (AlCambiar) Se produce cuando cambia el contenido de un formulario o la parte de texto de un cuadro combinado. Se produce también al pasar de una página a otra en un control Ficha.

© Editions ENI - All rights reserved

Cancelación

Introducción Access  2013  dispone  del  lenguaje  de  programación  Visual  Basic  para  Aplicaciones  (VBA)  que  permite extender su funcionalidad para ofrecerle mejor rendimiento. Es un lenguaje potente que no presenta ninguna dificultad para ser comprendido por los prin

Objetivos del libro Este libro se dirige a los desarrolladores y usuarios avezados que desean crear aplicaciones profesionales con Access. El  objetivo  de  este  libro  consiste  en  presentar  el  abanico  de  posibilidades  propuestas  por  la  potencia  del lenguaje  VBA.  Los  diferentes  ejemplos,  disponibles  para  descargar  en  la  página  Información,  le  permitirán poner en práctica fácil y progresivamente los conocimientos adquiridos. El único requisito necesario para aprovechar el contenido de este libro es el de tener un buen conocimiento de  la  interfaz  de  Access.  Poseer  nociones  de  programación  o  conocer  un  lenguaje  de  programación  le ayudará a dominar el lenguaje VBA. Sin embargo, no son indispensables para sacarle partido a este libro. En una primera fase, aprenderá a transformar macros a lenguaje VBA, a emplear el entorno de desarrollo de Access,  a  familiarizarse  con  las  nociones  básicas  del  lenguaje  VBA  y  usarlas  para  manipular  los  objetos Access (tablas, formularios, informes...), modificar las opciones Access y automatizar algunos procesos. En una segunda fase, descubrirá gradualmente cómo crear aplicaciones profesionales con Access mediante los siguientes módulos: Manejo  de  datos  contenidos  en  las  diferentes  tablas:  búsqueda  de  registros  según  criterios específicos, actualización de registros, modificación de la estructura de una tabla, etc. El uso del lenguaje SQL para traducir cualquier tipo de petición al lenguaje VBA. La  interceptación  de  eventos  de  un  formulario  o  un  informe  con  el  fin  de  asociarle  un  tratamiento personalizado en lenguaje VBA (programación orientada a eventos). El uso de herramientas de depuración para identificar y corregir los diferentes tipos de errores. La optimización de la fiabilidad del código VBA gracias a la implementación de un gestor de errores. La personalización dinámica de la presentación de los formularios e informes. La mejora de la interfaz usuario Access. La creación de una cinta Microsoft Office específicamente para su aplicación. La manipulación de aplicaciones Microsoft Office 2010 Word, Excel y Outlook, en particular mediante los  ejemplos  siguientes:  generación  de  correspondencia  con  Word,  creación  de  un  libro  Excel, visualización de los contactos Outlook. El  acceso  a  las  funcionalidades  relacionadas  con  Internet:  importar  y  exportar  ficheros  XML,  y generación de ficheros HTML. El  control  del  sistema  operativo  a  través  de  llamadas  a  las  funciones  API  de  Windows  (Application Programming Interface). Para  terminar,  el  último  capítulo  del  libro  le  guía  en  la  creación  completa  de  una  aplicación  en  Access.  La aplicación propuesta permite gestionar los cursos seguidos por los empleados de una empresa mediante las funcionalidades siguientes: entrada de los cursos que integran cálculos automáticos, el registro de los cursos tras el control de la coherencia de los datos introducidos, la búsqueda de los cursos según diferentes criterios e impresión de la lista de los cursos que cumplen esos criterios. Al  final  de  este  libro,  estará  convencido  de  la  necesidad  de  utilizar  el  lenguaje  VBA  para  crear  aplicaciones profesionales, eficaces y amenas con Access.

Revisión de conceptos Una base Access está constituida por un único archivo con la extensión .ACCDB que contiene los distintos objetos de la aplicación. Estos objetos son:

Las tablas Contienen los datos de la base y pueden estar relacionadas entre ellas.

Las consultas Permiten efectuar: selecciones y ordenaciones en las tablas, cálculos sencillos y referencias cruzadas, acciones (agregar, eliminar, actualizar registros, crear tablas), operaciones SQL.

Los formularios Se utilizan para consultar o actualizar los datos.

Los informes Se  utilizan  para  imprimir  listados  desde  la  simple  lista  de  una  tabla  hasta  informes  más  complejos  que contengan agrupamientos de registros y cálculos.

Las macros Permiten automatizar varias tareas mediante un lenguaje particular, sin alcanzar, sin embargo, la potencia de desarrollo de VBA.

Los módulos Contienen  una  parte  del  código  VBA  de  la  aplicación,  es  decir,  declaraciones  de  funciones,  procedimientos, etc.

Principios fundamentales de VBA VBA presenta un entorno de programación orientado a objetos. Un  objeto  es  una  entidad  autónoma  que  posee  características  (propiedades:  tamaño,  color,  valor...)  y comportamientos  (métodos)  que  le  son  propios.  Ciertos  objetos  poseen  una  representación  visual (Formularios,  Informes...),  mientras  que  otros  sólo  son  accesibles  mediante  código  VBA  (DBEngine, Container...). La  mayoría  de  objetos  visuales  tienen  la  posibilidad  de  responder  a  eventos  (al  abrir,  después  de actualizar...). Mediante el código, la programación en VBA permite inducir comportamientos particulares de los objetos en función  de  los  eventos:  métodos,  procedimientos  y  funciones.  Para  este  fin,  la  escritura  del  código  se  ve facilitada  ya  que  se  basa  en  una  concepción  modular.  De  este  modo  permite  una  gran  flexibilidad  de funcionamiento y un mantenimiento más sencillo.

Estructura de un objeto

Evento

Acción del usuario o del sistema que actúa sobre un objeto y desencadena el código correspondiente.

Método

Código predefinido referido a un tipo de objeto.

Procedimiento

Secuencia de instrucciones que no devuelve ningún valor.

Función

Secuencia de instrucciones que devuelve un valor.

Conversión de macros a VBA Las macros representan una manera fácil de gestionar el encadenamiento de acciones sencillas tales como abrir y cerrar formularios. Sin embargo, VBA presenta otras ventajas: facilita el mantenimiento de las bases de datos ya que los procedimientos de evento de Visual Basic están integrados en la definición del formulario o del informe, mejora y facilita la gestión de los errores, permite llevar a cabo acciones en el sistema, autoriza la manipulación de un solo registro a la vez, acepta el paso de argumentos al código en curso de ejecución. Cualquier macro puede convertirse automáticamente en código VBA.

1. Conversión de las macros en un formulario o en un informe   En el panel de exploración, haga clic con el botón secundario del ratón en el formulario o el informe y a continuación haga clic en Diseño.   Bajo  la  pestaña  DISEÑO,  haga  clic  en  el  icono  Convertir  macros  del  formulario  a  Visual Basic  oConvertir  macros  del  informe  a  Visual  Basic  situado  en  la  parte  inferior  derecha  del grupoHerramientas:

Aparece entonces el siguiente cuadro de diálogo:

  Si lo desea desactive las opciones que aparecen por defecto. No obstante se recomienda conservar el control  de  errores  para  la  fiabilidad  de  la  aplicación  y  los  comentarios  para  simplificar  la  lectura  del código.   Haga clic en Convertir para continuar.

2. Conversión de macros globales   En  el  panel  de  navegación,  use  el  botón  secundario  del  ratón  para  hacer  clic  en  la  macro  y,  a continuación, en Modo Diseño.   Bajo la pestaña DISEÑO, haga clic en el icono Convertir macros a Visual Basic situado en la parte

inferior derecha del grupo Herramientas.

  En el cuadro de diálogo Convertir macros seleccione las opciones deseadas.   Haga  clic  en  Convertir  para  poder  continuar:  la  macro  habrá  sido  convertida  a  código  VBA  en  un módulo denominado Macro convertida seguido del nombre de la macro.

Seguridad de la base de datos Los parámetros de seguridad de las macros permiten controlar lo que se produce cuando se abre una base de datos de Access que contiene una macro o código VBA.

1. Modificación de los parámetros de seguridad de una base de datos Access De  manera  predeterminada,  cuando  se  instala  Access,  se  abren  las  bases  de  datos  en modoDeshabilitado. Esto significa que los siguientes componentes no pueden ser ejecutados: Código VBA. Acciones no securizadas en Macros: aquéllas que permitirían a un usuario modificar el contenido de la base de datos o acceder a recursos externos a ella.  Consultas: todas aquellas que permitan insertar, modificar o suprimir datos de tablas. Controles ActiveX. Si abre una base de datos Access en modo deshabilitado, el sistema le presentará una advertencia en la barra de mensajes:

Para activar de forma permanente el contenido de una base de datos haga clic en Habilitar contenido. La base de datos se convierte así en un documento aceptado; la advertencia de seguridad no se volverá a mostrar en el momento de su apertura. La  aceptación  de  la  base  de  datos  se  restringe  a  una  localización  precisa;  si  la  mueve  de  lugar  se mostrará de nuevo la advertencia de seguridad en el momento de su apertura.

También puede habilitar el contenido sólo para una sesión (esto es, durante el tiempo que tenga la base de datos abierta) de la siguiente manera:   Cuando  el  sistema  le  muestre  la  advertencia  de  seguridad,  pulse  en  el  enlace  Haga  clic  para obtener más detalles de la barra de mensajes o pulse en la pestaña Archivo.   En la zona Advertencia de seguridad abra la lista Habilitar contenido.   Seleccione Opciones avanzadas.   En  el  cuadro  de  diálogo Opciones  de  seguridad  Microsoft  Office,  seleccione  la  opción  Habilitar contenido para esta sesión.   De esta manera Access ocultará la advertencia de seguridad: volverá a ser mostrada la próxima vez que abra el fichero.

2. Modificación de los parámetros de seguridad por defecto También puede modificar los parámetros de seguridad por defecto de todas las bases de datos Access de la siguiente manera:   Seleccione el comando Opciones en la pestaña Archivo.   Seleccione la categoría Centro de confianza en el menú de la izquierda.   Haga clic en el botón Configuración del centro de confianza.   Seleccione  la  categoría  Configuración  de  macros  en  el  menú  de  la  izquierda  para  modificar  la

configuración de las macros y del código VBA.   En caso de modificación de la configuración de seguridad, la nueva opción seleccionada será aplicada al conjunto de todas las bases de datos Access con excepción de la base de datos activa actualmente. Para aplicar la nueva configuración a esta base de datos deberá cerrarla y volver a abrirla. Para  modificar  la  configuración  de  seguridad  de  los  controles  ActiveX  seleccione  Configuración ActiveX en el menú de la izquierda de la ventana Centro de confianza.

3. Descripción de las diferentes opciones de seguridad El término "macros" engloba todos los comandos macro y el código VBA. Deshabilitar todas las macros sin notificación Se deshabilitan todas las macros y todas las alertas de seguridad.

Deshabilitar todas las macros con notificación Opción predeterminada. Se deshabilitan las macros, pero aparece la alerta de seguridad.

Deshabilitar todas las macros excepto las macros firmadas digitalmente Si las macros de un archivo están firmadas digitalmente por un editor de confianza, pueden ser ejecutadas. Si el editor no es de confianza, aparece una notificación y entonces se pueden habilitar las macros firmadas o confiar en el editor. Las macros no firmadas digitalmente no podrán ser habilitadas.

Habilitar todas las macros Si se selecciona esta opción, se habilitan todas las macros. No se recomienda utilizar esta configuración de manera permanente.

Sea cual sea la opción elegida, si se instala un software antivirus que funcione con Microsoft Office System 2013, los archivos que contienen macros son analizados antes de ser abiertos.

4. Documentos confiables El  término  ”documento  confiable”  es  un  término  genérico  común  al  conjunto  de  las  aplicaciones  Office 2013. Un documento confiable es un archivo Microsoft Office (Base de datos Access, Hoja de cálculo Excel, Documento  Word...)  en  el  que  todos  los  componentes  inseguros  (código  VBA,  macros,  componentes ActiveX...) se habilitan en cuanto se abre el archivo. Access puede dar por válida una base de datos de diferentes maneras: Habilitando el contenido inseguro de la base de datos después de una advertencia de seguridad. Añadiendo la ubicación de la base de datos a la lista de ubicaciones de confianza. Validando al editor de la base de datos. Es posible deshabilitar cualquier documento confiable por activación del contenido de la siguiente manera:   Seleccione el comando Opciones de la pestaña Archivo.

  Seleccione la categoría Centro de confianza en el menú de la izquierda.   Haga clic en el botón de comando Configuración del Centro de confianza.   Seleccione la categoría Documentos confiables en el menú izquierdo.   Marque la casilla Deshabilitar los documentos confiables. En  lo  concerniente  a  los  documentos  validados  por  otros  métodos,  en  todo  momento  se  puede  suprimir una ubicación de confianza o un editor de confianza.

5. Ubicaciones de confianza Si lo desea, puede definir de la siguiente manera una lista de ubicaciones para las cuales todas las bases de datos Access serán consideradas ”de confianza”:   Seleccione el comando Opciones de la pestaña Archivo.   Seleccione la categoría Centro de confianza en el menú izquierdo.   Seleccione la categoría Ubicaciones de confianza en el menú izquierdo.   Haga clic en el botón Agregar una ubicación.   Seleccione la ubicación deseada mediante el botón Examinar... y complete los datos requeridos en el cuadro de diálogo Ubicación de confianza de Microsoft Office.

  Haga clic en el botón Aceptar: la ruta escogida será añadida a la lista de ubicaciones de confianza.

6. Editores de confianza Las aplicaciones Access desarrolladas por editores de confianza se caracterizan por los siguientes criterios: El código está firmado por el programador mediante una firma digital; La firma digital es válida; La firma digital está actualizada (no ha caducado); El  certificado  asociado  a  la  firma  digital  fue  emitido  por  una  entidad  emisora  de  certificados acreditada.

Para agregar un editor a la lista de Editores de confianza:   Abra  una  base  de  datos  Access  cuyo  código  ha  sido  firmado  por  un  editor  (paquete  firmado  con  la extensión accdc).   Seleccione  la  opción  Confiar  en  todo  contenido  del  editor  en  el  cuadro  de  diálogo  Aviso  de seguridad de Microsoft Access.

Puede ver en cualquier momento la lista de editores de confianza de la siguiente manera:   Seleccione el comando Opciones de la pestaña Archivo.   Seleccione la categoría Centro de confianza en el menú de la izquierda.   Seleccione la categoría Editores de confianza en el menú de la izquierda. También es posible desactivar un editor de confianza haciendo clic en el botón Quitar.

Publicar una base de datos Access mediante un paquete firmado Para publicar una aplicación Access, es necesario crear un paquete y firmarlo para implementar la seguridad. Cuando los usuarios reciban el paquete, la firma garantiza que la base de datos no ha sido modificada desde la creación del paquete. La firma permite, además, comprobar la procedencia de la aplicación y confiar en el editor. La  firma  se  aplica  a  todos  los  objetos  de  la  base  de  datos,  y  no  solamente  a  las  macros  o  códigos  VBA. Además, se comprime el fichero de paquete para reducir los tiempos de descarga.

1. Obtener un certificado digital Para firmar de manera digital un paquete, es necesario obtener previamente un certificado digital de una autoridad de certificación comercial como Verisign (www.verisign.com) o Thawte (www.thawte.com). La  herramienta  Selfcert.exe  (programa  entregado  con  Microsoft  Office  2013  y  ubicado  en  la  carpeta C:\Archivos  de  Programas\Microsoft  Office\Office  15)  le  permite  crear  un  certificado  digital  para  efectuar pruebas de paquete (no se podrá desplegar el paquete en puestos de trabajo distíntos a aquél en que ha sido creado). Para crear un certificado digital con la herramienta Selfcert.exe:   Lance el programa Selfcert.exe.   Introduzca el nombre de su certificación (Ej.: ENI), luego haga clic en el botón de comando Aceptar.

Puede  obtener  la  lista  de  las  autoridades  certificadoras  pulsando  el  enlace  Haga  clic  aquí  para obtener una lista de entidades comerciales emisoras de certificados.

2. Crear y firmar un paquete

Es posible crear un paquete firmado de la siguiente manera:   Abra la base de datos en Access.   Seleccione el comando Guardar como en la pestaña Archivo.   Haga doble clic en Empaquetar y firmar situado debajo de Avanzadas.

  Seleccione  un  certificado  digital  y  luego  haga  clic  en  el  botón  de  comando  Aceptar  (el  botón  de comando  Mostrar  el  certificado  le  permite  modificar  las  propiedades  de  un  certificado  o deshabilitarlo).   En el cuadro de diálogo Crear un paquete firmado Microsoft Access, seleccione la ubicación de su paquete en la lista Guardar como y haga clic en el botón de comando Crear.   A  continuación  Access  crea  un  paquete  firmado  con  la  extensión  accdc  en  la  ubicación  que  Usted escogió.

El entorno de desarrollo IDE 1. Presentación El IDE (Integrated Development Environment) es el entorno en el que puede introducir, modificar y probar su código VBA. Este entorno también se llama VBE (Visual Basic Editor). Desde Access, se puede acceder al entorno de desarrollo IDE:   Mediante la combinación [Ctrl][F11].

  Haciendo clic en el icono 

 debajo de la pestaña Herramientas de base de datos.

  Seleccionando  un  procedimiento  de  evento  desde  una  hoja  de  propiedades  en  un  formulario  o  un informe. El IDE pone a su disposición una gran cantidad de herramientas que facilitan la programación y la puesta a punto  de  su  código  VBA:  herramientas  de  depuración,  lista  de  miembros  automática,  examinador  de objetos...

2. Ventanas del entorno IDE

Se pueden mostrar todas las ventanas del entorno IDE a partir del menú Ver.

La barra de herramientas Estándar (1)

1 Ver Microsoft Access

11 Interrumpir

2 Agregar un módulo, un módulo de clase o un procedimiento (Función o Sub)

12 Restablecer

3 Guardar

13 Vista Diseño

4 Cortar

14 Explorador de proyectos

5 Copiar

15 Ventana de Propiedades

6 Pegar

16 Examinador de objetos

7 Buscar

17 Cuadro de herramientas

8 Deshacer

18 Ayuda de Microsoft Visual Basic

9 Rehacer

19 Posición en la ventana de Código

10 Ejecutar

El explorador de proyectos (2) Todos los módulos de la base de datos o del proyecto VBA aparecen en el explorador de proyectos mediante una estructura de árbol. Están agrupados en tres conjuntos: los módulos de formulario o de informe, los módulos estándar, los módulos de clase independientes.

La ventana Propiedades (3) Permite mostrar las propiedades de los distintos módulos. Para mostrar las propiedades de un formulario o de un informe, éste debe estar abierto en Access; si no fuese el caso, seleccione el formulario o el informe en el explorador de proyectos y escoja la opción Objeto del menú Ver.

La ventana Código (4) En esta ventana se encuentran dos cuadros de lista desplegable: el cuadro objeto (10) muestra la lista de objetos del módulo, el cuadro procedimiento (11) muestra los procedimientos o los eventos del objeto seleccionado en el cuadro objeto. Los eventos ya utilizados aparecen en negrita.

Lista de miembros automática (5) La  lista  de  miembros  automática  (llamada  también  IntelliSense)  muestra  una  lista  que  contiene información que completaría de forma lógica la instrucción en el punto actual de inserción. Por ejemplo, la lista desplegable de los métodos y las propiedades disponibles para un objeto se muestra automáticamente cuando se teclea el nombre de un objeto seguido de un punto. Si esta lista no está activada, seleccione Opciones en el menú Herramientas y active la casilla Lista de miembros automática de la ficha Editor.

La ventana Inmediato (6) Permite mostrar los valores de las variables, modificarlos y ejecutar instrucciones. Las  ventanas  Inmediato,  Locales  e  Inspecciones  se  utilizan  durante  la  depuración  de  la aplicación.

La ventana Locales (7) Contiene todos los valores de las variables del procedimiento actual.

La ventana Inspecciones (8) Muestra los valores de las variables que han sido definidas como variables de inspección.

El Examinador de objetos (9) Permite visualizar las propiedades, métodos y constantes de cada objeto.

Configuración del editor VBA 1. Configuración de los colores del editor Las  palabras  clave,  las  funciones  y  las  instrucciones  VBA  aparecen  en  azul,  los  objetos,  métodos  y propiedades en negro y  los  comentarios  en verde.  Las  instrucciones  que  contienen  errores  se  resaltan enrojo. Puede  cambiar  el  estilo  (colores,  fuente,  tamaño)  de  las  distintas  partes  del  código.  Para  ello, seleccioneOpciones en el menú Herramientas y haga clic en la ficha Formato del editor.

2. Configuración de la presentación del código Distintas  herramientas,  como  la  comprobación  de  sintaxis  automática,  la  declaración  obligatoria  de variables, la lista de miembros automática... facilitan la introducción y la puesta a punto del código VBA. Para  activar  dichas  herramientas,  seleccione  Opciones  en  el  menú  Herramientas  y  haga  clic  en  la fichaEditor.

Referencia a los objetos Para poder utilizar un objeto de acceso a datos, un objeto de automatización, o un control ActiveX específico, debe  referenciar  la  biblioteca  de  objeto  correspondiente.  Una  biblioteca  de  objetos  es  generalmente  un archivo DLL u OCX que contiene el código del objeto. Para activar una referencia a una biblioteca, seleccione la opción Referencias en el menú Herramientas.

Puede buscar otras referencias haciendo clic en el botón Examinar.

Creación de un procedimiento en VBA Esta sección le guiará paso a paso en la creación de un primer procedimiento en VBA. Este procedimiento solicita al usuario la introducción de una fecha en formato corto (18/06/10), verifica la fecha y la presenta en formato largo (viernes 18 junio 2010).

Etapa 1: creación de un módulo nuevo Desde el entorno VBA:   Seleccione la opción Módulo del menú Insertar o Desde  la  ventana  Explorador  de  proyectos,  haga  clic  con  el  botón  secundario  del  ratón  y seleccioneInsertar y luego Módulo desde el menú contextual. Desde Access:   Active la pestaña CREAR de la cinta.   Haga clic en el icono Módulo del grupo Macros y código.

Etapa 2: asignación de un nombre a un módulo De  manera  predeterminada,  el  módulo  creado  se  llama  Módulo1  (o  Módulo  seguido  del  primer  número disponible si ya han sido creados otros módulos y no han sido renombrados). Para modificar el nombre del módulo:   Seleccione el módulo en la ventana Explorador de proyectos.   En la ventana Propiedades (haga clic en [F4] si no se ve la ventana Propiedades), modifique el valor de la propiedad (Name).

Etapa 3: creación de un procedimiento   Haga doble clic en el módulo para ver la ventana de VBA asociada.   Introduzca el código siguiente en la ventana VBA:

  Haga clic en el icono 

 de la barra de herramientas Estándar para grabar el procedimiento.

Etapa 4: prueba del procedimiento Para ejecutar el código del procedimiento:   Sitúe el cursor del ratón sobre el código del procedimiento introducido.   Haga clic en el icono 

 de la barra de herramientas Estándar o utilice la tecla [F5].

  Introduzca una fecha en el cuadro de diálogo mostrado y haga clic en el botón Aceptar:

Aparece entonces el siguiente mensaje:

  Haga clic en el botón Aceptar. Como el día de la semana es lunes, aparece el siguiente mensaje:

Consejos Para optimizar el rendimiento de VBA, ciertas técnicas pueden contribuir a acelerar la velocidad de ejecución de su código. Las variables deben declararse siempre. El tipo de las variables debe ser lo más específico posible. Para  referenciar  las  propiedades,  controles  y  objetos  de  acceso  a  datos,  se  aconseja  hacer  uso  de variables. La palabra reservada Me debe utilizarse para hacer referencia al formulario o al informe en el interior de un procedimiento de evento. La utilización de constantes está recomendada siempre que sea posible. Los  módulos  deben  estar  organizados  para  no  sobrecargar  la  memoria.  Un  módulo  se  carga  en memoria solamente si uno de sus procedimientos es invocado por otro código. El código debe compilarse regularmente.

Los módulos Distinguimos tres tipos de módulos: los módulos Microsoft Access Objetos de clase, los módulos estándar, los módulos de clase independientes. La lista de todos estos módulos aparece de manera jerárquica en el explorador de proyectos de la interfaz VBA.

Si  el  explorador  de  proyectos  no  aparece  en  pantalla,  seleccione  la  opción  Explorador  de proyectosdel menú Ver o utilice el método abreviado [Ctrl] R.

Los módulos Microsoft Access Objetos de clase contienen los procedimientos de evento asociados a los formularios y a los informes. Los módulos estándar (o módulos) se componen de uno o varios procedimientos que pueden invocarse en distintas circunstancias desde los diferentes módulos. Sólo los módulos estándar aparecen en la lista de módulos del panel Examinador de objetos.

Se  recomienda  agrupar  en  uno  o  varios  módulos  los  procedimientos  de  "utilidades"  que  pueden  ser utilizados  por  distintas  aplicaciones  (ej:  operaciones  con  fechas).  Estos  módulos  podrán  después exportarse a otras bases Access mediante la opción Exportar del menú Archivo.

Los  módulos  de  clase  independientes  se  utilizan  durante  la  creación  de  clases  de  objetos.  La programación mediante objetos se detallará en el capítulo Objetos y colecciones. Los elementos del lenguaje Visual Basic descritos en este capítulo pueden utilizarse en los distintos módulos.

Los procedimientos Los procedimientos son subprogramas que permiten descomponer una tarea de programación compleja en un conjunto de tareas más pequeñas y más simples. Permiten  organizar  el  código  en  el  interior  de  los  módulos  para  obtener  un  código  más  fácil  de  mantener  y fácilmente reutilizable. En VBA Access, existen tres tipos de procedimientos: los procedimientos Sub (de subrutina) llamados subprogramas, los procedimientos Function llamados funciones, los procedimientos Property llamados procedimientos de propiedad. En este capítulo utilizaremos solamente los procedimientos Sub y Function que son los más habituales (los procedimientos de propiedad se presentarán en el capítulo Objetos y colecciones). Existen puntos comunes entre estos dos procedimientos: contienen instrucciones y/o métodos VBA, aceptan argumentos, pueden llamarse desde otras funciones o procedimientos Sub. Ciertas características son específicas de las funciones: pueden devolver valores, pueden invocarse desde una macro.

1. Los procedimientos Sub Existen dos tipos de procedimientos Sub: los procedimientos Sub generales los procedimientos Sub de evento. Un procedimiento Sub general es un procedimiento declarado en un módulo estándar o, a nivel general, en  un  módulo  de  formulario  o  de  informe.  La  llamada  de  un  procedimiento  de  este  tipo  está  definida explícitamente en el código del programa. Ejemplo Este procedimiento general solicita al usuario que confirme su deseo de abandonar la aplicación y abandona Access si el usuario responde Sí. Private Sub Salir_Apli()     If Msgbox ("¿Desea abandonar la aplicación?", _        VbQuestion + VbYesNo) = vbYes Then        Quit      End If  End Sub Este  código  puede  llamarse  desde  cualquier  botón  de  comando  u  opción  de  menú  que  permita abandonar la aplicación.

Un procedimiento Sub de evento es un procedimiento asociado a un evento de un objeto. De hecho, su nombre se compone del nombre del objeto activado seguido de un carácter de subrayado (_) y del nombre del  evento.  La  llamada  a  un  procedimiento  de  este  tipo  es  implícita,  es  decir,  el  procedimiento  sólo  se

ejecuta cuando tiene lugar el evento al que está asociado. Ejemplo Este procedimiento de evento permite mostrar el formulario "Empleados" cuando el usuario hace clic sobre un botón de comando cmdEmpleados. Private Sub cmdEmpleados_Click()      Docmd.OpenForm "Empleados"  End Sub Ciertos procedimientos Sub de evento pueden generarse automáticamente mediante asistentes (ej: asistente para botones de comando).

2. Los procedimientos Function Los  procedimientos  Function,  llamados  habitualmente  funciones,  devuelven  un  valor,  como  por ejemplo el resultado de un cálculo. El valor devuelto debe llevar el nombre de la función. Son los únicos procedimientos que pueden llamarse desde una macro.

El lenguaje Visual Basic contiene numerosas funciones integradas, como las funciones de fecha (day, week, year, format...). Además de estas funciones integradas, usted puede crear sus propias funciones personalizadas. Ejemplo Esta  función  solicita  al  usuario  que  confirme  su  deseo  de  abandonar  la  aplicación  y  devuelve  True  si  el usuario responde Sí y False en caso contrario. Function Salir_Apli() As Boolean     If MsgBox("¿Desea abandonar la aplicación?", _         vbQuestion + vbYesNo) = vbYes Then         Salir_Apli = True     Else         Salir_Apli = False      End If  End Function

3. Declaración de los procedimientos Sintaxis de un procedimiento Sub [Private | Public | Friend] [Static] Sub NomProc  ([lista de argumentos])]     <Secuencia de instrucciones>  End Sub Sintaxis de un procedimiento Function [Private | Public | Friend] [Static] Function  NomProc ([lista de argumentos]) [As Type]]     <Secuencia de instrucciones>  End Function Para crear un procedimiento Sub o Function debe respetar las etapas siguientes: especifique el alcance del procedimiento,

declare  el  procedimiento  en  función  de  su  tipo  con  la  palabra  clave Sub o Function,  seguida  del nombre del procedimiento, defina  los  argumentos  que  desea  pasar  como  parámetros  al  procedimiento,  indicándolos  entre paréntesis después del nombre del procedimiento, si  se  trata  de  una  función,  especifique  eventualmente  el  tipo  del  valor  devuelto  después  de  la palabra clave As, escriba el código que permite efectuar la operación deseada. Utilice eventualmente Exit Sub o Exit Function para salir del procedimiento. Si se trata de una función, asigne el resultado al nombre de dicha función, termine el procedimiento mediante End Sub o End Function.

4. Alcance de los procedimientos El alcance de un procedimiento define su ámbito de utilización. Un procedimiento público (declarado mediante la palabra clave Public) puede ser llamado desde cualquier módulo, cualquier procedimiento de evento o desde cualquier macro de la base de datos. Un procedimiento privado (declarado mediante la palabra clave Private) sólo puede ser llamado desde un procedimiento del interior del mismo módulo. El procedimiento Friend se utiliza solamente en los módulos de clase. La palabra clave Static indica que las variables locales del procedimiento se preservan entre las llamadas. En ausencia de modificadores Public, Private o Friend, los procedimientos son públicos por defecto.

5. Argumentos de los procedimientos Los argumentos se utilizan para pasar parámetros a los procedimientos en forma de datos. El número de argumentos puede variar de 0 a varios. Para  declarar  un  argumento,  basta  simplemente  con  especificar  su  nombre.  Sin  embargo,  la  sintaxis completa para declarar un argumento es la siguiente: [Optional] [ByVal | Byref] [ParamArray]   [As type]

Optional: indica que el argumento es facultativo. Todos los argumentos facultativos deben estar situados al final de la lista de argumentos y ser de tipo variant.

Byval: indica que el argumento se pasa por valor. El procedimiento accede a una copia de la variable; el valor inicial de ésta no será modificado por el procedimiento.

Byref  (opción  predeterminada):  indica  que  el  argumento  se  pasa  por  referencia.  El  procedimiento puede así acceder a la variable propiamente dicha, por lo que el valor real de ésta podrá ser directamente modificado por el procedimiento.

ParamArray:  utilizado  solamente  por  el  último  argumento  de  la  lista,  indica  que  éste  es  una  matriz opcional de elementos de tipo Variant. No puede utilizarse con las palabras clave ByVal, ByRef uOptional.

Variable: especifica el nombre del argumento. Para las variables de tipo matriz, no es necesario especificar las dimensiones.

Type: especifica el tipo de datos del argumento pasado al procedimiento (Byte, Boolean, Integer, Long...).

6. Los argumentos con nombre

El paso de argumentos a un procedimiento teniendo en cuenta su orden de aparición a menudo es difícil de llevar a la práctica, especialmente cuando algunos parámetros son opcionales. Además, la legibilidad de las llamadas a procedimientos que comportan varios parámetros no siempre es evidente. Los argumentos con nombre facilitan el paso de los argumentos y presentan las ventajas siguientes: el orden de los argumentos es irrelevante y se pueden omitir los argumentos opcionales.

La sintaxis de los argumentos con nombre es: NombreArgumento := Valor Ejemplo If MsgBox("¿Desea abandonar la aplicación?", _      vbYesNo + vbQuestion, "Gestión de las ventas") = vbYes Then      Application.Quit  End If puede transformarse en: If MsgBox(Prompt:="¿Desea abandonar la aplicación?", _      Buttons:=vbYesNo + vbQuestion, _      Title:="Gestión de las ventas") = vbYes Then      Application.Quit  End If También puede modificarse el orden de los parámetros: If MsgBox(Prompt:="¿Desea abandonar la aplicación?", _      Title:="Gestión de las ventas", _      Buttons:=vbYesNo +vbQuestion) = vbYes Then      Application.Quit  End If

7. Llamada a un procedimiento Sintaxis [Call] NomProc [lista de argumentos] Si se indica la palabra clave Call, debe situar la lista de argumentos entre paréntesis. Para almacenar el resultado de una función en una variable, utilice la sintaxis siguiente:  = NomProc ( [lista de argumentos] )

8. Ejemplos de procedimientos Cuando el usuario hace clic en el botón de comando cmdCalculo del formulario de entrada de una factura, el importe del descuento debe calcularse del modo siguiente: 5% del importe de la factura si ésta es superior o igual a 100000, 2% del importe de la factura si ésta está comprendida entre 20000 y 100000, 0 si el importe de la factura es inferior a 20000.

Procedimiento de evento

Private Sub cmdCalculo_Click()     tasImpDes = Descuento (tasImpFact)  End Sub Se  invoca  la  función  Descuento,  con  el  importe  de  la  factura  (contenido  en  el  cuadro  de  texto tasImpFact  del  formulario)  como  argumento.  El  descuento  calculado  se  mostrará  en  el  cuadro  de texto tasImpDes.

Función Function Descuento(curImporte as Currency) as Currency  Const Tasa1 = 0.05  Const Tasa2 = 0.02   ’  Cálculo de un descuento     If curImporte >= 100000 then         Descuento = curImporte * Tasa1     Else        If curImporte >= 20000 then           Descuento = curImporte * Tasa2        End If     End If  End Function Si el importe de la factura es inferior a 20000, Descuento conserva su valor inicial, o sea cero.

9. La función MsgBox Esta función muestra un mensaje en un cuadro de diálogo, acompañado eventualmente por un icono y por uno a tres botones. Sintaxis de la instrucción Utilizada cuando sólo hay un botón. MsgBox <mensaje> [, [][, ]] Sintaxis de la función Utilizada  cuando  hay  más  de  un  botón.  Permite  saber  qué  botón  ha  sido  activado  gracias  a  su  valor  de retorno. MsgBox (<mensaje> , [][, ]  [,helpfile, context])

mensaje: Texto del mensaje en el cuadro de diálogo. botones: expresión numérica que representa la suma de los valores que especifican los botones que deben

mostrarse,  el  estilo  de  icono  que  se  va  a  utilizar,  la  identidad  del  botón  predeterminado,  así  como  la modalidad del cuadro de mensajes.

título: texto en la barra de título. helpfile: archivo de ayuda que debe emplearse. Context: tema de la ayuda correspondiente. Valores del argumento Botones Constante simbólica

Valor

Significado

Número y tipo de botones vbOKOnly

0

Muestra solamente el botón Aceptar.

vbOKCancel

1

Muestra los botones Aceptar y Cancelar.

vbAbortRetryIgnore

2

Muestra los botones Anular, Reintentar eIgnorar.

vbYesNoCancel

3

Muestra los botones Sí, No y Cancelar.

vbYesNo

4

Muestra los botones Sí y No.

vbRetryCancel

5

Muestra los botones Reintentar y Cancelar.

vbMsgBoxHelpButton

16384

Muestra un botón de ayuda.

Tipo de icono vbCritical

16

vbQuestion

32

vbExclamation

48

vbInformation

64

Muestra el icono 

Muestra el icono 

Muestra el icono 

Muestra el icono 

Botón predeterminado vbDefaultButton1

0

Primer botón.

vbDefaultButton2

256

Segundo botón.

vbDefaultButton3

512

Tercer botón.

vbDefaultButton4

768

Cuarto botón. Modalidad

vbApplicationModal

vbSystemModal

0

Aplicación modal. El usuario debe responder al mensaje mostrado en el cuadro de mensaje antes de poder continuar trabajando en la aplicación actual.

4 096

Sistema modal. Todas las aplicaciones se interrumpen hasta que el usuario responda al mensaje mostrado en el cuadro de mensaje.

Presentación vbMsgBoxHelpButton

16384

Agregar el botón "Ayuda" al cuadro de mensaje.

vbMsgBoxSetForeground

65536

Muestra la ventana de mensaje en primer plano.

vbMsgBoxRight vbMsgBoxRtlReading

524288 1048576

Alinea el texto a la derecha. Define un orden de lectura de derecha a izquierda para los sistemas hebreo y árabe.

Los valores de retorno están igualmente definidos por constantes:

Constante

Valor de retorno

Botón seleccionado

vbOK

1

Aceptar

vbCancel

2

Cancelar

vbAbort

3

Anular

vbRetry

4

Reintentar

vbIgnore

5

Ignorar

vbYes

6



vbNo

7

No

Ejemplos: utilización de la función MsgBox Dim lngRep As Long  lngRep = MsgBox ("¿Desea confirmar?", 292, "Confirmación") El  valor  292  corresponde  a  la  suma  de  los  valores  de  los  constantes  vbYesNo  (4),  vbQuestion  (32)  y vbDefaultButton2 (256). o Dim strRep As Long  strRep = MsgBox ("¿Desea confirmar?", vbYesNo + vbQuestion_                    + vbDefaultButton2, "Confirmación")

Utilización de la instrucción MsgBox MsgBox "Resultado falso",vbCritical,"Error"

1. Los tipos de variables Las variables permiten almacenar valores intermedios en cualquier momento de la ejecución del código VBA con el fin de utilizarlas posteriormente para realizar cálculos, comparaciones, pruebas... Las variables se identifican con un nombre que permite referenciar el valor que éstas contienen y un tipo que determina la naturaleza de los datos que pueden almacenar.

Numéricas Tipo

Rango

Tamaño en bytes

Byte

0 a 255

1

Integer (entero)

­32 738 a 32 767

2

Long (entero largo)

­2 147 483 648 a 2 147 483 647

4

Single (real simple con coma flotante)

­3,402823E38 a 1,401298E­45 (valores negativos) ­1,401298E­45 a 3,402823E38 (valores positivos)

4

Double (real doble con coma flotante)

­1,79769313486231E308 a 4,94065645841247E­ 324 (valores negativos) 4,94065645841247E­324 a ­1,79769313486231E308 (valores positivos)

8

Currency (moneda con coma fija)

­922 337 203 685 477, 5808 a 922 337 203 685 477, 5807

8

Decimal

+/­79 228 162 514 264 337 593 543950 335 sin separador decimal; +/­7,9228162514264337593543950335 con 28 cifras a la derecha del separador decimal; el número más pequeño distinto de cero es +/­ 0.0000000000000000000000000001

12

Cadenas de caracteres El tipo es String. Existen dos tipos de cadenas: las  cadenas  de  longitud  variable  pueden  contener  aproximadamente  dos  mil  millones  (2 31)  de caracteres. las cadenas de longitud fija pueden contener de 1 a aproximadamente 64000 (2 16) caracteres. Ejemplo ’Cadena de longitud variable  Dim Dirección As String   ’Cadena de longitud fija (20 caracteres)  Dim Apellido As String * 20

Boleana El  tipo  es  Boolean.  La  variable  puede  tomar  el  valor  True  (Verdadero)  o  False  (Falso)  que  es  el  valor predeterminado. Ocupa dos bytes.

Fecha

El tipo es Date. La variable puede tomar los valores de fecha y de hora desde el 1 de enero de 100 al 31 de diciembre de 9999. Ocupa ocho bytes.

Variant El tipo es Variant. La variable permite almacenar valores de datos de todo tipo: fecha, números de coma flotante, cadenas de caracteres, referencias a objetos... Ocupa dieciséis bytes, más un byte por carácter si el valor es una cadena.

Objeto El tipo es Object. La variable permite almacenar la referencia a un objeto en forma de dirección de cuatro bytes. Es un tipo genérico, pero para obtener mayor rendimiento es aconsejable utilizar el nombre del objeto tal y como está definido en el cuadro Clases del examinador de objetos. Ejemplo Apertura de una base de datos Access utilizando el tipo genérico Object o a partir del objeto Database. Dim dbsEmp As Object  Dim dbsArt As Database  Set dbsEmp = OpenDatabase("C:\Aplicación\" _                       & "Empleados.accdb")  Set dbsArt = OpenDatabase("C:\Aplicación\" _                       & "Artículos.accdb")

Definido por el usuario Este tipo se utiliza sobre todo para la declaración de variables que contienen varios tipos de información. La definición del tipo sólo puede realizarse en la sección de declaración de un módulo. Ejemplos Declaración de un nuevo tipo Empleados: Public Type Empleados       strRegistro As String * 5       strNombre As String * 30       intEdad As Integer       strServicio As String * 20  End Type Utilización del tipo Empleados: Dim NewEmpleado As Empleados  NewEmpleado.strRegistro = "A1290"  ...

2. Las declaraciones de variables Existen dos maneras de declarar variables: de forma implícita o explícita.

Declaración implícita Cuando  VBA  encuentra  una  variable  que  no  forma  parte  de  una  declaración  explícita,  la  declara  de  forma implícita otorgándole un tipo Variant. El tipo Variant permite almacenar sucesivamente en la misma variable valores de tipo distinto. El tipo de la variable evoluciona en función del valor que se le asigna.

Private Sub Asignación()  Dim var As variant      ’ El tipo de la variable se convierte en String  var = "Buenos días"  MsgBox var & " es de tipo : " & TypeName(var)      ’ El tipo de la variable se convierte en Integer  var = 12  MsgBox var & " es de tipo : " & TypeName(var)      ’ El tipo de la variable se convierte en Double  var = 6.55957  MsgBox var & " es de tipo : " & TypeName(var)      ’ El tipo de la variable se convierte en Boolean  var = True  MsgBox var & " es de tipo : " & TypeName(var)    End Sub

Declaración explícita La variable se declara antes de su utilización. Es  posible  imponer  la  declaración  explícita  utilizando  la  instrucción  Option  Explicit  en  la  sección  de declaración  de  cada  módulo.  Para  que  esta  instrucción  esté  definida  por  defecto  en  VBA,  active  la opciónRequerir declaración de variables del menú Herramientas ­ Opciones ­ ficha Editor. Las declaraciones explícitas de variables pueden hacerse en la sección de declaraciones de los módulos o en el cuerpo de un procedimiento o de una función. La declaración se realiza mediante una de las cuatro instrucciones siguientes, utilizando la misma sintaxis: en un procedimiento, una función o un módulo: Dim  [As Type]  Static  [As Type] en un módulo: Private  [As Type]  Public  [As Type] Cada  vez  que  se  ejecuta  la  instrucción  Dim,  se  reinicializa  la  variable  (0  para  numérica,  vacía para String,Empty para Variant). Si es necesario conservar el valor anterior, se deberá utilizar Static en lugar deDim. Si no se especifica ningún tipo (ej: dim var), se asigna a la variable el tipo por defecto Variant.

3. El alcance de las variables Une variable es local para una función o un procedimiento, si se declara en el cuerpo de la función o del procedimiento  con  Dim  o  Static.  Esta  variable  es  desconocida  (visible)  fuera  de  la  función  o  del procedimiento. Una variable puede ser visible para todos los procedimientos o funciones de un módulo (estándar, de clase, formulario o informe), si está declarada en la sección de declaración del módulo mediante Private (oDim). Una variable es pública para  toda  la  aplicación  (es  decir  visible  desde  cualquier  punto  de  la  aplicación),  si está declarada en la sección de declaración de un módulo con la instrucción Public.

Para  referenciar,  a  partir  de  un  módulo,  una  variable  pública  que  se  encuentre  en  otro  módulo  de formulario o de informe, es conveniente utilizar la sintaxis siguiente:

Forms!.  Reports!.

4. Las matrices Una  matriz  se  declara  del  mismo  instrucciones Dim, Static, Private oPublic.

modo 

que 

las 

variables, 

mediante

Una  matriz  es  una  variable  que  contiene  diversos  compartimentos  que  permiten  almacenar  el  mismo número  de  valores.  Contrariamente,  una  variable  clásica  designa  un  compartimento  destinado  a  un  solo valor. Se  puede  referenciar  a  la  matriz  de  forma  global  o  acceder  individualmente  a  sus  elementos  mediante  la utilización de índices. Cualquiera que sea el tipo de los elementos, una matriz requiere 20 bytes de memoria, a los que se añaden cuatro bytes para cada dimensión y el número de bytes ocupados por los datos. Si no se especifica el tipo de datos, los elementos de la matriz declarada toman el tipo Variant. A la primera posición de una matriz se le asigna el índice 0 por defecto. Sin embargo, es posible convertir este valor predeterminado a 1 utilizando, en la sección de declaración, la instrucción Option Base 1. La utilización de una cláusula To permite también definir explícitamente los índices de inicio y fin. Ejemplo Declaración de distintas matrices: ’ 12 elementos indexados de 0 a 11  Dim sngDescuento (11) As Single  ’ 12 elementos indexados de 1 a 12  Dim sngGastos (1 To 12) As Single  ’ 2 dimensiones: la primera indexada de 0 a 10 y  ’ la segunda de 1 a 15  Dim strTren (10,1 To 15) As String

Option Base 1  ’ 12 elementos indexados de 1 a 12  Dim varGastos (12) Utilización de una matriz de dos dimensiones. El  ejemplo  siguiente  permite  crear  una  tabla  de  multiplicación:  cada  elemento  de  la  matriz  Multiplica  es igual  al  resultado  de  la  multiplicación  de  sus  índices.  Todas  las  líneas  de  la  tabla  se  muestran  en  la ventanaInmediato (método Print del objeto Debug).  Sub Ver_Tabla()  Dim intMultiplica(1 To 10, 1 To 10) As Integer  Dim i, j As Integer  Dim strResult As String    ’   1ª línea de la tabla de multiplicar  strResult = " "  For i = 1 To 10      strResult = strResult & " " & Format(i, "00") & " "  Next i 

Debug.Print strResult    ’   Inicia la matriz  For i = 1 To 10      strResult = Format(i, "00")      For j = 1 To 10          intMultiplica(i, j) = i * j          strResult = strResult & " " & Format(intMultiplica(i, j),  "000")      Next j      Debug.Print strResult  Next i      ’   Devuelve el resultado de 4 * 7  MsgBox "4 * 7 = " & intMultiplica(4, 7)      ’   Devuelve el resultado de 8 * 6  MsgBox "8 * 6 = " & intMultiplica(8, 6)    End Sub Resultado en la ventana Inmediato.

Las matrices dinámicas Se  trata  de  matrices  cuyas  dimensiones  se  definen  durante  la  ejecución.  Permiten  optimizar  el  espacio ocupado en memoria. Declaración: Dim varMatriz () Utilización: Antes de utilizarla, es necesario dimensionarla por medio de la instrucción Redim: ReDim varMatriz (15 To 50) Es posible utilizar la instrucción ReDim para modificar la matriz dinámica tantas veces como sea necesario. Por  defecto,  los  valores  presentados  en  la  matriz  se  destruyen.  La  instrucción  ReDim  Preserve  permite extender una matriz conservando los valores existentes. ReDim Preserve varMatriz (15 To 70)

5. Las constantes

Una constante representa un valor numérico o de tipo cadena de caracteres que no debe ser modificado. La  instrucción  Const  permite  declarar  una  constante  y  definir  su  valor  como  fijo.  Una  vez  declarada,  la constante no puede modificarse ni recibir un nuevo valor. La declaración de una constante se efectúa dentro de un procedimiento o en la sección de declaración de un módulo. Las constantes de nivel módulo son privadas por defecto. Para  declarar  una  constante  a  nivel  de  módulo  como  pública,  es  necesario  hacer  preceder  la instrucciónConst con la palabra clave Public. Ejemplo acForm  vbCurrency

Las constantes intrínsecas Las constantes intrínsecas son constantes puestas a disposición por las propias aplicaciones. De este modo, Access posee sus propias constantes intrínsecas que son visibles desde el examinador de objetos. Una constante intrínseca puede ser utilizada en una macro o dentro del código Visual Basic. Las constantes intrínsecas se caracterizan por un prefijo de dos letras que identifica la biblioteca de objetos donde está definida la constante. Prefijo de las constantes Biblioteca

Prefijo

Ejemplos

Microsoft Access

ac

acForm, acNormal

Visual Basic

vb

vbCurrency, vbYellow

Microsoft Office

mso

msoSortByFileName

Las  constantes  de  la  biblioteca  Visual  Basic  se  describen  en  el  anexo  Constantes  VBA  del  presente manual.  Para  utilizar  las  constantes  de  Microsoft  Office  2013  deberá  seleccionar  la  referencia "Microsoft Office 15.0 Object Library" (opción Referencias del menú Herramientas).

Existen  varias  categorías  de  constantes  intrínsecas  (constantes  de  acción,  constantes  de procedimientos de eventos, etc.).

Ejemplo El siguiente ejemplo muestra cómo visualizar y personalizar un formulario. El ejemplo utiliza las constantes strNomAppli y strNomSoc declaradas en el código y varias constantes intrínsecas.

Resultado en Access: visualización del formulario personalizado Empleado.

Las estructuras de decisión A menudo es necesario evaluar condiciones específicas antes de ejecutar instrucciones. Las estructuras de decisión, llamadas también alternativas o de bifurcación condicional, permiten, al finalizar una evaluación, optar por un bloque de código u otro. Distinguimos dos tipos de instrucciones de bifurcación condicional: If ... Then ... Else Select ... Case La función IIf también puede emplearse para definir un valor en función de una condición.

1. La instrucción IF If Permite ejecutar instrucciones en función del resultado de una condición. Las instrucciones If...Then...Else pueden anidarse en tantos niveles como sea necesario. La  sintaxis  de  múltiples  líneas,  con  una  indentación  apropiada,  presenta  la  ventaja  de  una  mayor legibilidad.

Sintaxis 1 (línea única) If  Then  [Else 

 puede estar compuesta de varias instrucciones separadas por el carácter (:). Sintaxis 2 (múltiples líneas) If  Then      <secuencia de instrucciones 1>  [ElseIf  Then      <secuencia de instrucciones 2>]  [Else      <secuencia de instrucciones 3>]  End If Otra posibilidad If  Then     <secuencia de instrucciones 1>  [Else      If  Then        <secuencia de instrucciones 2>      [Else        <secuencia de instrucciones 3>]      End If]  End If Ejemplo El siguiente código permite comparar el contenido de dos cajas de texto en un formulario. If txtImp1> txtImp2 Then    MsgBox ”El mayor valor es: " & txtImp1 

  Else    If txtImp1= txtImp2 Then       MsgBox ”Los dos valores son iguales”    Else       MsgBox ”El mayor valor es: " & txtImp2    End if  End If

2. La instrucción Select Case Select Case Ejecuta secuencias de instrucciones específicas en función del valor de una expresión. La  instrucción  Select  Case  permite  reemplazar  el  ElseIf  dentro  de  instrucciones  If...Then...Else  al realizar la comparación entre una misma expresión y varios valores. Sintaxis Select Case <expresión de evaluación>      [Case <lista de expresiones 1>        <secuencia de instrucciones 1>]      [Case <lista de expresiones 2>        <secuencia de instrucciones 2>]      [Case Else        <secuencia de instrucciones 3>]  End Select

<lista de expresiones> puede tomar las formas siguientes: valor (ej: Case 10) lista de valores (ej: Case 1, 5, 10) rango de valores (ej: Case 1 To 5 ) expresión condicional (ej: Case Is>= 5) Ejemplo Muestra un comentario sobre la temperatura. Dim intTemperatura As Integer  intTemperatura = InputBox ("Introducir una temperatura")  Select Case intTemperatura     Case 0       MsgBox "Hielo"     Case 1 To 10       MsgBox "Frío"     Case 11 To 16       MsgBox "Fresco"     Case 17, 18, 19       MsgBox "Temperatura interior" _           & "de una casa en invierno"     Case 20 To 25       MsgBox "Agradable"     Case Is > 25       MsgBox "Caliente"     Case Else       MsgBox "Temperatura no referenciada"  End Select

3. La función IIf IIf

Devuelve un valor en función de una condición. Sintaxis IIf () Ejemplo Dim bln As Boolean  bln = IIf(A = B, True, False) Es posible anidar varias llamadas de función IIf. Ejemplo Dim IntI As Integer  IntI = IIf(A = B, IIf(B = C, 1, 0), 0)

Las estructuras en bucle Las estructuras en bucle (o iterativas) permiten repetir la ejecución de un conjunto de instrucciones. Distinguimos varios tipos de estructuras en bucle: Do...Loop While...Wend For...Next For Each...Next Do...Loop y While...Wend repiten una operación hasta que se cumpla una cierta condición. For...Next efectúa determinada operación un número de veces especificado en función de un contador. For Each...Next permite recorrer los elementos de una colección.

1. La instrucción Do...Loop Do...Loop Ejecuta una secuencia de instrucciones mientras que (While) o hasta que (Until) la condición especificada se cumpla. Sintaxis 1 Secuencia de instrucciones eventualmente no ejecutada (condición evaluada antes de la secuencia). Do [{While | Until} ]      <secuencia de instrucciones>      [Exit Do]      [<secuencia de instrucciones>]  Loop Sintaxis 2 Secuencia de instrucciones ejecutada al menos una vez (condición evaluada después de la secuencia). Do      <secuencia de instrucciones>      [Exit Do]      [<secuencia de instrucciones>]  Loop [{While | Until} ] Exit Do se utiliza a menudo después de la evaluación de una condición interna del bucle y permite abandonar el bucle sin que la condición de control se verifique.

Ejemplo Calcula  y  muestra  el  importe  anual  de  gastos  en  función  de  una  matriz  (GastosMensuales)  de  doce posiciones cargadas con anterioridad. Dim intCont As Integer  Dim curGastosAnuales As Currency    curGastosAnuales = 0 

intCont = 0  Do    intCont = intCont + 1    curGastosAnuales = curGastosAnuales + curGastosMensuales (intCont)  Loop Until intCont = 12    MsgBox "Los Gastos Anuales son: " & curGastosAnuales

2. La instrucción While...Wend While...Wend Ejecuta una secuencia de instrucciones mientras la condición especificada se cumpla. Sintaxis While       <secuencia de instrucciones>  Wend Ejemplo Calcula  y  muestra  el  importe  de  gastos  anuales  en  función  de  una  matriz  (GastosMensuales)  de  doce posiciones cargadas con anterioridad. Dim intCont As Integer  Dim curGastosAnuales As Currency    curGastosAnuales = 0  intCont = 1  While intCont <= 12     curGastosAnuales = curGastosAnuales + curGastosMensuales (intCont)    intCont = intCont + 1  Wend    MsgBox "Los Gastos Anuales son: " & curGastosAnuales

3. La instrucción For...Next For...Next Permite repetir la ejecución de una secuencia de instrucciones en función de un contador. Sintaxis For  =  To  [Step ]      <secuencia de instrucciones>      [Exit For]      <secuencia de instrucciones>  Next [ [,] [, ...]] Exit For, situada a menudo después de la evaluación de una condición, permite salir del bucle antes de que el contador alcance su valor final.

Ejemplo Calcula  y  muestra  el  importe  de  los  gastos  anuales  en  función  de  una  matriz  (GastosMensuales)  de  doce posiciones cargadas anteriormente. Dim intCont As Integer  Dim curGastosAnuales As Currency   

curGastosAnuales = 0  For intCont = 1 To 12     curGastosAnuales = curGastosAnuales + curGastosMensuales  (intCont)  Next    MsgBox "Los Gastos Anuales son: " & curGastosAnuales La palabra clave Step permite incrementar o disminuir la variable contador en el valor especificado. Ejemplo La variable contador j se incrementa en 5 a cada iteración. Al final del bucle el total corresponde a la suma de 5, 10, 15, y 20. Dim j As Integer  Dim intTotal As Integer    intTotal = 0  For j = 5 To 20 Step 5     intTotal = intTotal + j  Next j    MsgBox "El total es " & intTotal

4. La instrucción For Each...Next For Each ... Next Permite recorrer todos los elementos de una matriz o de una colección. Sintaxis For Each <elemento> In <matriz>/      <secuencia de instrucciones>      [Exit For]      <secuencia de instrucciones>  Next [elemento] Ejemplo Muestra los gastos de cada mes (ver ejemplo For Next): Dim curGastos As Currency    For Each curGastos In curGastosMensuales     MsgBox curGastos  Next

Los operadores Los operadores permiten efectuar operaciones aritméticas sobre variables y/o constantes, comparar variables entre sí, evaluar varias condiciones... Distinguimos varias categorías de operadores: los operadores aritméticos, los operadores de comparación, los operadores lógicos, el operador de concatenación. El operador de asignación es el signo de igualdad. El valor de la expresión situada a la derecha del signo igual es asignado a la variable situada a la izquierda de dicho signo (ejemplo: IntA = 12, 12 se asigna a la variable IntA, IntA = IntB*12, el valor de IntB multiplicado por 12 se asigna a IntA).

1. Los operadores aritméticos Permiten efectuar cálculos aritméticos a partir de variables y/o constantes numéricas. Operador

Cálculo realizado

+

Suma.

­

Resta.

/

División con resultado de un número con coma flotante.

Mod

Resto de la división de dos números.

\

División con resultado de un número entero.

*

Multiplicación.

ˆ

Elevación a la potencia.

2. Los operadores de comparación Permiten comparar dos valores numéricos o dos cadenas de caracteres. Operador

Cálculo realizado

<

Inferior a (menor que)

<=

Inferior o igual a (menor o igual que)

>

Superior a (mayor que)

>=

Superior o igual a (mayor o igual que)

=

Igual a

<>

Distinto de

La instrucción Option compare utilizada a nivel de módulo permite definir el método de comparación por defecto que conviene utilizar durante la comparación de cadenas de caracteres. Puede tomar tres valores: Compare Binary

(opción por defecto) proporciona comparaciones de cadenas basadas en un criterio de ordenación derivado de la representación binaria interna de los caracteres: A
Compare Text

proporciona comparaciones de cadenas basadas en un criterio de ordenación que no distingue entre mayúsculas y minúsculas: (A=a)<​ (À=à)<(B=b)<(E=e)<(Ê=ê)<(Z=z)<...

Compare Database

proporciona comparaciones de cadenas basadas en un criterio de ordenación determinado por el identificador local de la base de datos actual.

3. Los operadores lógicos Permiten evaluar simultáneamente dos (o varios) valores booleanos o expresiones que devuelvan este tipo de valor. Se utilizan generalmente con la instrucción If. Operador

Cálculo realizado

And

Si todas las expresiones tienen el valor True, el resultado es True. Si una de las expresiones tiene el valor False, el resultado es False.

Or

Si al menos una de las expresiones tiene el valor True, el resultado es True (O inclusivo).

Xor

Si una sola de las expresiones tiene por valor True, el resultado es True (O exclusivo).

Not

Devuelve el contrario de la expresión.

Eqv

Devuelve True si ambas expresiones son idénticas.

Ejemplo (A rel="nofollow">= 1) And (A<= 9) devuelve True si A está comprendido entre 1 y 9, Not (A >= 10) devuelve True si A es estrictamente inferior a 10, (A>0) Or (B>0) Or (C>0) devuelve True si al menos uno de los valores es positivo.

4. El operador de concatenación El operador de concatenación es el signo &. Permite juntar cadenas de caracteres, valores y expresiones. El resultado es una cadena de caracteres. Ejemplo Concatenación del apellido y del nombre separados por un espacio: StrApeNom = strApellido & " " & strNombre

5. Prioridad de los operadores Cuando  una  misma  expresión  contiene  varios  operadores,  cada  uno  se  evalúa  siguiendo  un  orden predefinido, llamado prioridad de los operadores. Los  operadores  se  evalúan  en  el  orden  siguiente:  operadores  aritméticos,  operadores  de  comparación, operadores  lógicos.  Los  operadores  de  comparación  tienen  la  misma  prioridad;  es  decir  que  se  evalúan siguiendo su orden de aparición, de izquierda a derecha. Los operadores aritméticos y lógicos se evalúan en el orden de prioridad siguiente (prioridad decreciente de izquierda a derecha): Aritmético: ˆ, *, /, Mod, +, ­ Lógico: Not, And, Or, Xor, Eqv Ejemplo

La expresión "3 + 4 * 5" da como resultado 23. La multiplicación (4 * 5) se lleva a cabo antes que la suma ( + 3): La  utilización  de  paréntesis  permite  modificar  el  orden  de  prioridad  para  que  un  elemento  de  una expresión  se  evalúe  antes  que  los  demás.  Las  operaciones  situadas  en  el  interior  de  paréntesis  se efectúan siempre antes que las demás. Ejemplo: la expresión "(3 + 4) * 5" devuelve 35. La suma se realiza antes. Se aconseja utilizar paréntesis para mejorar la legibilidad del código.

Las reglas de escritura del código 1. Los comentarios Los comentarios permiten documentar un programa para hacerlo más legible. Sintaxis Rem  o ’ Ejemplo ’=========================================================  Rem Procedimiento que permite comparar el contenido de dos  Rem cuadros de texto  ’=========================================================  Private Sub cmdResultado_Click()        ’ txtImp1 es superior txtImp2     If txtImp1> txtImp2 Then       lblresultado.Caption = ”El mayor valor es: " & txtImp1       Else     ’ txtImp1 es igual a txtImp2       If txtImp1= txtImp2 Then         lblresultado.Caption = ”Los dos valores son iguales”       Else         ’ txtImp1 es inferior txtImp2         lblresultado.Caption = ”El mayor valor es: " & txtImp2       End if     End If    End Sub

2. El carácter de continuación Una instrucción VBA puede escribirse en varias líneas utilizando un carácter de continuación: el carácter de subrayado (_) precedido de un espacio. Ejemplo If txtImp1 _  > _  txtImp2 then _ Por supuesto, este ejemplo no es digno de una programación estructurada, pero refleja el hecho de que es posible fragmentar una línea de código en cualquier punto.

3. La indentación Es importante alinear sobre la misma tabulación las instrucciones de mismo nivel. El encabezado y el pie del procedimiento se alinean a la izquierda y el contenido debe desplazarse una tabulación a la derecha. Estas indentaciones hacen más legible la estructura del procedimiento.

4. Los nombres de procedimientos, variables y constantes Los nombres de los procedimientos, variables y constantes deben respetar las reglas siguientes: Deben empezar por una letra. No deben contener más de 255 caracteres. Pueden estar compuestas por letras, cifras y por el carácter "subrayado" (_). No pueden contener caracteres de puntuación ni espacios. No deben corresponder a palabras reservadas. Deben ser únicos en el interior de un mismo ámbito. Ejemplos Numcliente  Num_cliente  Numcliente1

Las convenciones de llamada Es  recomendable  utilizar  convenciones  de  llamada  para  las  variables,  los  controles  y  los  objetos.  Permiten estandarizar  el  código  y,  consiguientemente,  hacerlo  más  legible  y  más  fácil  de  mantener  por  parte  de distintos desarrolladores.

1. Convención de llamada de las variables Es recomendable utilizar dos prefijos: el primero para especificar el alcance de la variable: g para global, m para módulo, ningún prefijo para local, el segundo para especificar su tipo. Ejemplo

gstrNombre

variable global de tipo String

intCantidad

variable local de tipo Integer

Tipo de variable

Prefijo

Boolean

bln

Byte

byt

Currency

cur

Fecha, hora

dtm

Double

dbl

Error

err

Integer

int

Long

lng

Object

obj

Single

sng

String

str

Definido por el usuario

udt

Variant

var

2. Convención de llamada de los controles Al igual que para las variables, los nombres de controles de los formularios y de los informes deben llevar un prefijo según su tipo. Control

Prefijo

Datos ADO

ado

Casilla de verificación

chk

Cuadro combinado (combo)

cbo

Botón de comando

cmd

Marco (frame)

fra

Grupo de opciones

grp

Imagen

img

Etiqueta

lbl

Botón de opción

opt

Cuadro de texto

txt

3. Convención de llamada de los objetos Los  objetos  Access  o  las  variables  objeto  relacionadas  con  los  objetos  Access  pueden  ir  también acompañados de prefijos. Control

Prefijo

Tabla

tbl

Consulta

qry

Formulario

frm

Informe

rpt

Macro

mac

Índice

idx

Campo

fld

Colección

col

Propiedad

pty

Páginas de acceso a datos

pag

Presentación VBA  Access  es  un  lenguaje  de  programación  orientado  a  objetos,  aunque  no  disponga  de  todas  las funcionalidades de los lenguajes de este tipo. La  mayoría  de  los  elementos  manejados  en  Access  son  objetos:  las  tablas,  los  campos,  los  registros,  los formularios, etc. Los  objetos  están  organizados  según  un modelo jerárquico:  ciertos  objetos  contienen  objetos  que  a  su vez  contienen  otros...  Por  ejemplo,  el  objeto  Application  está  compuesto  por  varios objetos  Form(formularios  de  la  aplicación),  que  a  su  vez  están  compuestos  por  varios objetos Control (controles de un formulario). Un conjunto de objetos de la misma naturaleza constituye una colección (colección Forms:  conjunto  de los formularios u objetos Form de la aplicación). Un objeto dispone de un conjunto de características llamadas propiedades (ej: tamaño, color de un control en  un  formulario...)  y  comportamientos  o  acciones  llamadas  métodos  (ej:  el  método  close  del  objeto Formulario  permite  cerrarlo.  Responde  a  eventos  provocados  por  el  usuario  (ej:  clic  en  un  botón  de comando) o por el sistema. Las clases son plantillas que permiten crear objetos de la misma naturaleza. Los objetos resultantes de una misma clase heredan sistemáticamente todos los métodos, propiedades y eventos de su clase de origen. Es posible crear clases de objetos con VBA Access utilizando módulos de clase. Existen varios conjuntos de objetos en Access: los objetos generales de Access (formularios, informes...). los controles ActiveX. los objetos de acceso a datos (modelo DAO y ADO). Cada  conjunto  puede  estar  representado  en  forma  de  modelo  jerárquico.  Este  capítulo  describe particularmente los objetos generales de Access; los objetos de acceso a datos se abordarán en el capítulo siguiente.

El modelo de objetos de Access El diagrama siguiente permite distinguir los principales objetos globales de Access. 

1. Principales colecciones CommandBars

Colección de objetos CommandBar que representan las barras de comandos de la aplicación actual.

COMAddIns

Colección de objetos COMAddIn que

proporcionaninformación sobre un complemento COM inscrito en el Registro de Windows. Forms

Colección que contiene todos los formularios (objetos Form) abiertos en la base de datos activa. Para listar todos los formularios de la base de datos, tanto abiertos como cerrados, utilice la colección AllForms del objeto CurrentProject.

Modules

Colección que contiene todos los módulos estándar y los módulos de clase abiertos en la base de datos activa.

References

Colección que contiene todas las referencias a bibliotecas de objetos que pertenecen a otras aplicaciones (archivos dll, controles ActiveX...) que estén seleccionadas (las referencias se seleccionan desde el cuadro de diálogo Referencias del menú Herramientas).

Reports

Colección que contiene todos los informes (objetos Report) abiertos en la base de datos activa. Para listar todos los informes de la base de datos, tanto abiertos como cerrados, utilice la colección AllReports del objeto CurrentProject.

Printers

Colección que contiene todos los objetos Printer que representan a todas las impresoras disponibles en el sistema.

TempVars

Colección de objetos TempVar que permiten intercambiar fácilmente datos entre procedimientos VBA y macros.

WebServices

Colección de objetos WebService que representa una conexión a un servicio Web.

2. Objetos del Modelo Application

Objeto que hace referencia a la aplicación Microsoft Access activa.

AutoCorrect

Objeto que representa las opciones de corrección automática de Access.

DBEngine

Objeto que representa el motor de la base de datos Microsoft Jet. Como objeto principal en el núcleo del sistema jerárquico, el objeto DBEngine contiene todos los demás objetos de acceso a los datos y los controla.

DoCmd

Objeto que permite convertir acciones Macro a Visual Basic. La mayoría de las acciones macro pueden traducirse a VBA.

FileDialog

Objeto que permite acceder a funcionalidades similares a las de los cuadros de diálogo estándar Abrir y Guardar.

LanguageSettings

Objeto que devuelve datos sobre la configuración lingüísticade la aplicación.

Screen

Objeto que permite acceder al formulario, al informe o al control activo en ese momento.

VBE

Objeto que representa el editor Microsoft Visual Basic Edition Applications.

CurrentProject (o CodeProject)

Objeto que agrupa varias colecciones de objetos Access específicos (AllForms: colección de todos los formularios de la base, etc.).

CurrentData (o CodeData)

Objeto que agrupa varias colecciones de objetos Access de acceso a datos (AllTables: colección de todas las tablas de la base, etc.).

Principios de utilización de los objetos y de las colecciones 1. Las propiedades Las propiedades sirven para describir un objeto. Ciertas propiedades existen solamente en modo sólo lectura y no pueden, por tanto, ser modificadas a través de código VBA. Sintaxis { | }.<propiedad> Ejemplo Dim strVersion As String  ’  Recuperación de la propiedad versión  ’  del objeto aplicación  ’  Esta propiedad es de sólo lectura  strVersion = Application.Version   ’  Modificación del puntero del ratón  ’  0 : puntero predeterminado ‐ 11 : reloj de arena  If Screen.MousePointer = 0 Then     Screen.MousePointer = 11  Else     Screen.MousePointer = 0  End If  End Sub

2. Propiedades que representan objetos Los  objetos  globales  y  las  instancias  de  objetos  creadas  en  el  código  a  partir  de  clases  proporcionadas  por VBA poseen propiedades cuyo valor se actualiza automáticamente por parte del sistema. Propiedad

Del objeto

Objeto retornado

ActiveControl

Screen

Objeto Control que representa el control activo.

ActiveDataAccessPage

Screen

Objeto DataAccessPage que representa la página de acceso a los datos activos.

ActiveForm

Screen

Objeto Form que representa el formulario activo.

ActiveReport

Screen

Objeto Report que representa el informe activo.

Application

Múltiples objetos

Objeto Application que representa la aplicación de Access.

Form

Control subformulario

Objeto Form asociado al control de subformulario.

Me

Form o Report

El objeto Form o Report cuyo código se está ejecutando.

Module

Form o Report

Objeto Módulo que contiene el código asociado al formulario o al informe.

Parent

Múltiples objetos

Objeto o colección que contiene el objeto.

PreviousControl

Screen

El objeto Control anteriormente activo.

RecordsetClone

Form

Un Recordset copia del conjunto de registros subyacente del formulario.

Report

Controlsubinforme

Objeto Report asociado al control de subinforme.

Section

Form, Report

Sección de un formulario o de un informe.

3. Los métodos Los métodos permiten efectuar acciones propias de los objetos. Se presentan como procedimientos: pueden utilizar o no argumentos, algunos  métodos  pueden  devolver  un  valor  del  mismo  modo  que  los  procedimientos  Function, otros no, al igual que los procedimientos Sub. Sintaxis de método que no devuelve valor { | }.<método> [] Ejemplo ’   Modificación de la opción "Compactar al cerrar"  ’   Método SetOption que no devuelve ningún valor  Application.SetOption "Auto Compact", True Los distintos argumentos del método deben estar separados por comas. Si un argumento opcional no está definido de forma explícita, el método utilizará un valor por defecto. Sintaxis de método que devuelve un valor  = { | }.<método> ([]) Ejemplo Private Sub cmdMétodos_Clic()  ’   Variable boleana  Dim blnCompact As Boolean   ’   Recuperación de la opción "Compactar al cerrar"  ’   Método GetOption que devuelve un valor boleano  blnCompact = Application.GetOption("Auto Compact")  ’   Modificación de la opción  ’   Método SetOption que no devuelve ningún valor  If blnCompact Then     Application.SetOption "Auto Compact", False     MsgBox "La base no se compactará al cerrarla", _     vbExclamation  Else     Application.SetOption "Auto Compact", True     MsgBox "La base se compactará al cerrarla", _     vbExclamation  End If  End Sub

4. Los eventos

Un evento es una acción específica que se produce sobre un objeto. Microsoft Access está capacitado para responder  a  varios  tipos  de  eventos:  abrir  o  cerrar  formularios,  clics  de  ratón,  modificación  de  datos,  etc. Generalmente, los eventos son el resultado de una acción del usuario. La utilización de un procedimiento de evento le permite asociar su propio código en respuesta a un evento que se produce en un formulario, un informe, un control, etc. Ejemplo Cuando el usuario hace clic sobre el botón de comando "Salir", se muestra un cuadro de diálogo solicitando confirmación. Private Sub CmdSalir_Click()   ’  Solicita al usuario que confirme  ’  que desea abandonar la aplicación  If MsgBox("¿Desea salir de la aplicación?", _     vbQuestion + vbYesNo) = vbYes Then     DoCmd.Quit  End If  End Sub La gestión de los eventos es uno de los aspectos más importantes en el desarrollo de una aplicación Access, por lo que el capítulo Gestión de los eventos, está consagrado enteramente a este tema.

5. Las colecciones Para hacer referencia a un objeto de una colección puede utilizar una de las sintaxis siguientes: NombreColección!NombreObjeto  NombreColección![NombreObjeto]  NombreColección("NombreObjeto")  NombreColección(var) donde var representa una variable de tipo string que contiene el nombre del objeto. NombreColección(índice) donde índice representa el número de índice del objeto en la colección. Para  asegurar  una  mejor  legibilidad  del  código  se  aconseja  utilizar  siempre  la  misma  sintaxis.  Se recomiendan las sintaxis 3 y 5, ya que permiten activar el asistente del editor de código. Además, la sintaxis 5 es muy útil para recorrer los objetos de una colección.

Atención, el primer elemento de la mayoría de colecciones tiene como índice 0. No utilice los índices más que para recorrer una colección. Evite, por ejemplo, Me.controls(5) para hacer referencia a un control ya que el índice del control puede cambiar si se modifica el formulario.

Ejemplo Private Sub cmdColecciones_Click()  Dim ctl As Control  Dim intI As Integer    ’   Abre el formulario "Empleados"  ’   y lo oculta (propiedad Visible)  DoCmd.OpenForm "Empleados"  Forms("Empleados").Visible = False 

  ’   Hace referencia al control Nombre  ’   del Formulario "Empleados"  ’   Colecciones Forms y Controls  MsgBox Forms("Empleados").Controls("Nombre").Value  MsgBox Forms!Empleados.Controls![Nombre].Value     ’   Fecha de creación de una tabla de la base actual  ’   Colecciones AllTables  MsgBox CurrentData.AllTables![Empleados].DateCreated  MsgBox CurrentData.AllTables("Empleados").DateCreated  MsgBox CurrentData.AllTables(0).DateCreated    ’   Modifica la fuente y el color de todos los controles  ’   "cuadros de texto" del formulario  For intI = 0 To Forms("Empleados").Controls.Count ‐ 1     Set ctl = Forms("Empleados").Controls(intI)     If TypeOf ctl Is TextBox Then        ctl.ForeColor = vbRed        ctl.FontItalic = True        ctl.FontBold = True     End If  Next intI     ’   Muestra el formulario  Forms("Empleados").Visible = True  End Sub

Colecciones predeterminadas Definición Una colección predeterminada es una colección que contiene objetos a los que es posible hacer referencia a través del nombre del objeto contenedor de la colección, es decir sin hacer referencia a la colección misma.

Objetos que poseen una colección predeterminada Objeto

Colección predeterminada

Container

Documents

Database

TableDefs

DBEngine

Workspaces

Form

Controls

Group

Users

Index

Fields

QueryDef

Parameters

Recordset

Fields

Relation

Fields

Report

Controls

TableDef

Fields

User

Groups

Workspace

Databases

Ejemplo Referencia al control txtFechaIni del formulario Cursos (la colección Controls es la colección predeterminada de un formulario).

Forms![Cursos].Controls("txtFechaIni").Value  O  Forms![Cursos].[txtFechaIni].Value  o  Forms!Cursos.txtFechaIni.Value  o  Forms!Cursos!txtFechaIni.Value

6. Presentación automática de instrucciones El editor VBA dispone de una tecnología que permite asistirle durante la utilización de objetos. Al teclear un nombre de objeto reconocido por VBA seguido de un punto, se muestra la lista desplegable de los métodos y propiedades de dicho objeto. Si selecciona un método, el asistente también le ayuda a introducir los distintos argumentos que comporta. Ejemplo   Teclee el nombre de objeto DoCmd seguido de un punto y aparece la lista desplegable siguiente.

El icono 

 representa los métodos, el icono 

 representa las propiedades.

Puede hacer pasar los elementos de la lista desplegable tecleando las primeras letras del método, propiedad o colección que está buscando o por medio de la barra de desplazamiento. Para seleccionar un elemento de la lista, haga un doble clic encima de él. Teclee  un  punto  si  acaba  de  seleccionar  un  objeto  y  si  desea  ver  la  lista  de  propiedades  y  métodos relacionados.  Si  ha  seleccionado  un  método,  teclee  un  espacio  para  introducir  la  lista  de  parámetros  del método. Para proseguir el ejemplo:   Seleccione el método OpenForm.

  Y teclee un espacio:

Se muestra entonces la lista de argumentos del método y se adapta a medida que los introduce. Los  argumentos  opcionales  están  entre  corchetes.  El  argumento  actual  aparece  en  negrita.  Si  para  un argumento  determinado  existe  una  lista  de  valores  predefinidos,  aparece  la  lista  desplegable  de  las correspondientes constantes.   Introduzca  el  nombre  del  parámetro  pasado  a  la  función,  es  decir  StrFormName,  seguido  de  una coma, el argumento acNormal y tres comas (para los dos argumentos opcionales).

En el ejemplo aparece la lista de valores posibles del argumento DataMode. Para  obtener  la  lista  de  propiedades  y  métodos  de  un  objeto  también  es  posible  proceder  de  la siguiente manera: coloque el cursor tras el punto (situado después del nombre del objeto), haga clic en  el  botón  secundario  del  ratón  y  seleccione  la  opción Lista  de  propiedades  y  métodos  del  menú contextual o utilice el método abreviado [Ctrl] J.

Asimismo, para obtener la lista de constantes disponibles como argumento de un método, se puede proceder como sigue: coloque el cursor donde está el argumento (después del método o después de la  coma),  haga  clic  en  el  botón  secundario  del  ratón  y  seleccione  la  opción  Lista  de  constantes  del menú contextual.

Instrucciones utilizadas con los objetos 1. La instrucción With La instrucción With permite acceder varias veces al mismo objeto nombrándolo una sola vez. Ofrece varias ventajas: optimización del tiempo de ejecución del código, ahorro de tiempo en el trabajo de escritura, mejor legibilidad del código. Sintaxis With               End With Ejemplo ’   Abre el formulario "Empleados"  DoCmd.OpenForm "Empleados"   ’   Modifica el título del formulario  ’   Coloca el cursor sobre el nombre  With Forms("Empleados")     .Caption = "FICHA DEL EMPLEADO" & _     .Controls("Nombre").Value & " " & _     UCase(.Controls("Apellido").Value)     .Controls("Apellido").SetFocus  End With

2. La instrucción For each...Next La  instrucción  For  Each...Next  permite  recorrer  los  objetos  de  una  colección  o  los  elementos  de  una matriz. Sintaxis For Each <elemento> In {<matriz>|}      <secuencia de instrucciones>      [Exit For]      <secuencia de instrucciones>  Next <elemento> Ejemplo El ejemplo siguiente permite asignar un color de fuente a cada control del formulario "empleado" en función de su tipo (propiedad ControlType). Utiliza la colección predeterminada del objeto Form (Screen.ActiveForm equivale a Screen.ActiveForm.Controls). Dim ctl As Control  ’ Recorrido de los controles del formulario activo  For Each ctl In Screen.ActiveForm      With ctl          Select Case.ControlType            ’ Etiquetas            Case acLabel                .ForeColor = vbBlue            ’ Cuadros de texto            Case acTextBox 

              .ForeColor = vbGrayText            ’ Listas desplegables            Case acListBox, acComboBox                .ForeColor = vbRed          End Select      End With  Next ctl

3. La instrucción If TypeOf La instrucción If TypeOf permite evaluar el tipo de un objeto. Sintaxis If TypeOf  Is <TipoObjeto> Then              End If Ejemplo If TypeOf ctl Is acListBox Then ...

4. La instrucción Set La instrucción Set permite atribuir una referencia de objeto a una variable, llamada variable de objeto. Esta  instrucción  puede  emplearse  para  crear  una  referencia  hacia  un  nuevo  objeto  (utilizando eventualmente  un  método  que  permita  crear  el  objeto)  o  para  asignar  una  referencia  a  un  objeto  ya existente. Sintaxis Creación de una referencia hacia un nuevo objeto Set  = New <expresión objeto> o Set  = <método que permite crear el objeto>



nombre de la variable objeto.

<expresión objeto>

nombre de un objeto o de una variable objeto del mismo tipo.

La palabra clave New permite crear una nueva instancia de la clase. Si la variable objeto ya contiene una referencia, esta última se pierde.

Sólo  puede  utilizar  la  palabra  clave  New  para  referenciar  un  objeto  si  el  componente  ActiveX  del objeto proporciona una biblioteca de tipos (ej: objetos ADO, objetos Excel, etc.).

Asignación de una referencia a un objeto existente Set  = <expresión objeto>



nombre de la variable objeto.

<expresión objeto>

nombre  de  un  objeto  o  de  una  variable  objeto  del  mismo tipo.

Reinicialización de las variables objeto Set  = Nothing

Nothing  permite  reinicializar  la  variable  objeto  y  liberar  el  conjunto  de  recursos  del  sistema  y  memoria asociados a dicho objeto. Ejemplos: Creación de referencias hacia nuevos objetos. Los ejemplos 1 y 2 permiten crear una nueva tabla y añadirla a la base de datos actual. Para ejecutar estos ejemplos  debe  seleccionar  la  referencia  Microsoft  DAO  3.6  Object  Library  en  el  proyecto (Herramientas ­ Referencias). Ejemplo 1: utilización de la palabra clave New Dim tbl As Object  Dim tdfCliente As DAO.TableDef  Dim fld As DAO.Field    ’   Comprueba si la tabla ya existe  ’   y propone eliminarla  For Each tbl In CurrentData.AllTables     If tbl.Name = "CLIENTES" Then        If MsgBox("La tabla ya existe." & _           "¿Desea eliminarla?", _           vbYesNo + vbQuestion) = vbYes Then           DoCmd.DeleteObject acTable, "CLIENTES"        Else           Exit Sub        End If    End If  Next tbl    ’   Crea la definición de tabla  Set tdfCliente = New DAO.TableDef  tdfCliente.Name = "CLIENTES"  ’   Crea el primer campo  Set fld = New DAO.Field  With fld     .Name = "Cli_Apellido"     .Type = dbText     .Size = 40  End With  tdfCliente.Fields.Append fld   ’   Crea el segundo campo  Set fld = New DAO.Field  With fld     .Name = "Cli_Num"     .Type = dbInteger  End With  tdfCliente.Fields.Append fld  ’   Agrega la tabla a la base de datos actual  Application.CurrentDb.TableDefs.Append tdfCliente   ’   Reinicia las variables de objeto  Set tdfCliente = Nothing  Set fld = Nothing Ejemplo 2: misma operación utilizando métodos Dim tbl As Object  Dim tdfCliente As DAO.TableDef  Dim fld As DAO.Field    ’   Comprueba si la tabla ya existe  ’   y propone eliminarla 

For Each tbl In CurrentData.AllTables     If tbl.Name = "CLIENTES" Then        If MsgBox("La tabla ya existe." & _           "¿Desea eliminarla?", _           vbYesNo + vbQuestion) = vbYes Then           DoCmd.DeleteObject acTable, "CLIENTES"        Else           Exit Sub        End If    End If  Next tbl    ’   Crea la definición de tabla  Set tdfCliente = CurrentDb.CreateTableDef("Clientes")  With tdfCliente      ’   Crea el primer campo     Set fld = .CreateField("Cli_Apellido", dbText, 40)     .Fields.Append fld     ’   Crea el segundo campo     .Fields.Append .CreateField("Cli_Num", dbInteger)  End With  ’   Agrega la tabla a la base de datos actual  CurrentDb.TableDefs.Append tdfCliente  ’   Reinicia las variables de objeto  Set fld = Nothing  Set tdfCliente = Nothing Ejemplo 3: Creación de un formulario con un cuadro de texto y una etiqueta. ’  Objeto Formulario  Dim frmEmpleado As Form  ’  Nombre del formulario  Dim strName As String   ’  Objeto control  Dim ctl As Control  ’  Creación de un nuevo formulario  Set frmEmpleado = Application.CreateForm  With frmEmpleado    ’  Título del formulario    .Caption = "Empleados"    ’  Ancho y alto del formulario    .Width = 5000    .Section(acDetail).Height = 2000    ’  Elimina los botones de desplazamiento    .NavigationButtons = False    ’  Elimina el selector de registro    .RecordSelectors = False    ’  Centra el formulario dentro de la aplicación    .AutoCenter = True    ’  Nombre del formulario     strName = frmEmpleado.Name  End With    ’  Incorporación del cuadro de texto Nombre del empleado  Set ctl = Application.CreateControl(strName, _            acTextBox, , "", "", 2000, 500, 2500, 300)  ’  Formato del cuadro de texto  With ctl    ’  Nombre del cuadro de texto    .name = "txtNombre"     ’  Colores    .BackColor = vbWhite    .ForeColor = vbBlack    .FontBold = True  End With    ’  Incorporación de la etiqueta Nombre del empleado 

Set ctl = Application.CreateControl(strName, _            acLabel, , "", "", 500, 500, 1500, 300)  ’  Formato de la etiqueta  With ctl    ’  Nombre de la etiqueta    .Name = "lblNombre"    ’  Título de la etiqueta    .Caption = "Apellido del empleado:"    ’  Colores    .BackColor = vbWhite    .ForeColor = vbBlue  End With    ’  Salvaguarda del formulario  DoCmd.Save , "Ficha_Empleado"  Docmd.Close Formulario creado con el código:

Las clases de objetos 1. Descripción Una clase es  en  cierto  modo  un  molde  de  donde  aparecen  los objetos.  Por  ejemplo,  es  posible  realizar figuritas de yeso con un molde adecuado. Se podría decir que todas las figuritas fabricadas son Objetos, cada una con colores y ornamentos distintos, y que los moldes son Clases. De  este  modo,  los  objetos  originarios  de  una  misma  clase  heredan  sistemáticamente  todos  los  métodos (código), las propiedades (datos) y los eventos de su clase de origen. Más adelante, se podrán adaptar las características y el comportamiento de cada uno de ellos en función de las necesidades de la aplicación. De hecho, todos los objetos de Access resultan de una clase.

2. Los módulos de clase Los módulos de clase le permiten crear y manipular sus propios tipos de objeto dentro de sus aplicaciones. Los módulos de clase presentan las características siguientes: llevan el nombre del objeto, contienen  procedimientos  públicos  Sub  y  Function  correspondientes  a  los  métodos  propios  del objeto, contienen procedimientos Property Get que permiten leer los valores de propiedades del objeto y los  procedimientos  Property  Set/Property  Let  que  permiten  establecer  los  valores  de  dichas propiedades. Una  vez  se  hayan  descrito  el  conjunto  de  estos  procedimientos  en  el  interior  del  módulo  de  clase,  es posible crear un nuevo objeto del tipo definido. Para ello basta con crear una nueva instancia de la clase mediante el uso de una variable de objeto del tipo de la clase: Dim <nombre del objeto> As New <nombre de la clase> Los  módulos  de  clase  no  son  muy  utilizados  en  programación  VBA.  Van  destinados  especialmente  a  los desarrolladores más expertos.

3. Ejemplo de módulos de clase Este ejemplo le guiará paso a paso en la creación y la utilización de un módulo de clase. El módulo creado permitirá mostrar los mensajes de usuario. Este módulo contiene los elementos siguientes: un método Confirmación que muestra un cuadro de diálogo invitando al usuario a responder "sí" o "no" a una pregunta, y recupera la respuesta del usuario, dos  propiedades:  la  propiedad  IsBeep  indica  si  debe  emitirse  un  beep  antes  de  la  aparición  del mensaje, la propiedad Title contiene el título del cuadro de diálogo. Ejemplo Para crear un módulo de clase:   Seleccione la opción Módulo de clase del menú contextual Insertar del explorador de proyecto.   Seleccione la opción Módulo de clase del menú Insertar del entorno de desarrollo. 

  Defina el nombre de la clase en el campo Name.

  Si la ventana Propiedades no aparece en pantalla, seleccione la opción Ventana propiedades  del menú Ver o utilice la tecla [F4].   Defina las variables necesarias para la utilización de las propiedades en el módulo de clase Mensaje. La variable strTitle está asociada a la propiedad Title, la variable blnBeep a la propiedad IsBeep. Option Compare Database  Option Explicit  ’   Emisión de un beep  Dim blnBeep As Boolean  ’   Título de la ventana MsgBox  Dim strTitle As String   Cree las propiedades IsBeep y Title utilizando la opción Procedimiento del menú Insertar.

Los procedimientos Property Get y Property Set se crean para cada propiedad:   Modifíquelos para obtener el siguiente código: Public Property Get IsBeep() As Boolean     IsBeep = blnBeep  End Property  ________________________________________________________________    Public Property Let IsBeep(ByVal blnNewValue As Boolean)     blnBeep = blnNewValue  End Property  ________________________________________________________________    Public Property Get Title() As String     Title = strTitle  End Property  ________________________________________________________________    Public Property Let Title(ByVal strNewValue As String)     strTitle = strNewValue  End Property   Cree ahora el método de confirmación mediante la opción Procedimiento del menú Insertar.

  Modifique el procedimiento Confirmación para obtener el código siguiente. Public Function Confirmacion(strMsg) As Boolean     If MsgBox(strMsg, vbYesNo, strTitle) = vbYes Then        Confirmacion = True     Else        Confirmacion = False     End If     If blnBeep Then Beep  End Function Podemos ver que este método utiliza las dos variables strTitle y blnBeep. El método ha sido creado como función ya que devuelve la respuesta del usuario como variable boleana. Ahora que está creada esta clase, vamos a utilizarla desde un formulario.   Para ello, cree un formulario Empleados con dos botones de comando cmdCerrar y cmdSalir.   Asigne el código siguiente a los eventos click. Private Sub CmdCerrar_Click()  ’  Objeto mensaje  Dim msg As New Message    ’  Ninguna emisión de señal sonora  msg.IsBeep = False  ’  Título del cuadro de diálogo  msg.Title = "Aplicación Gestión del personal"  ’  Solicitud de confirmación  If msg.Confirmación("¿Desea cerrar" _     & " el formulario" & Me.Caption & "?") Then     DoCmd.Close  End If  End Sub    _______________________________________________________________    Private Sub CmdSalir_Click()   ’  Objeto mensaje  Dim msg As New Message    ’  Emisión de señal sonora  msg.IsBeep = True  ’  Título del cuadro de diálogo  msg.Title = "Aplicación Gestión del personal"  ’  Solicitud de confirmación  If msg.Confirmación("¿Desea salir de" _     & "la aplicación?") Then     DoCmd.Quit  End If    End Sub   A continuación, pruebe el formulario. El  cuadro  de  mensaje  mostrado  por  el  método  Confirmacion  utiliza  las  dos  propiedades  y  devuelve  la respuesta del usuario. Es posible enriquecer el módulo de clase Mensaje definiendo nuevas propiedades y nuevos métodos (ej: mensajes de error...).

El examinador de objetos 1. Presentación Teniendo  en  cuenta  el  importante  número  de  objetos  de  Access  y  su  diversidad,  es  útil  poder  buscar rápidamente la información relacionada con los objetos. El  examinador  de  objetos  permite  mostrar  información  relativa  a  los  objetos,  métodos,  propiedades, eventos y constantes. Puede mostrarlos de distintas maneras: seleccione la opción Examinador de objetos del menú Ver, utilice el método abreviado [F2], haga clic sobre el icono 

.

1. Lista de las bibliotecas de objetos cargadas. 2. Elemento buscado: objeto, propiedad, colección, evento, método, etc. 3. Resultado de la búsqueda: lista de las clases de objetos (objetos y colecciones) y de los miembros que las componen (objeto, colección, propiedad, evento o método). La palabra buscada puede estar en la lista de clases o en la de miembros. 4. Objetos de la biblioteca: la clase de objeto seleccionada en la lista Resultados aparece enmarcada. 5.  Métodos,  propiedades,  eventos  y  constantes  relacionados  con  el  objeto  seleccionado  en  la  lista  de  la

izquierda. El miembro seleccionado en la lista Resultados aparece enmarcado. 6. Detalle del elemento seleccionado.

2. Búsqueda en el examinador de objetos Para efectuar una búsqueda en el examinador de objetos, proceda del modo siguiente:   Introduzca el término buscado en la segunda lista desplegable.   Haga clic sobre el icono 

.

  Si la lista de Resultados muestra varias líneas, desplácese a la que le interesa (la parte inferior de la ventana se actualiza). Ejemplo Si busca la palabra "Message", el modulo de clase creado anteriormente aparece en la lista de las clases con los métodos y propiedades relacionados.

Propiedades y métodos de objetos de Access Esta  parte  describe  las  propiedades  y  los  métodos  de  los  objetos  utilizados  habitualmente  en  Access.  Los objetos Form y Report se describirán en el capítulo Personalizar formularios e informes. Para obtener la lista exhaustiva de los objetos, las propiedades y los métodos, busque en la ayuda VBA Access o utilice el examinador de objetos.

1. El objeto Application El objeto Application hace referencia a la aplicación Microsoft Access activa.

Propiedades AutomationSecurity

Devuelve  o  define  una constanteMsoAutomationSecurity  que  representa  el modelo de seguridad utilizado por Microsoft Access cuando abre ficheros por programación.

BrokenReference

Devuelve un valor de tipo Boleano que indica si la base de datos activa posee referencias rotas hacia bases de datos o bibliotecas de tipos.

Build

Devuelve un valor de tipo Entero Largo que representa el número  de  la  copia  de  Microsoft  Office  Access  2013 actualmente instalada.

CodeContextObject

Devuelve el objeto en el que se está ejecutando una macro o código Visual Basic.

CurrentObjectName

Devuelve  el  nombre  del  objeto  activo  (tabla,  consulta, formulario, informe, macro, módulo).

CurrentObjectType

Devuelve el tipo del objeto activo.

Constante

Valor

Descripción

acTable

0

Tabla

acQuery

1

Consulta

acForm

2

Formulario

acReport

3

Informe

acMacro

4

Macro

acModule

5

Módulo

10

Función

acFunction FeatureInstall

Especifica o determina la manera cómo Microsoft Access gestiona las llamadas de métodos y de propiedades que requieren funcionalidades no instaladas.

IsCompiled

Devuelve un valor de tipo boolean que indica si el proyecto Visual Basic está compilado.

MenuBar

Determina la barra de menús que debe utilizarse para la base de datos.

Name

Identifica el nombre de la aplicación ("Microsoft Access").

Parent

Permite hacer referencia al objeto padre.

ProductCode

Determina el identificador global único (GUID) de Microsoft Access.

ShortcutMenuBar

Especifica el menú contextual que aparece cuando el usuario hace clic con el botón secundario del ratón.

UserControl

Permite determinar si la aplicación Microsoft Access actual ha sido iniciada por el usuario o por otra aplicación mediante automatización.

Version

Devuelve el número de la versión de Microsoft Access.

Visible

Permite ocultar la aplicación.

Métodos que actúan sobre la base de datos Access CloseCurrentDatabase

Cierra una base de datos Access a partir de otra aplicación que utilice la tecnología Automation (la aplicación Excel, por ejemplo). La base de datos debe haber sido abierta previamente por esa misma aplicación mediante el métodoOpenCurrentDatabase.

CompactRepair

Compacta y repara la base de datos (.mdb) o el proyecto Microsoft Access (.adp) especificados. Devuelve un Boleano que toma el valor True si la operación tiene éxito.

ConvertAccessProject

Convierte la versión del archivo Microsoft Access especificado en otra versión.

CreateNewWorkgroupFile

Crea un nuevo archivo de grupo de trabajo para que los usuarios puedan acceder de forma segura a una base de datos.

CurrentDb

Devuelve una variable objeto que hace referencia a la base de datos actualmente abierta en Microsoft.

InstantiateTemplate

Crea una nueva base de datos y le aplica el modelo especificado.

NewCurrentDatabase

Crea una nueva base de datos en la ventana Microsoft Access.

OpenCurrentDatabase

Abre una base de datos Access como base en curso a partir de otra aplicación que utilice la tecnología Automation (la aplicación Excel por ejemplo).

RefreshDatabaseWindow

Permite actualizar la ventana Base de datoscuando una tabla, una consulta, un formulario, un informe, una macro o un módulo han sido creados, eliminados o se les ha cambiado el nombre.

Métodos que afectan a los proyectos Access CreateAccessProject

Permite crear un nuevo proyecto Microsoft Access (.adp) en el disco.

NewAccessProject

Permite crear y abrir un nuevo proyecto Microsoft Access (.adp) como proyecto Access activo.

Métodos que afectan a los objetos Access (formularios, informes…) ColumnHistory

Proporciona el historial de los valores que han sido

almacenados en un campo Memo. CreateControl

Permite crear un control en un formulario abierto especificado.

CreateForm

Permite crear un formulario y devuelve un objeto de tipo Form.

CreateGroupLevel

Permite especificar un campo o una expresión a partir de los cuales se reagruparán o se seleccionarán los datos de un informe.

CreateReport

Permite crear un informe y devuelve un objeto de tipo informe.

CreateReportControl

Permite crear un control en un informe abierto.

DeleteControl

Permite eliminar un control determinado en un formulario.

DeleteReportControl

Permite eliminar un control determinado en un informe.

DirtyObject

Marca un formulario o un informe como si hubiera sido modificado.

LoadPicture

Carga una imagen en un control ActiveX.

SetHiddenAttribute

Habilita el atributo oculto de un objeto Access.

Métodos que afectan a la interfaz de Access AddToFavorites

Agrega el nombre de la base de datos actual a la carpeta Favoritos.

Echo

Especifica si Access debe refrescar los datos mostrados en la pantalla.

GetOption

Devuelve el valor actual de una opción del cuadro de diálogo Opciones.

ImportNavigationPane

Carga la configuración guardada del panel de navegación desde el disco.

Quit

Permite salir de Access.

RefreshTitleBar

Actualiza la barra de título de Microsoft Access.

SetOption

Define el valor actual de una opción en el cuadro de diálogo Opciones.

SysCmd

Permite mostrar una barra de progresión o un texto especificado opcional en la barra de estado, permite también devolver datos sobre Microsoft Access y los ficheros asociados, o el informe de un objeto de base de datos especificado (objeto abierto, nuevo o modificado pero no guardado).

Métodos que permiten ejecutar código Run

Permite ejecutar un procedimiento Function o Sub especificado por Microsoft Access o definido por el usuario.

RunCommand

Ejecuta un comando integrado de Access.

RunDataMacro

Ejecuta una macro de datos con nombre.

Métodos relacionados con los ficheros XML CreateAdditionalData

Permite crear un objeto AdditionalData que puede ser utilizado para agregar tablas y consultas complementarias en la tabla madre exportada con el método ExportXML. 

ExportXML

Permite exportar datos XML, esquemas e informaciones de presentación a partir de Microsoft SQL Server 2000 Desktop Engine (MSDE 2000), Microsoft SQL Server versión 6.5 o posterior, o del motor de base de datos Microsoft Jet.

ImportXML

Permite importar datos XML y/o informaciones de presentación a Microsoft SQL Server 2000 Desktop Engine (MSDE 2000), Microsoft SQL Server versión 7.0 o posterior, o al motor de base de datos Microsoft Jet.

TransformXML

Aplica una hoja XSL (eXtensible Stylesheet Language) a un archivo de datos XML y escribe el lenguaje XML resultante en un archivo de datos XML.

Métodos relativos a los hipervínculos FollowHyperLink

Abre el documento o la página Web especificada por una dirección de hipervínculo.

HyperLinkPart

Devuelve la información relativa a los datos almacenados bajo la forma de un hipervínculo.

Métodos relativos a los usuarios CurrentUser

Permite devolver el nombre del usuario actual de la base de datos.

CurrentWebUser

Proporciona información sobre el usuario actual de una base de datos Web en Microsoft SharePoint Foundation 2013.

IsCurrentWebUserInGroup

Indica si el usuario actual de una base de datos Web es miembro del grupo Microsoft SharePoint Foundation 2013 especificado.

Métodos que afectan a los ficheros Aplicación XML LoadFromAxl

Importa el objeto definido a un fichero Aplicación XML (AXL) en la base de datos.

SaveAsAXL

Exporta el objeto definido hacia un fichero Aplicación XML (AXL).

Otros métodos AccessError

Devuelve la cadena descriptiva asociada a un error Microsoft Access o a un error DAO.

BuildCriteria

Permite construir fácilmente los criterios de un filtro.

DefaultWorkspaceClone

Crea un nuevo objeto Workspace sin obligar al

usuario a conectarse de nuevo. LoadCustomUI

Carga el código XML que representa una cinta personalizada.

Nz

Transforma un valor nulo en cero, cadena vacía u otro valor especificado.

SetDefaultWorkgroupFile

Define el fichero especificado como fichero de grupo de trabajo.

Ejemplo Botón de comando que permite salir de Access guardando todos los objetos. Sub cmdSalir_Click()     Application.Quit acQuitSaveAll  End Sub Ejemplo El  código  siguiente  permite  modificar  los  colores  predeterminados  de  las  hojas  de  datos  (contenidos  en  la ficha Hoja de datos del cuadro de diálogo Opciones de Access). With Application     ’  Fuente azul oscuro     .SetOption "Default Font Color", 4     ’  Color de fondo: blanco     .SetOption "Default Background Color", 15     ’  Color de la cuadrícula azul claro     .SetOption "Default Gridlines Color", 12  End With

Funciones aplicables a un conjunto de registros Estas funciones se utilizan generalmente en los formularios y los informes: DAvg

Calcula la media de un conjunto de valores en un conjunto de registros.

DCount

Determina el número de registros en un conjunto de registros.

DFirst

Devuelve el primer registro de un conjunto de registros.

DLast

Devuelve el último registro de un conjunto de registros.

DLookUp

Busca el valor de un campo particular que forma parte de un conjunto de registros.

DMin

Determina el valor mínimo de un campo para un conjunto de registros.

DMax

Determina el valor máximo de un campo para un conjunto de registros.

DStDev

Evalúa la desviación típica para una muestra de población para un conjunto de registros.

DstDevP

Calcula la desviación típica de una población en un conjunto de registros.

DSum

Calcula la suma de un conjunto de valores en un conjunto de registros.

DVar

Evalúa la varianza para una muestra en un conjunto de registros.

DVarP

Evalúa la varianza de una población en un conjunto de registros.

Eval

Evalúa una expresión (combinación de operadores, de nombres de campo, de funciones, de literales y de constantes) y devuelve el resultado bajo la forma de una cadena de caracteres o un valor numérico.

2. El objeto DoCmd

El objeto DoCmd permite ejecutar desde Visual Basic la mayoría de las acciones ejecutables a través de las macros. A  cada  opción  de  macro  le  corresponde  un  método.  Los  argumentos  de  la  acción  se  convierten  en  los argumentos del método. El objeto DoCmd no dispone de propiedades. Las acciones de macro correspondientes a los métodos se indican entre paréntesis.

Ejecución de acción CancelEvent

(CancelarEvento) Cancela un evento.

Quit

(Salir) Sale de Access.

RunCommand

(EjecutarComando) Ejecuta un comando de un menú o de una barra de herramientas.

RunMacro

(EjecutarMacro) Ejecuta una macro.

RunSql

(EjecutarSql) Ejecuta una orden SQL.

Acciones sobre los objetos de Access (formularios, informes...) ApplyFilter

(AplicarFiltro) Aplica un filtro a una tabla, un formulario o a un informe.

BrowseTo

(Examinar)Permite navegar entre los objetos de la base

de datos. También se puede cambiar el objeto fuente de un control de sub­formulario al especificar el argumentoPathToSubFormControl. Close

(Cerrar) Cierra un objeto (formulario, informe...).

CloseDatabase

(CerrarBaseDeDatos) Cierra la base de datos abierta en la interfaz Access. Si la base de datos contiene objetos que no hayan sido grabados cuando utiliza el métodoCloseDatabase, aparecen cuadros de diálogo idénticos a los que se muestran cuando hace clic en Cerrar base de datos.

CopyObject

(CopiarObjeto) Permite copiar un objeto Access en la misma base o en otra base.

DeleteObject

(EliminarObjeto) Elimina un objeto.

GotoControl

(IrAControl) Mueve el enfoque a un control.

GotoPage

(IrAPágina) Mueve el enfoque al primer control de la página indicada del formulario activo.

OpenDataAccessPage

(AbrirPáginaAccesoDatos) Abre una página de acceso a los datos.

OpenDiagram

(AbrirDiagrama) Abre un esquema de base de datos.

OpenForm

(AbrirFormulario) Abre un formulario.

OpenFunction

(AbrirFunción) Abre una función de usuario en una base de datos Microsoft SQL Server para mostrarla en Microsoft Access.

OpenModule

(AbrirMódulo) Abre un módulo VBA.

OpenQuery

(AbrirConsulta) Abre una consulta.

OpenReport

(AbrirInforme) Abre un informe.

OpenStoredProcedure

(AbrirProcedimientoAlmacenado) Abre un

procedimiento almacenado en la vista Hoja de datos, en vista Diseño o en vista Preliminar. OpenTable

(AbrirTabla) Abre una tabla.

OpenView

(AbrirPáginaAccesoADatos) Abre una página de acceso a datos.

PrintOut

(Imprimir) Imprime en papel.

Rename

(CambiarNombre) Cambiar el nombre a un objeto.

RepaintObject

(RepintarObjeto) Repintar un objeto (formulario...).

Save

(Guardar) Guarda el objeto especificado o el objeto activo.

SelectObject

(SeleccionarObjeto) Selecciona un objeto de base de datos.

SetHiddenAttribute

Permite modificar la visibilidad de un objeto Access.

SetParameter

(EstablecerParametro) Crea un parámetro que los

métodos BrowseTo, OpenForm, OpenQuery, OpenReport o RunDataMacro pueden utilizar.

Acciones sobre los registros FindNext

(EncontrarSiguiente) Continúa la búsqueda.

FindRecord

(EncontrarRegistro) Búsqueda de un registro.

GoToRecord

(AlcanzarRegistro) Alcanza un registro.

RefreshRecord

(RefrescarRegistro) Refresca los datos de los registros del objeto Access activo (formulario, informe...)

Requery

(Actualizar) Actualiza los datos de la pantalla (vuelve a lanzar la consulta fuente del objeto).

SearchForRecord

(BuscarRegistro) Permite buscar un registro específico en una tabla, una consulta, un formulario o un informe.

SetFilter

(EstablecerFiltro) Aplica un filtro a los registros del

objeto Access activo: hoja de datos, formulario, informe o tabla. SetOrderBy

(EstablecerOrdenPor) Ordena los registros del objeto Access activo: hoja de datos, formulario, informe o tabla.

ShowAllRecords

(MostrarTodosRegistros) Deshabilita un filtro y vuelve a mostrar todos los registros.

Importar/Exportar Datos CopyDatabaseFile

(CopiarArchivoDeBaseDeDatos) Copia la base de datos conectada al proyecto activo a un archivo de base de datos Microsoft SQL Server para exportarla.

OutPutTo

(SalidaHacia) Permite exportar un objeto Access (tabla,

formulario) a otra base Access o a otro tipo de fichero (Excel, XML...) RunSavedImportExport

(EjecutarImportaciónExportacionGuardada)Ejecuta una especificación de importación o exportación guardada, creada a partir del Ayudante para la Importación o del Ayudante para la Exportación.

SendObject

(EnviarObjeto) Envía un objeto hacia la mensajería.

TransferDatabase

(TransferirBase) Importa o exporta una base de datos.

TransferSpreadSheet

(TransferirHojaCalculo) Importa o exporta una hoja de cálculo.

TransferSharePointList

(TransferirListaSharePoint) Permite importar o relacionar datos a partir de un sitio Microsoft Windows SharePoint Services 3.0.

TransferSQLDatabase

(TransferirBaseDeDatosSQL) Transferir la integridad de la base de datos Microsoft SQL Server especificada hacia otra base de datos SQL Server.

TransferText

(TransferirTexto) Importa o exporta texto en formato ASCII.

Manipulaciones de la ventana activa Maximize

(Maximizar) Maximiza una ventana.

Minimize

(Minimizar) Reduce la ventana activa a un icono.

MoveSize

(DesplazarTamaño) Desplaza o cambia el tamaño de la ventana activa.

Restore

(Restaurar) Recupera el tamaño normal de la ventana activa.

Modificación de la interfaz Access AddMenu

(AgregarMenú) Permite crear una barra de menú o un menú contextual.

DoMenuItem

(MostrarBarraHerramientas) Muestra el

comando de menú apropiado para Microsoft Access. Hourglass

(RelojDeArena) Muestra el puntero del ratón en forma de reloj de arena o no.

LockNavigationPane

(BloquearPanelExploración) Permite impedir a los usuarios suprimir objetos de base de datos que se muestran en el panel de navegación.

SetDisplayedCategories

(DefinirCategoríasMostradas) Precisa las

categorías que se muestran en Desplazarse a la categoría en la barra de título del panel de navegación. SetMenuItem

(EstablecerElementoMenú) Permite establecer el estado (activo o inactivo, seleccionado o no seleccionado) de elementos de menú personalizado o global para la ventana activa.

SetWarnings

(EstablecerAdvertencias) Activa o desactiva la

visualización de los mensajes de advertencia estándar. ShowToolbar

(MostrarBarraDeHerramientas) Muestra u oculta una barra de herramientas.

Diversos Beep

(Bip) Emite un bip sonoro.

ClearMacroError

(BorrarErrorDeMacro) Suprime la información

relativa a un error guardada en un objetoErrorDeMacro. Echo

(Eco) Oculta o muestra los resultados de una macro durante su ejecución.

PlainText

Suprime el formato del texto enriquecido de una cadena y devuelve una cadena de texto plano.

SetDefaultWorkgroupFile

Define el archivo especificado como archivo de grupo de trabajo predeterminado.

SingleStep

(PasoaPaso) Suspende la ejecución de la macro activa y abre el cuadro de diálogo Paso a paso.

Acciones de macros no tomadas en cuenta por el objeto DoCmd El  objeto  DoCmd  no  toma  en  cuenta  las  siguientes  macros  pero  éstas  pueden  ser  sustituidas  por  una función o una instrucción VBA. CuadroMsj

Utilice la función o la instrucción MsgBox.

EjecutarAplicación

Utilice la función Shell.

EjecutarCódigo

Llame directamente a la función en Visual Basic.

EnviarTeclas

Utilice la instrucción SendKeys.

Las acciones DetenerTodasMacros y DetenerMacro no tienen equivalente en Visual Basic.

3. El objeto Screen El objeto Screen hace referencia al objeto activo ya se trate de un formulario, de una página de acceso a datos, de un informe o de un control. El  objeto  Screen  se  utiliza  especialmente  en  los  procedimientos  de  evento  de  esos  distintos  objetos (Control, Data Access Page, Form, Report). Este objeto sólo contiene propiedades.

Propiedades ActiveControl

Proporciona una referencia al control activo.

ActiveDataAccessPage

Proporciona una referencia a la página de acceso a datos activa.

ActiveDataSheet

Proporciona una referencia a la hoja de datos activa.

ActiveForm

Proporciona una referencia al formulario activo.

ActiveReport

Proporciona una referencia al informe activo.

Application

Permite acceder al objeto Application y a sus propiedades.

MousePointer

Permite especificar el tipo de puntero del ratón.

Parent

Proporciona una referencia al padre (objeto principal) de un control, de una sección, de un subformulario, etc.

PreviousControl

Proporciona una referencia al último control activo antes del control actual.

Ejemplo Sub CmdScreen_Click() 

’  Muestra el nombre del control anterior  Dim ctl As Control  Set ctl = Screen.PreviousControl  MsgBox ctl.Name   ’  Transforma el puntero del ratón en un reloj de arena  Screen.MousePointer = 11  ’  Recupera el puntero predeterminado   Screen.MousePointer = 0   ’  Muestra el nombre del formulario activo  Dim frm As Form  Set frm = Screen.ActiveForm  MsgBox frm.Name   ’  Modifica el título del formulario  frm.Caption = "Formulario de entrada de los empleados"  End Sub

4. La colección References La colección References contiene los objetos Reference correspondientes a las bibliotecas de objetos que provienen de otras aplicaciones. Para agregar (o eliminar) una referencia a una biblioteca de objetos, seleccione la opción Referencias  del menú Herramientas. La ventana siguiente le permite seleccionar las referencias deseadas:

Propiedades Count

Determina el número de objetos referencia.

Parent

No empleada.

Métodos AddFromFile

Crea una referencia a una biblioteca a partir de un nombre de archivo.

AddFromGuid

Crea una referencia a una biblioteca a partir de su GUID (identificador global único en el registro de Windows).

Item

Devuelve una referencia en función de su posición en la colecciónReferences.

Remove

Elimina un objeto referencia de la colección References.

Propiedades del objeto Reference BuiltIn

Indica si una referencia predeterminada es necesaria para que Access funcione correctamente.

FullPath

Devuelve la ruta de acceso y el nombre del archivo de la biblioteca referenciada.

Guid

Devuelve el GUID, identificador de la biblioteca en el Registro de Windows.

IsBroken

Indica si una referencia válida está asignada al objeto en el Registro de Windows.

Kind

Indica el tipo de referencia del objeto.

Major

Indica el número de versión principal de la aplicación a la que está asociada la referencia.

Minor

Indica el número de versión secundario de la aplicación.

Name

Indica el nombre de la referencia.

Ejemplo Private Sub cmdReferencias_Click()  Dim ref As Reference  Dim i As Integer     ’  Muestra el número total de referencias  MsgBox "El número total de referencias es: " & References.Count  ’  Recorre las referencias y muestra su nombre y ruta de acceso  i = 0  For Each ref In Application.References      MsgBox " Nombre: " & ref.Name & " " & Chr(13) & Chr(13) _      & " Ruta: " & ref.FullPath  Next ref     ’  Agrega las bibliotecas de objeto Excel y Word  ’  Error si la biblioteca ya ha sido referenciada  On Error Resume Next  Application.References.AddFromFile "Excel.exe"  Application.References.AddFromFile "MsWord.olb"  On Error GoTo 0     ’  Muestra el número total de referencias  MsgBox "El número total de referencias es: " & References.Count    End Sub

5. La colección Printers La colección Printers contiene objetos Printer que  representan  cada  uno  una  impresora  disponible  en  el sistema actual. El objeto Printer no existía en las versiones anteriores de Access.

Propiedades del objeto Printer

BottomMargin

En combinación con las propiedades TopMargin, RightMargin yLeftMargin, esta propiedad permite especificar los márgenes de una página.

ColorMode

Indica si la impresora debe imprimir en color (acPRCMColor) o no (acPRCMMonochrome).

ColumnSpacing

Indica el espaciado vertical de las secciones de Detalle de un formulario.

Copies

Indica el número de copias que deben imprimirse.

DataOnly

Permite imprimir solamente los datos de una tabla o de una consulta en la vista Hoja de datos.

DefaultSize

Devuelve el valor True si se emplea el tamaño de la sección de detalle en vista Diseño al imprimir un informe o un formulario.

DeviceName

Indica el nombre del dispositivo de impresión.

DriverName

Indica el nombre del controlador utilizado por la impresora.

Duplex

Indica cómo gestiona la impresora la impresión dúplex.

ItemLayout

Indica si la impresora traza las columnas en horizontal y luego en vertical o en vertical y luego en horizontal.

ItemsAcross

Devuelve o define un valor de tipo Entero Largo que indica el número de columnas que deben imprimirse en el caso de informes o de etiquetas en varias columnas.

ItemSizeHeight

Devuelve o define un valor de Entero Largo que indica la altura de la sección de detalle de un formulario o de un informe en twips.

ItemSizeWidth

Devuelve o define un valor de tipo Entero Largo que indica la anchura de la sección de detalle de un formulario o de un informe en twips.

LeftMargin

Margen izquierdo de una página impresa.

Orientation

Indica la orientación de la impresión (acPRORPortrait oacPRORLandscape).

PaperBin

Indica qué bandeja de papel debe utilizar la impresora.

PaperSize

Indica el tamaño de papel que debe utilizarse durante la impresión.

Port

Indica el puerto al que está conectada la impresora.

PrintQuality

Indica la resolución que debe utilizar la impresora para los trabajos de impresión.

RightMargin

Margen derecho de una página impresa.

RowSpacing

Devuelve o define un valor de tipo Entero Largo que representa el espaciado horizontal de las secciones de detalle en twips.

TopMargin

Margen superior de una página impresa.

Las  demás  propiedades  (ColumnSpacing,  RowSpacing,  ItemSizeHeight...)  permiten  definir  el formato de la sección Detalle de un formulario o de un informe.

Objetos de acceso a datos DAO y ADO Los  objetos  de  acceso  a  datos  son  muy  útiles:  permiten,  mediante  VBA,  manipular  los  datos  (búsquedas, actualizaciones, agregar registros...) de bases de datos locales o remotas. En  las  versiones  anteriores  a  Access  2000,  el  único  modelo  de  acceso  a  datos  era  el  modelo  DAO:  Data Access Objects. Con Access 2000 aparece el modelo ADO: ActiveX Data Objects. Microsoft recomienda utilizar el modelo ADO por los motivos siguientes: mejor implementación de SQL Server, mejor rendimiento en entornos cliente/servidor, código VBA más corto y más sencillo. Si desarrolla una  nueva  aplicación,  puede  utilizar  el  modelo  ADO  incluso  si  su  aplicación  accede  a  una base de datos local de tipo Access. Si desea más adelante migrar sus datos a MSDE (Microsoft Data Engine) o SQL Server, su código funcionará de manera óptima. Si hace evolucionar una aplicación existente utilizando el modelo DAO, es posible modificar su código para transformar los objetos DAO en objetos ADO.

El modelo de acceso a datos DAO 1. Presentación La  biblioteca  de  objetos  DAO  (Data  Access  Objects)  incorpora  dos  entornos  de  bases  de  datos  distintos, llamados espacios de trabajo: los  espacios  de  trabajo  Microsoft  Jet:  permiten  acceder  a  bases  de  datos  de  tipo  Access,  a servidores de bases de datos ODBC (Open Database Connectivity) y a bases de datos externas como dBASE,  Microsoft  Excel  y  Paradox  accesibles  mediante  un  controlador  ISAM  (Indexed  Sequential Access Method). los espacios de trabajo ODBCDirect: permiten acceder a servidores de bases de datos ODBC de manera  "directa",  es  decir  sin  cargar  el  motor  de  base  de  datos  Microsoft  Office  14.  Por consiguiente,  este  espacio  de  trabajo  está  recomendado  para  ejecutar  consultas,  procedimientos almacenados o funciones específicas de ODBC en un servidor remoto de tipo SQL Server. Para poder utilizar la biblioteca de objetos DAO, es necesario seleccionar la referencia Microsoft  DAO  3.6 Object Library en la lista de referencia de las bibliotecas de objetos (para mostrar esta lista, seleccione la opción Referencias del menú Herramientas). Si  esta  referencia  no  está  disponible,  debe  seleccionar  el  archivo  DAO360.dll  mediante  el  botón  de comando  Examinar.  Este  archivo  está  generalmente  situado  en  el  directorio  C:\Archivos  de programa\Common Files\Microsoft Shared\DAO. El archivo de ayuda DAO360.chm, proporcionado con los ejemplos del libro, le permite obtener información detallada sobre la utilización del modelo de objetos DAO.

2. Jerarquía de los objetos DAO

3. Descripción de las colecciones Existe una colección para cada uno de los tipos de objeto DAO, con la excepción del objeto DBEngine. Todas  las  colecciones  incluyen  todos  los  objetos  de  un  tipo  determinado.  Por  ejemplo,  la colecciónDataBases contiene todos los objetos DataBase abiertos. Todos los objetos DAO poseen una colección Properties, con la excepción de los objetos Error. La mayoría de los objetos DAO disponen de colecciones por defecto. Por ejemplo, la colección por defecto de un objeto Recordset es la colección Fields. De este modo puede simplificarse el código. Containers

Conjunto de los objetos Container de una base de datos.

Databases

Contiene todas las bases de datos (objetos DataBase) abiertas en un Workspace.

Documents

Conjunto de los objetos Document de un Container.

Errors

Conjunto de los errores (Error) del motor de acceso a datos (DBEngine).

Fields

Conjunto de los campos (Field) de una tabla (TableDef), de una consulta (QueryDef), de un índice (Index), de un conjunto de

registros (Recordset) o de una relación (Relation). Groups

Conjunto de los grupos de usuarios (Group) de un Workspace o conjunto de los grupos de usuarios (Group) a los que pertenece un usuario (User).

Indexes

Conjunto de los índices (Index) de una tabla (TableDef).

Parameters

Conjunto de los parámetros (Parameter) de una consulta (QueryDef).

Properties

Conjunto de las propiedades (Property) de un objeto.

QueryDefs

Contiene todas las definiciones de consulta (QueryDef) de una base de datos (Database).

Recordsets

Conjunto de los conjuntos de registros abiertos (Recordset) de una base de datos (Database).

Relations

Conjunto de las relaciones (Relation) de una base de datos (Database).

TableDefs

Contiene todas las definiciones de tabla (TableDef) de una base de datos (Database).

Users

Conjunto de los usuarios (User) de un Workspace o de un grupo de usuarios (Group).

Workspaces

Contiene todos los objetos Workspace activos.

Propiedades Count

Devuelve el número de elementos en la colección.

Item

Devuelve un miembro específico de una colección en función de su posición o de su clave.

Todas las colecciones pueden utilizar estas propiedades.

Ejemplo Lista de las tablas de la base de datos actual. Dim intI As Integer  For intI = 0 To CurrentDb.TableDefs.Count ‐ 1      MsgBox CurrentDb.TableDefs.Item(intI).Name  Next intI

Métodos Append

Agrega un elemento a la colección.

Delete

Elimina un elemento de la colección.

Refresh

Actualiza el contenido de la colección.

Las  colecciones  Errors,  Databases,  Containers,  Documents,  Parameters  y  Recordsets  no  pueden utilizar los métodos Append y Delete. Su contenido está gestionado directamente por el motor de la base de datos.

4. El objeto DBEngine Representa el motor de acceso a datos Microsoft Jet. Contiene y controla el conjunto de los objetos DAO.

Propiedades DefaultType

Define  el  tipo  de  espacio  de  trabajo,  Microsoft  Jet  o ODBCDirect.

DefaultUser yDefaultPassword

Nombre de usuario y contraseña utilizados por el motor de  base  de  datos  Microsoft  Jet  cuando  un  objeto Workspace se crea sin nombre de usuario ni contraseña específica.

IniPath

Define  o  devuelve  informaciones  sobre  la  clave  del Registro  de  Windows  que  contiene  valores  relativos  al motor de base de datos Microsoft Jet.

SystemDB

Define  o  devuelve  la  ruta  de  acceso  al  archivo  de informaciones sobre el grupo de trabajo actual (MDW).

Version

Valor  que  indica  la  versión  de  la  base  de  datos  o  del motor de base de datos asociado al objeto.

Métodos CompactDatabase

Compacta una base de datos cerrada.

CreateWorkspace

Crea un nuevo objeto Workspace.

Idle

Interrumpe  el  tratamiento,  permitiendo  al  motor  de  base  de datos Microsoft Jet terminar las tareas en espera.

SetOption

Permite  modificar  temporalmente  las  opciones  del  motor  de acceso a datos Microsoft Jet.

Colecciones Workspaces, Properties, Errors Ejemplo Compactar la base de datos Presupuesto en Presupuesto2. DBEngine.CompactDatabase "c:\Presupuesto\Presupuesto.accdb", _                           "c:\Presupuesto\Presupuesto2.accdb" Mostrar la versión del motor Microsoft Jet. MsgBox DBEngine.Version, vbExclamation, "Número de versión" _                                         & "del motor Microsoft Jet"

5. Los objetos Workspace Un objeto Workspace (espacio de trabajo) permite definir una sesión de trabajo para un usuario.

Propiedades Name

Devuelve el nombre del objeto Workspace.

Type

Devuelve  o  define  el  tipo  de  conexión  del  objeto  Workspace (constante  dbUseJet  si  el  objeto  Workspace  está  conectado  al motor de base de datos Microsoft Jet, constante dbUseODBC si el  objeto  Workspace  está  conectado  a  un  origen  de  datos ODBC).

UserName

Devuelve el nombre del propietario del objeto Workspace.

Otras propiedades DefaultCursorDriver, IsolateODBCTrans, LoginTimeout

Métodos BeginTrans

Inicia una nueva transacción.

Close

Cierra el Workspace.

CommitTrans

Termina y valida la transacción actual.

CreateDatabase

Crea un nuevo objeto Database.

CreateGroup

Crea un nuevo grupo de usuarios.

CreateUser

Crea un nuevo usuario.

OpenDatabase

Abre una base de datos.

RollBack

Anula  y  termina  una  transacción  en  curso  y  restablece  el estado anterior de la base de datos.

Colecciones Databases, Users, Groups, Properties Ejemplo Apertura de la base de datos Presupuesto en el espacio de trabajo activo. Dim wrk As Workspace  Dim dbs As Database  Set wrk = DBEngine.Workspaces(0)  Set dbs = wrk.OpenDatabase("C:\Presupuesto\Presupuesto.accdb")

6. Les objetos Database Un objeto Database representa una base de datos abierta.

Propiedades CollatingOrder

Define el método de comparación de las cadenas de caracteres según el idioma.

Connect

Determina  la  información  necesaria  para  abrir  una  base  de datos externa o para adjuntar una tabla de una base externa.

DesignMasterID

Determina  el  GUID  del  diseño  principal  de  un  conjunto  de réplicas.

Name

Devuelve el nombre de la base.

RecordsAffected

Indica  el  número  de  registros  afectados  por  el  último métodoExecute.

Replicable

Indica si la base de datos se puede replicar.

ReplicaID

Devuelve el identificador de una réplica.

Transactions

Indica  si  la  base  de  datos  de  la  conexión  toma  en  cuenta  las transacciones (ODBCDirect).

Updatable

Indica  si  las  modificaciones  del  objeto  Database  están

autorizadas. Version

Identifica la versión del formato de la base de datos.

Métodos Close

Cierra el objeto Database.

CreateProperty

Crea un nuevo objeto Property.

CreateQueryDef

Crea un nuevo objeto QueryDef.

CreateRelation

Crea un nuevo objeto Relation.

CreateTableDef

Crea un nuevo objeto TableDef.

Execute

Ejecuta una consulta de acción o una instrucción SQL.

MakeReplica

Crea una réplica de la base de datos.

NewPassword

Define una nueva contraseña para una base de datos Microsoft Jet.

OpenRecordset

Crea un nuevo objeto Recordset.

PopulatePartial

Sincroniza  los  cambios  aportados  a  una  réplica  parcial  con  la réplica completa.

Synchronize

Sincroniza dos réplicas.

Colecciones TableDefs, QueryDefs, Relations, Containers, Recordsets, Properties Ejemplo Inicialización de una referencia sobre la base de datos actual. Dim dbsPresupuesto As DAO.Database  Set dbsPresupuesto = CurrentDb() Apertura de una base de datos externa. Dim dbsPresupuesto As DAO.Database  Set dbsPresupuesto = DBEngine.OpenDatabase _  ("C:\Presupuesto\Presupuesto.accdb") Creación de un objeto RecordSet de tipo tabla en sólo lectura en la tabla Clientes de la base de datos actual. Dim dbsPresupuesto As Database  Dim rstCli As DAO.Recordset  Set dbsPresupuesto = DBEngine.OpenDatabase("C:\Presupuesto\  Presupuesto.accdb"  Set rstCli = dbsPresupuesto.OpenRecordset("Clientes", dbOpenTable, _  dbReadOnly)

7. Los objetos Recordset Un objeto Recordset representa los registros de una tabla o los resultantes de una consulta. Existen cuatro tipos de objetos Recordset: Recordset

Definición

Interés

Constante de declaración

Table

Representa una tabla.

Permite utilizar los índices.

dbOpenTable

Dynaset (hoja de respuestas dinámica)

Representa el resultado de una consulta cuyos registros pueden actualizarse.

Permite trabajar sobre los datos originarios de varias tablas.

dbOpenDynaset

ForwardOnly(adelante solamente)

Idem Snapshot pero el desplazamiento de los registros solamente hacia delante.

Velocidad

dbOpenForwardOnly

Snapshot(instantánea)

Representa el resultado de una consulta en sólo lectura.

Velocidad en comparación con el Dynaset.

dbOpenSnapshot

Los  tipos  de  objetos  Recordset  a  los  que  concierne  cada  propiedad  o  método  se  representan medianteT (Table), D (Dynaset), S (Snapshot), F (ForwardOnly).

Propiedades AbsolutePosition

Recordset DS

Determina la posición relativa de un registro en un recordset. BOF

DSTF

Indica un posicionamiento al inicio del Recordset. Bookmark

DST

Devuelve o define un marcador que identifica de manera única un registro. Bookmarkable

DST

Indica si el Recordset admite marcadores. CacheStart

D

Define o devuelve el marcador del primer registro que debe situarse en memoria caché. DateCreated

T

Devuelve la fecha y la hora de creación de la tabla subyacente. EditMode

DT

Indica el estado de modificación del registro actual. EOF

DSTF

Indica un posicionamiento al final del Recordset. Filter

DSF

Permite definir el filtro que debe aplicarse. Index

T

Define el índice que debe emplearse. LockEdits

DTS

Define la condición de bloqueo. LastModified

DT

Devuelve un marcador que indica el último registro modificado. LastUpdated Devuelve la hora de la última modificación de la tabla de origen subyacente.

T

Name Devuelve el nombre del Recordset.

DSTF

NoMatch Indica si el registro buscado ha sido encontrado.

DST

PercentPosition Devuelve la posición actual de un registro en porcentaje del número total de registros.

DST

RecordCount

DSTF

Indica el número de registros solicitados. Restartable

DSFT

Indica si el Recordset admite el método Requery que ejecuta de nuevo la consulta subyacente. Sort

DS

Define el criterio de ordenación. Transactions

DTSF

Indica si el Recordset soporta las transacciones. Type

DSTF

Indica el tipo de Recordset. Updatable

DTSF

Indica las actualizaciones autorizadas. ValidationText

DSTF

Especifica el mensaje de error si la condición de validación es falsa. ValidationRule

DSTF

Especifica la condición de validación del Recordset. Métodos AddNew

Recordset DT

Crea un nuevo registro. CancelUpdate

DT

Cancela las actualizaciones pendientes. Clone

DST

Crea una copia del Recordset. Close

DSTF

Cierra el Recordset. CopyQueryDef

DSF

Crea una copia del objeto QueryDef asociado al Recordset. Delete

DT

Elimina el registro actual. Edit

DT

Pasa el registro actual al modo Edición. FindFirst

DS

Localiza el primer registro que responde al criterio y lo con­vierte en el registro actual. FindLast Localiza el último registro que responde al criterio y lo con­vierte en el registro actual.

DS

FindNext Localiza el registro siguiente que responde al criterio y lo con­vierte en el registro actual.

DS

FindPrevious

DS

Localiza el registro anterior que responde al criterio y lo con­vierte en el registro actual. GetRows

DSTF

Extrae varias filas de un Recordset y las copia en una matriz. MoveFirst

DST

Localiza el primer registro y lo convierte en el registro actual. MoveLast

DST

Localiza el último registro y lo convierte en el registro actual. MoveNext

DST

Localiza el siguiente registro y lo convierte en el registro actual. MovePrevious

DST

Localiza el registro anterior y lo convierte en el registro actual. Move

DST

Cambia la posición del registro actual. OpenRecordset

DST

Crea un nuevo Recordset. Requery

DSF

Actualiza los registros de un Recordset volviendo a ejecutar la consulta subyacente. Seek

T

Localiza en relación a un índice (Index) seleccionado, el primer registro que responda a los criterios especificados y lo convierte en el registro actual. Update Actualiza el registro.

DT

Ejemplo Transformación en mayúsculas de los caracteres del campo Cli_Empresa en la tabla Clientes. Dim dbs As Database  Dim rstCli As DAO.Recordset    ’   Creación del Recordset  Set dbs = CurrentDb  Set rstCli = dbs.OpenRecordset("Clientes", dbOpenTable)  rstCli.MoveFirst    ’   Recorre los registros  With rstCli     Do Until .EOF        .Edit        rstCli("Cli_Empresa") = UCase(rstCli("Cli_Empresa"))        ’  Actualización        .Update        ’  Registro siguiente        .MoveNext     Loop  End With  rstCli.Close Utilización del método Seek: búsqueda de un cliente a partir de su código.

Dim dbs As Database  Dim rstCli As DAO.Recordset  Dim strCodigoCli As String    ’   Creación del Recordset  Set dbs = CurrentDb  Set rstCli = dbs.OpenRecordset("Clientes", dbOpenTable)    With rstCli     ’   Entrada del código cliente     strCodigoCli = InputBox("Introduzca el código cliente")     ’   Índice actual: clave primaria     .Index = "PrimaryKey"     ’   Búsqueda     .Seek "=", strcodigocli     ’   Registro no encontrado     If .NoMatch Then        MsgBox "Cliente no encontrado"     Else     ’  Registro encontrado        MsgBox "Empresa : " & rstCli("Cli_Empresa")     End If  End With  rstCli.Close Utilización  del  método  Find:  búsqueda  de  los  clientes  cuyo  nombre  de  Empresa  empiece  por  un  valor determinado. Dim dbs As DAO.Database  Dim rstCli As DAO.Recordset  Dim strEmp As String  Dim strCrit As String    ’   Creación del Recordset  Set dbs = CurrentDb  Set rstCli = dbs.OpenRecordset("Clientes", dbOpenSnapshot)    With rstCli     ’   Entrada del código cliente     strEmp = InputBox("Introduzca las primeras letras de la Empresa")     .MoveLast     ’   Búsqueda     strCrit = "Cli_Empresa Like ’" & strEmp & "*’"     .FindFirst strCrit     ’   Registro no encontrado     If .NoMatch Then        MsgBox "Cliente no encontrado"     Else     ’  Si encontrado: búsqueda de los siguientes        Do While True           MsgBox rstCli("Cli_Empresa")           .FindNext strCrit           If .NoMatch Then Exit Do        Loop     End If  End With

8. Los objetos Tabledef Un  objeto  TableDef  representa  la  definición  guardada  de  una  tabla  o  de  una  tabla  adjunta  creada  en  una base externa.

Propiedades Attributes

Determina  las  características  de  la  tabla  descrita  por

elTableDef (exclusividad, tabla vinculada, tabla del sistema...). ConflictTable

Devuelve el nombre de la tabla de conflictos que contiene los registros  que  entraban  en  conflicto  durante  una  operación  de sincronización de réplicas.

Connect

Devuelve la información para el origen del objeto TableDef.

DateCreated

Indica la fecha y la hora de creación de la tabla subyacente.

KeepLocal

Determina  si  la  tabla  no  debe  formar  parte  de  una  operación de réplica.

LastUpdated

Indica  la  fecha  y  la  hora  de  la  última  modificación  de  la  tabla subyacente.

Name

Devuelve el nombre de la tabla.

RecordCount

Indica el número de registros de la tabla.

Replicable

Determina  si  la  tabla  debe  formar  parte  de  una  operación  de réplica.

ReplicaFilter

Define  los  registros  de  una  tabla  que  deban  formar  parte  de una operación de réplica.

SourceTableName

Especifica el nombre de la tabla vinculada.

Updatable

Indica si está autorizada la modificación de la estructura.

ValidationText

Especifica  el  mensaje  de  error  si  la  condición  de  validación  es falsa.

ValidationRule

Especifica  la  condición  que  debe  respetarse  para  la  validación del objeto.

Métodos CreateField

Crea un nuevo campo (Field).

CreateIndex

Crea un nuevo Index.

CreateProperty

Crea un nuevo objeto Property.

OpenRecordset

Crea un nuevo Recordset.

RefreshLink

Actualiza los datos a partir de una tabla vinculada.

Colecciones Fields, Indexes, Properties Ejemplo Agregar un campo de tipo Memo a la tabla Clientes. Dim dbs As DAO.Database  Dim tdf As DAO.TableDef  Dim fld As DAO.Field  Set dbs = CurrentDb  Set tdf = dbs.TableDefs("Clientes")  Set fld = tdf.CreateField("Cli_Coment", dbMemo)  tdf.Fields.Append fld

9. Los objetos Field e Index a. Field

Un  objeto  Field  representa  un  campo  de  una  tabla  (TableDef),  de  una  relación  (Relation),  de  una consulta (QueryDef), de un conjunto de registros (Recordset) o de un índice (Index).

Propiedades AllowZeroLength

Define si autoriza a una cadena vacía como valor de campo.

Attributes

Indica ciertas características del campo.

CollatingOrder

Especifica las características de comparación de cadenas de caracteres y de la ordenación.

DataUpdatable

Indica si el campo puede actualizarse.

DefaultValue

Define el valor por defecto del campo.

FieldSize

Devuelve  el  tamaño  de  un  campo  Memo  o  Binario  Largo (Objeto OLE).

ForeignName

Especifica, en una relación Relation, el nombre del campo de una  tabla  externa  (tabla  vinculada)  que  corresponde  a  un campo  (clave  primaria)  de  la  tabla  de  origen  (tabla  de referencia).

Name

Devuelve el nombre del campo.

OrdinalPosition

Especifica el orden de presentación de los campos.

Required

Define si el campo debe contener obligatoriamente un valor.

Size

Define o devuelve el tamaño del campo.

SourceField

Indica el nombre del campo origen de los datos.

SourceTable

Indica el nombre de la tabla origen de los datos.

Type

Indica el tipo de datos del campo.

Value

Devuelve el valor del campo.

ValidationText

Especifica  el  mensaje  de  error  devuelto  si  la  condición  de validación del campo es falsa.

ValidateOnSet

Especifica  si  la  validación  de  valor  del  campo  es  inmediata después de su modificación.

ValidationRule

Especifica la condición de validación del campo.

Métodos AppendChunk

Agrega  datos  de  una  expresión  de  cadena  a  un  campo  de tipoMemo u Objeto OLE.

CreateProperty

Crea un nuevo objeto Property.

GetChunk

Lee la totalidad o parte de un campo Memo u Objeto OLE.

Colecciones Properties Ejemplo Muestra la lista de todos los campos (nombre y tipo) de la tabla Clientes, en la ventana Inmediato. Dim dbs As DAO.Database  Dim tdf As DAO.TableDef  Dim fld As DAO.Field 

Set dbs = CurrentDb  Set tdf = dbs.TableDefs("Clientes")  For Each fld In tdf.Fields     Debug.Print fld.Name & " " & fld.Type  Next

b. Index Un objeto Index representa un índice asociado a un objeto TableDef o Recordset de tipo tabla.

Propiedades Clustered

Indica  si  el  índice  representa  el  índice  por  grupos  en  una tabla.

DistinctCount

Devuelve el número de valores únicos para este índice en la tabla asociada.

Foreign

Indica si el índice es una clave externa de la tabla.

IgnoreNulls

Indica si existe una entrada de índice para los registros cuyos campos indexados contienen el valor Null.

Name

Devuelve el nombre del índice.

Primary

Indica si el índice es la clave primaria.

Required

Define  si  todos  los  campos  del  índice  deben  contener obligatoriamente un valor.

Unique

Indica si los valores del índice son únicos (sin duplicados).

Métodos CreateField

Crea un nuevo campo para el índice.

CreateProperty

Crea una nueva propiedad.

Colecciones Fields, Properties Ejemplo Creación del índice Empresa en el campo Cli_Empresa de la tabla Clientes. Dim dbs As DAO.Database  Dim tdf As DAO.TableDef  Dim fld As DAO.Field  Dim idx As DAO.Index  Set dbs = CurrentDb  Set tdf = dbs.TableDefs("Clientes")  Set idx = tdf.CreateIndex("Empresa")  Set fld = idx.CreateField("Cli_Empresa")  idx.Unique = False  idx.Fields.Append fld  tdf.Indexes.Append idx

10. Los objetos QueryDef y Parameter a. QueryDef El objeto QueryDef representa la definición guardada de una consulta en una base de datos.

Propiedades Connect

Proporciona información sobre la base de datos utilizada en la consulta.

DateCreated

Indica la fecha y la hora de creación de la consulta.

KeepLocal

Determina  si  la  consulta  debe  formar  parte  o  no  de  una operación de replicación.

LastUpdated

Indica  la  fecha  y  la  hora  de  última  actualización  de  la consulta.

MaxRecords

Define  el  número  máximo  de  registros  que  debe  devolver  la consulta.

Name

Devuelve el nombre de la consulta.

RecordsAffected

Indica  el  número  de  registros  afectados  por  el  último métodoExecute.

Replicable

Determina si la consulta debe formar parte de una operación de replicación.

ReturnsRecords

Indica si la consulta ha devuelto registros.

SQL

Define o devuelve la instrucción SQL asociada a la consulta.

Type

Define el tipo de la consulta (selección, agregar...).

Updatable

Indica  si  se  autorizan  las  actualizaciones  a  través  de  la consulta.

Métodos Close

Cierra la consulta.

CreateProperty

Crea una nueva propiedad.

Execute

Inicia un consulta de acción o ejecuta una instrucción SQL.

OpenRecordset

Crea un nuevo Recordset.

Colecciones Fields, Parameters, Properties Ejemplo Creación de una nueva consulta basada en una instrucción SQL. Private Sub cmdSQL_Click()     Dim dbs As Database     Dim qdf As QueryDef       On Error GoTo cmdSQL_Error     Set dbs = CurrentDb     Set qdf = dbs.CreateQueryDef("Lista de " _        & "empleados seleccionados por fecha de contratación")     qdf.SQL = "Select * from Empleados " _          & "Order by [Fecha Contratación]"     Exit Sub  cmdSQL_Error:     MsgBox "La consulta ya existe"  End Sub

b. Parameter

Un objeto Parameter representa un parámetro de un objeto QueryDef con parámetros.

Propiedades Name

Define o devuelve el nombre del parámetro.

Type

Define o devuelve el tipo de datos del parámetro.

Value

Define o devuelve el valor del parámetro.

Colecciones Properties Ejemplo Creación de una consulta con parámetros y presentación del número de parámetros. Private Sub cmdSQL_Click()     Dim dbs As Database     Dim qdf As QueryDef     Dim prm As Parameter       On Error GoTo cmdSQL_Error     Set dbs = CurrentDb     Set qdf = dbs.CreateQueryDef("Lista de los empleados" _         & " contratados en un periodo determinado")     qdf.SQL = "Select * from Empleados Where " _         & "[Fecha contratación] >= [Introduzca la fecha de inicio] " _         & " And [Fecha contratación] <= [Introduzca la fecha de fin] "     MsgBox qdf.Parameters.Count     Exit Sub  cmdSQL_Error:     MsgBox "La consulta ya existe"  End Sub

11. Los objetos Relation Un objeto Relation representa una relación entre los campos de dos objetos TableDef.

Propiedades Attributes

Indica  ciertas  características  de  la  relación  (uno  a  varios, integridad...).

ForeignTable

Define o devuelve el nombre de la tabla externa.

Name

Define o devuelve el nombre de la relación.

PartialReplica

Define  si  la  relación  debe  tenerse  en  cuenta  cuando  se  rellena unaRéplica parcial a partir de una Réplica completa.

Table

Define o devuelve el nombre de la TableDef o  del  QueryDef  de origen.

Métodos CreateField

Colecciones Fields, Properties Ejemplo

Crea un nuevo objeto Field.

Almacenamiento en una tabla de las distintas relaciones y sus propiedades. La tabla Relaciones contiene 3 campos  de  texto  (Rel_Origen,  Rel_  Externa,  Rel_Tiporel  y  3  campos  boleanos  (Rel_Integridad, Rel_Act_Cascada, Rel_Sup_Cascada). Dim dbs As DAO.Database  Dim rst As DAO.Recordset  Dim rel As DAO.Relation    ’  Creación del Recordset  ’  y eliminación de los registros existentes  Set dbs = CurrentDb  Set rst = dbs.OpenRecordset("Relaciones", dbOpenTable)  Do While Not rst.EOF     rst.Delete     rst.MoveNext  Loop    ’  Almacenamiento de las distintas relaciones del modelo  ’  relacional en la tabla Relaciones  For Each rel In dbs.Relaciones      rst.AddNew      rst("REL_ORIGEN") = rel.Table      rst("REL_EXTERNA") = rel.ForeignTable      If rel.Attributes And dbRelationUnique Then         rst("REL_TIPOREL") = "1 a 1"      Else         rst("REL_TIPOREL") = "1 a n"      End If      rst("REL_INTEGRIDAD") = IIf(rel.Attributes And _         dbRelationDontEnforce, False, True)      rst("REL_ACT_CASCADA") = IIf(rel.Attributes And _         dbRelationUpdateCascade, True, False)      rst("REL_SUP_CASCADA") = IIf(rel.Attributes And _         dbRelationDeleteCascade, True, False)      rst.Update  Next  rst.Close Visualización en Access de la tabla RELACIONES actualizada:

12. Los objetos Container y Document a. Container Un objeto Container representa el conjunto de las informaciones sobre una base de datos y sobre cada tipo de objetos que ésta contiene.

Propiedades AllPermissions

Devuelve  todos  los  permisos  que  se  aplican  a  la

propiedadUserName del objeto Container actual. Inherit

Indica  si  los  nuevos  objetos Document  heredarán  o  no,  un valor para la propiedad Permissions.

Name

Indica el nombre del container.

Owner

Indica el propietario del container.

Permissions

Define los permisos de un usuario o de un grupo de usuarios identificados  por  la  propiedad  UserName  del  objeto Container.

UserName

Define el nombre del usuario.

Ejemplo Muestra la lista de los nombres de todos los objetos Container de la base en la ventana Inmediato. Dim dbs As DAO.Database  Set dbs = CurrentDb  Dim ctn As Container    For Each ctn In dbs.Containers      Debug.Print ctn.Name  Next

b. Document Un objeto Document representa el conjunto de la información relacionada con un tipo de objeto (base de datos,  tabla,  consulta  o  relación  guardadas).  Cada  objeto  Container  dispone  de  una colecciónDocuments que contiene objetos Document.

Propiedades AllPermissions

Devuelve  todos  los  permisos  que  se  aplican  propiedadUserName actual del objeto Document.



la

Container

Devuelve  el  nombre  del  objeto  Container  al  que  pertenece elDocument.

DateCreated

Devuelve la fecha y la hora de creación de la tabla subyacente.

LastUpdated

Devuelve la fecha y la hora de la última modificación de la tabla subyacente.

Name

Devuelve el nombre del Document.

Owner

Devuelve el nombre del propietario del Document.

Permissions

Define  los  permisos  del  usuario  o  del  grupo  de  usuarios identificados  mediante  la  propiedad  UserName  del objetoDocument.

Properties

Lista  de  propiedades  (fecha  de  creación,  de  la  última actualización...) del objeto Document.

UserName

Define el nombre del usuario.

Colecciones Properties Ejemplo Muestra la lista de todos los formularios en la ventana Inmediato: Dim dbs As DAO.Database  Dim ctn As Container  Dim doc As Document    Set dbs = CurrentDb  For Each ctn In dbs.Containers      If ctn.Name = "Forms" Then         For Each doc In ctn.Documents             Debug.Print doc.Name         Next      End If  Next

13. Los objetos Group y User a. User Un objeto User representa una cuenta de usuario con sus permisos.

Propiedades Name

Define o devuelve el nombre de la cuenta de usuario.

PID

Devuelve el número de identificación personal de la cuenta de usuario.

PassWord

Devuelve la contraseña de la cuenta de usuario.

Métodos CreateGroup

Crea un nuevo objeto Group.

NewpassWord

Define una nueva contraseña para el usuario.

Colecciones Groups, Properties

b. Group Un objeto Group representa un grupo de usuarios que poseen los mismos permisos. 

Propiedades

Name

Define o devuelve el nombre del grupo de usuarios.

PID

Define el número personal de la cuenta de grupo.

Métodos CreateUser

Crea un nuevo objeto User.

Colecciones Users, Properties Ejemplo Para  cada  grupo  de  trabajo,  muestra  en  la  ventana  Inmediato  el  nombre  del  grupo  y  la  lista  de  sus usuarios. Dim wrk As Workspace  Dim usr As dao.User  Dim grp As dao.Group    Set wrk = DBEngine.Workspaces(0)  For Each grp In wrk.Groups     Debug.Print grp.Name     With grp        For Each usr In .Users           Debug.Print usr.Name        Next     End With  Next

14. El objeto Error Un objeto Error representa el detalle de un error de acceso a los datos.

Propiedades Description

Devuelve el texto del error.

HelpContext

Proporciona un identificador de contexto de ayuda en forma de variable de cadena, correspondiente a un tema de un archivo de ayuda Microsoft Windows.

HelpFile

Indica  la  ruta  de  acceso  completa  al  archivo  de  ayuda correspondiente.

Number

Devuelve el número del error.

Source

Proporciona  el  nombre  del  objeto  o  de  la  aplicación  que  ha generado el error.

Ejemplo Desencadena intencionadamente un error y muestra todas las propiedades del objeto Error. Private Sub cmdError_Click()    On Error GoTo Gest_Error     ’ Desencadena intencionadamente un error     ’ El fichero Presupuesto1.accdb no existe en el Archivo C:\Presupuesto     DBEngine.Workspaces(0).OpenDatabase _     ("C:\Presupuesto\presupuesto1.accdb")     Exit Sub      

Gest_Error:     Dim strError As String     Dim errLoop As Variant    ’ Recorre los elementos de la colección Errors  ’ Muestra un mensaje con la descripción del error  For Each errLoop In Errors     With errLoop        strError = _           "Error #" & .Number & vbCr        strError = strError & _           " " & .Description & vbCr        strError = strError & _           "(Origen: " & .Source & ")" & vbCr        strError = strError & _           "Pulse F1 para ver " & _           "el tema " & .HelpContext & vbCr        strError = strError & _           "en el archivo " & .HelpFile & "."     End With     MsgBox strError  Next    End Sub El mensaje que aparece es el siguiente:

15. Los objetos Property Un objeto Property representa una propiedad de un objeto.

Propiedades Inherited

Indica si la propiedad es heredada.

Name

Define el nombre de la propiedad.

Type

Define o devuelve el tipo de la propiedad.

Value

Define o devuelve el valor de la propiedad.

Ejemplo Presentación del nombre y del valor de cada propiedad de un objeto Recordset en la ventana Inmediato. Dim dbs As DAO.Database 

Dim rst As DAO.Recordset  Dim prp As DAO.Property    Set dbs = CurrentDb  Set rst = dbs.OpenRecordset("Clientes")  ’   Recorre las propiedades  For Each prp In rst.Properties      On Error Resume Next      Debug.Print prp.Name & " : " & prp.Value  Next

El modelo de acceso a datos ADO 1. Presentación La biblioteca de objetos ADO (ActiveX  Data  Objects)  le  permite  escribir  una  aplicación  que  accede  a  datos situados en un servidor de bases de datos y manejar éstas mediante un proveedor OLE DB. ADO tiene la ventaja de ser fácil de usar, con buen rendimiento y usando poca memoria y espacio de disco. ADO ofrece las funcionalidades básicas que permiten crear aplicaciones cliente/servidor y aplicaciones Web. Para  poder  utilizar  la  biblioteca  de  objetos  ADO,  es  necesario  seleccionar  la  referencia  Microsoft  ActiveX Data Objects 6.0 Library en la lista de referencias a las bibliotecas de objetos. Si esta referencia no está disponible,  debe  seleccionar  el  archivo  MSADO15.dll  mediante  el  botón  de  comando  Examinar. Generalmente,  este  archivo  está  ubicado  en  el  directorio  C:\Archivos  de  programa\Common Files\System\ADO. Igualmente puede utilizar las extensiones ADO seleccionando la referencia Microsoft ADO Ext 6.0 for DLL and Security (archivo  MSADOX.DLL).  Estas  extensiones  le  permiten  acceder  a  objetos  complementarios (catalgo, users, views…) del modelo ADO. El  archivo  de  ayuda  ADO210.chm  ubicado  en  el  directorio  C:\Archivos  de  Programa\Common Files\MicrosoftShared\Office  15\1036,  le  permite  obtener  información  detallada  sobre  la  utilización  de  los modelos ADO.

2. ADO y OLE DB OLE DB es una tecnología que permite un acceso uniforme a los datos almacenados en diversas fuentes de información:  bases  de  datos  relacionales  o  no  relacionales,  correo,  sistemas  de  archivos…  Prácticamente todos los datos de la empresa son accesibles mediante OLE DB. ADO (ActiveX  Data  Objects)  es  la  interfaz  de  programación  utilizada  para  acceder  a  los  datos  de  todos  los proveedores de datos OLE DB. Arquitectura tecnológica

Los proveedores de datos o Providers son  controladores  que  permiten  comunicar  con  los  orígenes de datos.

3. Jerarquía de los objetos ADO

4. Modelo de base de programación ADO ADO le permite ejecutar la siguiente secuencia de acciones: establecer una conexión a una base de datos OLE DB o ODBC por medio del objeto Connection, crear un comando que permita enviar una consulta SQL al servidor utilizando el objeto Command, ejecutar el comando. Si el comando devuelve filas, almacenarlas en un objeto Recordset, utilizar los datos del objeto Recordset: ordenar, filtrar, modificar, eliminar los registros, actualizar  los  datos:  validar  los  eventuales  cambios  del  objeto  Recordset,  incorporar  las actualizaciones en una transacción, si se ha utilizado una transacción: aceptar o desechar las actualizaciones aportadas durante ésta. Ejemplo Dim cnn As New ADODB.Connection  Dim cmd As New ADODB.Command  Dim rs As New ADODB.Recordset      ’ Etapa 1: establecer una conexión a un origen de datos  ’ SQL Server mediante la tecnología OLEDB  cnn.Open "Provider=SQLOLEDB.1;Data Source=SRV; _         & "Initial Catalog=Presupuesto;" _         & "Integrated Security=SSPI;Persist Security Info=False;"      ’ Etapa 2: crear un comando  Set cmd.ActiveConnection = cnn  cmd.CommandText = "SELECT * FROM Clientes"      ’   Etapa 3: ejecutar el comando  rs.CursorLocation = adUseClient  rs.Open cmd, , adOpenStatic, adLockBatchOptimistic      ’   Etapa 4 : manipular los datos  rs.Filter = "CLI_CIUDAD LIKE ’Barcelona’"  Do While Not rs.EOF     rs("CLI_PAÍS") = "E"     rs.MoveNext  Loop      ’   Etapa 5: actualizar los datos modificados  cnn.BeginTrans  rs.UpdateBatch     ’   Etapa 6: terminar la actualización de la base SQL  If MsgBox("¿Desea confirmar las actualizaciones?", ​ _      vbYesNo) = vbYes Then     cnn.CommitTrans  Else     cnn.RollbackTrans  End If

5. Descripción de los objetos ADO Connection

Representa una conexión con un origen de datos.

Command

Define un comando específico que debe ejecutarse sobre un origen de datos.

Recordset

Representa el conjunto de registros completo de una tabla de bases de datos o los resultados de un comando (ej: resultados de una consulta SQL).

Record

Funciona esencialmente como un objeto Recordset de una sola línea. El origen de los datos en un objeto Record puede ser un comando que devuelve  una  línea  de  datos  a  partir  del  servidor.  La  utilización  de objetos Record en lugar de Recordset para recibir los resultados de una consulta  que  devuelve  una  sola  línea  de  datos  elimina  el  exceso  de tratamiento  vinculado  a  la  instanciación  del  objeto  Recordset,  que  es más complejo.

Stream

Proporciona  el  medio  para  leer,  escribir  y  gestionar  un  flujo  de  bytes formado por texto o datos binarios.

6. Las colecciones ADO Parameters

Colección de todos los objetos Parameter de un objeto Command. El objeto Parameter representa un parámetro o argumento asociado a un objeto  Command  basado  en  una  consulta  con  parámetros  o  un procedimiento almacenado con parámetros.

Properties

Colección de todos los objetos Property para  un  objeto  determinado (Connection,  Command,  Recordset).  El objeto Propertyrepresenta  una  característica  dinámica  de  un  objeto ADO definido por el usuario.

Errors

Colección de todos los objetos Error creados en respuesta a un error único  vinculado  al  proveedor  OLE  DB.  El  objeto  Error  contiene informaciones relativas a un error de acceso a los datos.

Fields

Colección de todos los objetos Field correspondientes  a  una  columna (o campo) de un objeto Recordset.

7. Los objetos Connection Métodos BeginTrans

Empieza una nueva transacción.

Cancel

Interrumpe y anula la ejecución de una consulta iniciada en modo asíncrono mediante los métodos Execute u Open.

Close

Cierra  una  conexión  abierta,  así  como  todos  los  objetos  que dependen de ésta.

CommitTrans

Guarda los cambios efectuados a los datos y detiene la transacción en curso.

Execute

Ejecuta  la  consulta,  la  instrucción  SQL,  el  procedimiento almacenado o el texto propio del proveedor OLE DB.

Open

Abre  una  conexión  a  un  origen  de  datos  para  poder  ejecutar comandos.

OpenSchema

Obtiene  informaciones  procedentes  del  proveedor  OLE  DB, relativas al esquema de la base de datos.

RollbackTrans

Anula los cambios realizados a los datos durante la transacción en curso y detiene esta última.

Propiedades Attributes

Define  o  devuelve  una  o  varias  características  de  un objetoConnection. El valor por defecto es cero.

CommandTimeout

Indica  el  intervalo  de  espera,  en  segundos,  que  debe respetarse  al  intentar  la  ejecución  de  un  comando,  antes  de interrumpir el intento y generar un mensaje de error. El valor por defecto es 30.

ConnectionString

Define o devuelve la información utilizada para establecer una conexión con el origen de datos.

ConnectionTimeout

Indica  el  intervalo  de  tiempo,  en  segundos,  que  debe respetarse  al  intentar  una  conexión,  antes  de  abortarla  y generar un mensaje de error. El valor por defecto es 15.

CursorLocation

Define  o  devuelve  el  tipo  de  cursor  que  debe  emplearse  por defecto para esta conexión (cursor del lado cliente o cursor del lado servidor).

DefaultDatabase

Indica la base de datos por defecto de un objeto Connection.

IsolationLevel

Indica el nivel de aislamiento de un objeto Connection.

Mode

Indica  los  permisos  de  modificación  de  datos  de  un objetoConnection.

Provider

Indica el nombre del proveedor OLE DB del objetoConnection.

State

Indica  si  el  objeto  Connection  está  abierto  o  cerrado.  Sólo lectura.

Version

Indica el número de versión ADO. Sólo lectura.

Ejemplo Creación de una referencia sobre la base de datos actual. Dim cncPresupuesto as ADODB.Connection  Set cncPresupuesto = CurrentProject.Connection Apertura de una base de datos externa. Dim cncPresupuesto as ADODB.Connection  cncPresupuesto.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _                & "Data Source = C:\Presupuesto\Presupuesto.accdb"; Utilización  de  los  métodos  CommitTrans  y  RollbackTrans  para  confirmar  o  anular  la  actualización  de registros. Dim cnc As ADODB.Connection  Dim strSQL As String  Dim strMessage As String    ’   Abre la conexión.  Set cnc = CurrentProject.Connection    ’   Inicio de la transacción  cnc.BeginTrans    ’   Consultas SQL de actualización  strSQL = "UPDATE CLIENTES SET CLI_PAIS = ’España’" _         & "WHERE CLI_CIUDAD = ’Madrid’"  cnc.Execute strSQL    strSQL = "UPDATE CLIENTES SET CLI_PAIS = ’Francia’" _         & "WHERE CLI_CIUDAD = ’París’"  cnc.Execute strSQL    ’   Pregunta al usuario si desea validar las actualizaciones  If MsgBox("¿Desea confirmar la actualización de los países?", vbYesNo) _ 

   = vbYes Then           ’  Guarda los cambios     cnc.CommitTrans  Else        ’   Anula los cambios     cnc.RollbackTrans  End If

8. Los objetos Command Métodos Cancel

Interrumpe y cancela la ejecución de una consulta iniciada en modo asíncrono mediante el método Execute.

CreateParameter

Crea  un  nuevo  objeto  Parameter  y  especifica  sus propiedades.

Execute

Ejecuta  la  consulta,  la  instrucción  SQL  o  el  procedimiento almacenado  especificado  mediante  la propiedadCommandText.

Propiedades ActiveConnection

Indica el objeto Connection al que está asociado el comando.

CommandText

Contiene el texto del comando que debe enviarse al proveedor OLE DB.

CommandTimeout

Indica  el  intervalo  de  tiempo  (en  segundos)  que  debe respetarse  al  intentar  la  ejecución  del  comando,  antes  de interrumpir el intento y generar un mensaje de error. El valor por defecto es 30.

CommandType

Indica el tipo del objeto Command.

Name

Indica el nombre del objeto Command.

Prepared

Indica  si  es  necesario  guardar  una  versión  compilada  del comando en el servidor antes de la ejecución.

State

Indica si el objeto Command está  abierto  o  cerrado.  En  sólo lectura.

Ejemplo Utilización del objeto Command para crear un conjunto de registros. Dim cnc As New ADODB.Connection  Dim cmd As New ADODB.Command  Dim rst As New ADODB.Recordset    ’  Abre la conexión  cnc.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _      & "Data Source = C:\Presupuesto\Presupuesto.accdb;PersistSecurity  Info=False"    ’  Ejecuta el comando Select  Set cmd.ActiveConnection = cnc  cmd.CommandType = adCmdText  cmd.CommandText = "SELECT * FROM CLIENTES WHERE" _               & " CLI_CIUDAD = ’Madrid’"    Set rst = cmd.Execute  

  ’  Muestra el nombre de la empresa  ’  en la ventana Inmediato  Do While Not rst.EOF     Debug.Print rst("CLI_EMPRESA")     rst.MoveNext  Loop  rst.Close  cnc.Close

9. Los objetos Recordset Métodos AddNew

Crea un nuevo registro para un objeto Recordset que  pueda actualizarse.

Cancel

Cancela  la  ejecución  de  una  operación  Open  asíncrona  en espera.

CancelBatch

Cancela una actualización por lotes en espera.

CancelUpdate

Cancela todas las modificaciones aportadas al registro actual o a un nuevo registro antes de llamar al método Update.

Clone

Crea  un  objeto  Recordset  duplicado  a  partir  de  un objetoRecordset existente.

Close

Cierra el objeto Recordset abierto, así como todos los objetos que dependen de éste.

CompareBookmarks

Compara  dos  marcadores  y  devuelve  un  valor  que  indica  sus posiciones relativas.

Delete

Elimina el registro actual o un grupo de registros.

Find

Busca  en  un  objeto  Recordset  el  registro  correspondiente  a criterios específicos.

GetRows

Extrae varios registros de un objeto Recordset y los coloca en una matriz.

GetString

Devuelve un objeto Recordset en forma de cadena.

Move

Desplaza  la  posición  objetoRecordset.

MoveFirst

Desplaza la posición del registro actual hasta el primer registro del objeto Recordset.

MoveLast

Desplaza la posición del registro actual hasta el último registro del objeto Recordset.

MoveNext

Desplaza  la  posición  del  registro  actual  hasta  el  registro siguiente del objeto Recordset.

MovePrevious

Desplaza  la  posición  del  registro  actual  hasta  el  registro anterior del objeto Recordset.

NextRecordset

Devuelve el conjunto de registros siguiente en el caso de que un comando conlleve varias consultas de selección.

Open

Abre un cursor que representa los registros de una tabla o los resultados de una consulta.

Requery

Actualiza  los  datos  de  un  objeto  Recordset  volviendo  a ejecutar la consulta en la que se basa el objeto.

Resync

Actualiza los datos del objeto Recordset en curso a partir de la base de datos subyacente.

del 

registro 

actual 

en 

un

Save

Guarda el objeto Recordset en un archivo.

Seek

Busca  en  el  índice  de  un  objeto  Recordset  un  registro correspondiente a un valor y reemplaza el registro actual por el registro encontrado.

Supports

Determina  si  un  objeto  Recordset  soporta  un  tipo  de funcionalidad particular.

Update

Guarda  los  cambios  aportados  al  registro  actual  del objetoRecordset.

UpdateBatch

Guarda  en  el  disco  todas  las  actualizaciones  por  lotes  en espera.

Propiedades AbsolutePage

Indica la página del registro actual.

AbsolutePosition

Indica  la  posición  ordinal  del  registro  actual  dentro  de  un objeto Recordset.

ActiveCommand

Indica  el  objeto  Command  que  ha  objeto Recordsetcorrespondiente. Sólo lectura.

ActiveConnection

Indica  a  qué  objetoRecordset.

BOF

Indica  si  el  puntero  de  registro  está  posicionado  antes  del primer registro del objeto Recordset. Sólo lectura.

Bookmark

Devuelve  un  marcador  que  identifica  de  manera  única  el registro  actual  en  el  objeto  Recordset  o  desplaza  el  registro actual a un registro identificado por un marcador válido.

CacheSize

Indica  el  número  de  registros  objeto Recordsetalmacenado en memoria caché.

CursorLocation

Define  o  devuelve  el  tipo  de  cursor  por  defecto  para  esta conexión (cursor lado cliente o cursor lado servidor).

CursorType

Indica el tipo de cursor utilizado para este objeto Recordset.

DataMember

Indica el nombre del miembro de datos que debe extraerse del objeto definido por la propiedad DataSource. Sólo lectura.

DataSource

Indica  que  un  objeto  que  contiene  datos  debe  representarse como objeto Recordset. Sólo lectura.

EditMode

Indica  el  estado  de  modificación  del  registro  actual.  Sólo lectura.

EOF

Indica  si  el  puntero  de  registro  está  posicionado  después  del último registro en el objeto Recordset. Sólo lectura.

Filter

Define un filtro de datos en el Recordset.

Index

Indica el nombre del índice actual para el Recordset.

LockType

Indica  el  tipo  de  bloqueo  de  los  registros  durante  las modificaciones.

MarshalOptions

Indica qué registros se devuelven al servidor.

MaxRecords

Indica el número máximo de registros que se devuelven a un objeto  Recordset  desde  una  misma  consulta.  El  valor  por defecto es cero (no hay límite).

PageCount

Indica  el  número  de  páginas  de  datos  contenidas  en  el

objeto 

Connection 

creado 

el

pertenece 

el

de 

un

objetoRecordset. Sólo lectura. PageSize

Indica  el  número  de  registros  contenidos  en  una  página delRecordset.

Properties

Referencia  a  la  Colección  de  los  objetos  Property  del objetoRecordset actual.

RecordCount

Indica  el  número  de  registros  en  el  objeto  Recordset.  Sólo lectura.

Sort

Especifica uno o varios nombres de campos según los cuales se ordena  el  objeto  Recordset,  y  determina  el  criterio  de ordenación de cada campo.

Source

Indica el origen de los datos de un objeto Recordset.

State

Indica  el  estado  del  Recordset:  abierto,  cerrado  u  operación asíncrona en curso. Sólo lectura.

Status

Indica  el  estado  del  registro  actual  correspondiente  a  las actualizaciones  por  lotes  u  otras  operaciones  globales.  Sólo lectura.

StayInSync

Indica,  en  un  objeto  Recordset  jerárquico,  si  la  fila  principal debe  cambiar  cuando  cambia  el  conjunto  de  los  registros secundarios subyacentes. Sólo lectura.

Ejemplo Transformación en mayúsculas de los caracteres del campo Cli_Empresa en la tabla Clientes. Dim cnc As New ADODB.Connection  Dim rstCli As New ADODB.Recordset    ’ Creación del Recordset  Set cnc = CurrentProject.Connection  rstCli.Open "Select from Clientes", cnc, _            adOpenKeyset, adLockOptimistic     ’ Recorrido de los registros  With rstCli     Do Until .EOF        rstCli("Cli_Empresa") = _                  UCase(rstCli("Cli_Empresa"))       ’ Actualización       .Update       ’ Registro siguiente       .MoveNext     Loop  End With  rstCli.Close  cnc.Close Utilización del método Seek: búsqueda de un cliente a partir de su código. Dim cnc As New ADODB.Connection  Dim rstCli As New ADODB.Recordset  Dim strCodigoCli As String    ’   Creación del Recordset  Set cnc = CurrentProject.Connection  rstCli.Open "Clientes", cnc, adOpenKeyset, _         adLockReadOnly, adCmdTableDirect  With rstCli     ’   Entrada del código cliente     strCodigoCli = _     InputBox("Introduzca el código cliente") 

   ’   Índice actual: clave primaria     .Index = "PrimaryKey"     ’   Búsqueda     .Seek strCodigoCli, adSeekFirstEQ     ’   Registro no encontrado     If .EOF Then        MsgBox "Cliente no encontrado"     Else     ’  Registro encontrado        MsgBox "Empresa: " & rstCli("Cli_Empresa")     End If  End With  rstCli.Close  cnc.Close Utilización  del  método  Find:  búsqueda  de  los  clientes  cuyo  nombre  de  Empresa  empiece  por  un  valor determinado. Dim cnc As New ADODB.Connection  Dim rstCli As New ADODB.Recordset  Dim strEmp As String  Dim strCrit As String  Dim bkm As Variant    ’   Creación del Recordset  Set cnc = CurrentProject.Connection  rstCli.Open "Clientes", cnc, adOpenKeyset, _         adLockReadOnly, adCmdTableDirect  With rstCli     ’   Entrada del código cliente     strEmp = InputBox("Introduzca las primeras "_            & "letras de la Empresa")     ’   Búsqueda     strCrit = "Cli_Empresa Like ’" & strEmp & "%’"     .Find strCrit, , adSearchForward        ’   Registro no encontrado     If .EOF Then        MsgBox "Cliente no encontrado"     Else        ’  Si encuentra: búsqueda de los siguientes        Do While Not .EOF           MsgBox rstCli("Cli_Empresa")           ’   Posición actual           bkm = .Bookmark           .Find strCrit, 1, adSearchForward, bkm        Loop     End If  End With  rstCli.Close  cnc.close

10. La colección Fields Métodos Append

Agrega un objeto Field a una colección Fields.

Delete

Elimina un objeto Field de la colección Fields.

Refresh

Actualiza los objetos Field en la colección Fields.

11. Los objetos Field Métodos AppendChunk

Agrega  datos  a  un  objeto  Field  de  tipo  binario  o  de  gran

tamaño. GetChunk

Devuelve todo o parte del contenido de un objeto Field de tipo binario o de gran tamaño.

Propiedades ActualSize

Indica la longitud del valor de un campo. Sólo lectura.

Attributes

Indica una o varias características de un objeto Field.

DefinedSize

Indica el tamaño del objeto Field. Sólo lectura.

Name

Indica el nombre del objeto Field.

NumericScale

Indica la escala de los valores numéricos del objeto Field. Sólo lectura.

OriginalValue

Indica  el  valor  del  objeto Field antes  de  la  modificación.  Sólo lectura.

Precision

Indica el grado de precisión de los valores de tipo numérico en el objeto Field. Sólo lectura.

Properties

Contiene todos los objetos Property de un objeto Field.

Type

Indica el tipo de datos del objeto Field.

UnderlyingValue

Indica el valor actual del objeto Field en la base de datos. Sólo lectura.

Value

Indica el valor del objeto Field.

12. La colección Parameters Métodos Append

Agrega un objeto Parameter a la colección Parameters.

Delete

Elimina un objeto Parameter de la colección Parameters.

Refresh

Actualiza los objetos Parameter en la colección Parameters.

Ejemplo Muestra la lista de todos los campos (nombre y tipo) de la tabla Clientes en la ventana Inmediato. Dim cnc As New ADODB.Connection  Dim rstCli As New ADODB.Recordset  Dim fld As ADODB.Field    ’   Creación del Recordset  Set cnc = CurrentProject.Connection  rstCli.Open "Empleados", cnc, adOpenKeyset, adLockReadOnly, _  adCmdTableDirect  For Each fld In rstCli.Fields     Debug.Print fld.Name & " " & fld.Type  Next  rstCli.close

13. Los objetos Parameter Métodos AppendChunk

Agrega datos a un objeto Parameter de tipo binario o texto de gran tamaño.

Propiedades Attributes

Indica una o varias características de un objeto Parameter.

Direction

Indica si el objeto Parameter corresponde a un parámetro de entrada,  de  salida,  o  ambos,  o  si  el  parámetro  es  el  tipo  de retorno de un procedimiento almacenado.

Name

Indica el nombre del objeto Parameter.

NumericScale

Indica  la  escala  objetoParameter.

Precision

Indica el grado de precisión de los valores de tipo Numeric del objeto Parameter.

Properties

Contiene todos los objetos Property de un objeto Parameter.

Size

Indica  el  tamaño  máximo,  en  bytes  o  en  caracteres,  de  un objeto Parameter.

Type

Indica el tipo de datos del objeto Parameter.

Value

Indica el valor atribuido al objeto Parameter.

de 

los 

valores 

numéricos 

del

14. La colección Properties Métodos Refresh

Actualiza  los  objetos  Property  en  la  colección  Properties  a partir de las informaciones del proveedor.

15. Los objetos Property Propiedades Attributes

Indica una o varias características de un objeto Property. 

Name

Indica el nombre del objeto Property. En sólo lectura.

Type

Indica el tipo de datos del objeto Property.

Value

Indica el valor del objeto Property.

16. La colección Errors Métodos Clear

Elimina el conjunto de los objetos Error de la colección Errors.

Refresh

Actualiza  los  objetos  Error  a  partir  de  las  informaciones  del proveedor OLE DB.

Propiedades Count

Indica el número de objetos Error de  la  colección  Errors.  En sólo lectura.

Item

Permite la indexación de la colección Errors para referenciar a un objeto Error específico. Sólo lectura.

17. Los objetos Error

Propiedades Description

Devuelve  la  cadena  descriptiva  asociada  al  objeto  Error.  Sólo lectura.

HelpContext

Indica  el  ContextID  del  archivo  de  ayuda  asociado  al objetoError. Sólo lectura.

HelpFile

Indica el nombre del archivo de ayuda asociado al objetoError. Sólo lectura.

NativeError

Indica  el  código  de  error  específico  del  proveedor  asociado  al objeto Error. Sólo lectura.

Number

Indica  el  número  que  identifica  de  manera  única  el  error  del objeto Error. Sólo lectura.

Source

Indica  el  nombre  del  objeto  o  de  la  aplicación  que  originó  el error. Sólo lectura.

SQLState

Indica  el  valor  devuelto  por  el  proveedor  OLE  DB.  Cadena  de cinco caracteres conforme a la norma SQL ANSI. Sólo lectura.

Presentación El  lenguaje  SQL  (Structured  Query  Langage  o  lenguaje  de  consulta  estructurado)  es  un  lenguaje  de consulta y de gestión de bases de datos relacionales. Access  2013  utiliza  SQL  como  lenguaje  de  consulta.  Cuando  se  crea  una  consulta  en  la  vista  Diseño  de consulta, Access construye, como tarea en segundo plano, las instrucciones equivalentes en SQL. De hecho, la mayoría de las propiedades de las consultas en la vista Diseño de consulta tienen cláusulas equivalentes y opciones accesibles en lenguaje SQL. Es posible mostrar o modificar la instrucción SQL correspondiente a una consulta pasando a la vista SQL. Ejemplo   Abra una consulta existente en la vista Diseño.

  A continuación, haga clic sobre la opción Vista SQL del icono Ver.

Obtendrá la instrucción SQL correspondiente a su consulta.

Esta operación es muy interesante, especialmente si no está habituado al lenguaje SQL: puede crear sus consultas en Access y recuperar la instrucción SQL generada para incluirla en su código VBA.

Ciertas consultas SQL, llamadas consultas específicas SQL, no pueden ser creadas en la cuadrícula de diseño de consultas, sino que deben ser entradas directamente en la vista SQL. Se trata: de las "consultas paso a través" que le permiten trabajar directamente con las tablas del servidor, las "consultas de definición de datos" que le permiten crear, eliminar o modificar la estructura de las tablas, las "consultas de combinación  o  de  unión" que le permiten agrupar los campos de dos tablas (o más)  en  un  mismo  campo  resultado  de  la  consulta.  Estas  consultas  son  muy  útiles  para  fusionar registros procedentes de tablas distintas.

Lenguaje SQL y VBA Las  consultas  SQL  se  integran  perfectamente  en  VBA  y  pueden  emplearse  a  partir  de  los  métodos  de distintos objetos: método OpenRecordset de los objetos DataBase y Connection, método CreateQueryDef de los objetos DataBase y Connection, método Execute de los objetos Command y Connection, etc. Las consultas SQL se utilizan frecuentemente también en los formularios: propiedad RecordSource de un formulario o de un informe, propiedad RowSource de una lista desplegable, etc. La mayoría de estas propiedades pueden modificarse utilizando código VBA. Las ventajas de la utilización de instrucciones SQL en VBA son las siguientes: Velocidad de ejecución: una instrucción Select es más rápida que el recorrido secuencial de una tabla. Mejor rendimiento: en modo cliente/servidor, las consultas son compiladas por el SGBD que optimiza su rendimiento. Mantenimiento simplificado: el código de las instrucciones SQL es más corto y por tanto más legible que el equivalente en VBA. Estandarización: el lenguaje SQL es el estándar de consulta de las bases de datos relacionales.

Descripción del lenguaje SQL 1. La instrucción SELECT SELECT  es  la  instrucción  SQL  más  empleada:  corresponde  a  la  consulta  de  selección  en  Access.  Permite extraer campos de un conjunto de registros que responden a ciertos criterios. Sintaxis SELECT [ALL | DISTINCT] <lista de campos>  FROM <lista de tablas>  [WHERE... ]  [GROUP BY...]   [HAVING... ]  [ORDER BY... ]

All (valor predeterminado)

Distinct

<lista de campos>

Se tienen en cuenta todos los registros que respondan a los criterios. Se  omiten  los  registros  cuyos  campos  seleccionados contienen datos duplicados. Lista  de  los  campos  seleccionados,  separados  por comas,  respetando  la  sintaxis  siguiente:  *  |  tabla.*  | [tabla.]campo1  [AS  alias1]  [,  [tabla.]campo2  [AS alias2] [, ...]]

*

Indica  que  se  seleccionan  todos  los  campos  de  la(s) tabla(s) especificada(s).

alias1, alias2

Indican  los  nombres  que  deben  utilizarse  como encabezados  de  columna  en  lugar  de  los  nombres  de columna originales de la tabla.

<lista de tablas>

Nombre  de  la  o  de  las  tablas  que  contienen  los  datos que desea extraer. Si la consulta utiliza varias tablas, el modo de combinación también debe especificarse en la cláusula FROM.

Ejemplos ‐ SELECT * FROM Productos  ‐ SELECT Productos.* FROM Productos  ‐ SELECT Prod_ref, Prod_desc, Prod_precio, Prod_iva     FROM Productos  ‐ SELECT Prod_ref As Reference, Prod_desc As Descripción,  Prod_Precio as Precio, Prod_iva as Iva From Productos

2. La cláusula FROM La cláusula FROM especifica las tablas o las consultas de donde se extraen los datos. Sintaxis FROM tabla1 [ LEFT | RIGHT | INNER ] JOIN tabla2   ON tabla1.campo1  tabla2.campo2

[ LEFT | RIGHT |INNER ]

Estos operadores permiten definir el tipo de combinación entre las tablas.

LEFT JOIN

Utilice  una  operación  LEFT  JOIN  para  crear  una  combinación

externa  izquierda.  El  resultado  de  la  combinación  externa izquierda incluye todos los registros de la primera tabla (la de la izquierda:  )  incluso  para  los  que  no  existe  un  valor correspondiente  en  la  segunda  tabla  (la  de  la  derecha: ).

RIGHT JOIN

Utilice  una  operación  RIGHT  JOIN  para  crear  una  combinación externa  derecha.  El  resultado  incluye  todos  los  registros  de  la segunda  tabla  (la  de  la  derecha:  )  incluso  para  los que no existe un valor correspondiente en la primera tabla (la de la izquierda: ).

INNER JOIN

Utilice  INNER  JOIN  para  crear  una  combinación  que  incluya solamente  los  registros  cuyos  datos  de  los  campos  vinculados son idénticos.



Utilice todos los operadores de comparación relacionales, como: =, <, >, <=, >=, <> (diferente de). El operador = es el más utilizado frecuentemente.

Ejemplo Lista de los pedidos con el nombre y el número de teléfono del mensajero. Primer ejemplo Sólo se seleccionan los pedidos a los que se les ha asignado un mensajero. SELECT Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaEnvío,  Mensajeros.Mens_Nombre, Mensajeros.Mens_Teléfono  FROM Pedidos INNER JOIN Mensajeros ON Pedidos.Pdo_NumMens =  Mensajeros.Mens_NumMens Segundo ejemplo Se seleccionan todos los pedidos. SELECT Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaEnvío,  Mensajeros.Mens_Nombre,Mensajeros.Mens_Teléfono  FROM Pedidos LEFT JOIN Mensajeros ON Pedidos.Pdo_NumMens =   Mensajeros.Mens_NumMens

3. La cláusula WHERE La cláusula WHERE permite filtrar los registros a partir de criterios. Las condiciones de la cláusula WHERE se expresan mediante los operadores siguientes:  operadores de comparación: =, <, >, <=, >=, <> (diferente de) Is [Not] Null, [Not] In, Between. operadores lógicos: And, Or, Not. Ejemplos SELECT * FROM Productos WHERE [Prod_Precio] = 10000  SELECT * FROM Productos WHERE [Prod_Precio]          BETWEEN 2000 AND 4000  SELECT * FROM Clientes WHERE [Cli_país] IN (’Francia’,’Italia’,’España’)

4. La cláusula GROUP BY La cláusula GROUP BY corresponde a los "Totales" de las consultas Access (llamados Agrupamientos en las versiones antiguas). Permite agrupar datos por uno o varios campos. Se utiliza principalmente para efectuar funciones de agregado SQL, como Sum (suma), Count (cuenta), Avg (promedio), etc.

Ejemplos Esta consulta devuelve el número de pedidos pasados por cliente. SELECT Clientes.Cli_Empresa, Count (Pedidos.Pdo_Numpdo) As nb_Pdos  FROM Clientes INNER JOIN Pedidos ON Clientes.Cli_NumCli=  Pedidos.Pdo_CodCli  GROUP BY Clientes.Cli_Empresa Esta consulta devuelve el importe total de cada uno de los pedidos. SELECT Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaPdo,  Sum ([Pdo_Precio]*[Pdo_Ctd]) As TotalPdo  FROM Pedidos INNER JOIN [Detalle pedidos] ON Pedidos.Pdo_Numpdo =  [Detalle pedidos].Pdo_Numpdo  GROUP BY Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaPdo

5. La cláusula HAVING La  cláusula  HAVING  especifica  los  registros  agrupados  que  deben  mostrarse  en  una  instrucción  SELECT dotada  de  una  cláusula  GROUP  BY.  Una  vez  se  ha  efectuado  el  agrupamiento  siguiendo  la  lista  de  los campos  del  GROUP  BY,  se  conservan  solamente  los  registros  que  cumplen  la  condición  especificada  en  la cláusula HAVING. Ejemplo Esta consulta extrae los pedidos cuyo importe total es superior a 10.000 €. SELECT Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaPdo,  Sum ([Pdo_Precio]*[Pdo_Ctd]) As TotalPdo  FROM Pedidos INNER JOIN [Detalle pedidos] ON   Pedidos.Pdo_Numpdo = [Detalle pedidos].Pdo_Numpdo  GROUP BY Pedidos.Pdo_Numpdo, Pedidos.Pdo_FechaPdo  HAVING (Sum([Pdo_Precio]*[Pdo_Ctd])>10000)

6. La cláusula ORDER BY La  cláusula  ORDER  BY  ordena,  de  forma  ascendente  o  descendente,  los  registros  resultantes  de  una consulta en función del o de los campos especificados. Sintaxis [ORDER BY campo1 [ASC | DESC ][, campo2 [ASC | DESC ]][, ...]]]

ASC

Orden ascendente.

DESC

Orden descendente.

Ejemplo La consulta siguiente devuelve el número de pedidos pasados por cliente, ordenados por orden descendente del número de pedidos. SELECT Clientes.Cli_Empresa, Count (Pedidos.Pdo_Numpdo) As nb_Pdos  FROM Clientes INNER JOIN Pedidos ON  Clientes.Cli_NumCli=Pedidos.Pdo_CodCli  GROUP BY Clientes.Cli_Empresa  ORDER BY Count(Pedidos.Pdo_NumPdo) DESC

7. La instrucción UPDATE La instrucción UPDATE corresponde a una consulta de actualización que modifica los valores de los campos en la tabla especificada, para los registros que responden al criterio especificado (opcional).

Sintaxis UPDATE tabla  SET campo1 = nuevovalor1[, campo2 = nuevovalor2]...  [WHERE criterio] Si no se especifica ninguna cláusula Where, se actualizarán todos los registros.

Ejemplo Esta consulta modifica el código de país de todos los registros de la tabla Clientes. UPDATE Clientes SET Clientes.Cli_país = ’E’ La consulta siguiente modifica, en la tabla Clientes, el código de país de los registros cuyos clientes tengan por ciudad ’Valencia’. UPDATE Clientes SET Clientes.Cli_País = ’E’     WHERE Clientes.Cli_ciudad=’Valencia’

8. La instrucción DELETE La  instrucción  DELETE  corresponde  a  una  consulta  de  Eliminación  que  elimina  registros  en  la  tabla mencionada en la cláusula FROM, según los criterios proporcionados (opcionales). Sintaxis DELETE FROM tabla  [WHERE criterios] Si no se especifica ninguna cláusula Where, se eliminan todos los registros.

Ejemplo Esta consulta elimina los pedidos anteriores a 2010. DELETE FROM Pedidos  WHERE ((Pedidos.Pdo_FechaPdo) < #1/1/2010#)

9. La instrucción INSERT INTO La instrucción SQL INSERT INTO corresponde a una consulta de datos anexados que agrega registros a una tabla. Sintaxis Consulta de datos anexados con un solo registro: INSERT INTO  [(campo1[, campo2[, ...]])]  VALUES (valor1[, valor[, ...]]) La consulta debe contener el mismo número de valores (del mismo tipo y en el mismo orden) que de columnas a rellenar.

Consulta de datos anexados con uno o varios registros: INSERT INTO  [(campo1[, campo2[, ...]])] 

SELECT [.]campo1[, campo2[, ...]]  FROM <lista de tablas> La  instrucción  SELECT  debe  devolver  tantos  valores,  en  el  mismo  orden  y  del  mismo  tipo,  que  las columnas a rellenar (campos de la instrucción INSERT).

Ejemplo Agregar un registro a la tabla Clientes. INSERT INTO Clientes ( Cli_CódigoCli, Cli_empresa, Cli_ciudad, Cli_país ) VALUES (’ENI’,’Ediciones ENI’, ’Barcelona’,’E’). Agregar registros de la tabla Prospección a la tabla Clientes. INSERT INTO Clientes  SELECT Prospección.*  FROM Prospección

10. Otras instrucciones Consultas de interrogación TRANSFORM

Crea  una  consulta  de  tabla  de  referencias  cruzadas.  Esta instrucción se utiliza al crear una consulta a partir del asistente para tablas de referencias cruzadas.

UNION

Crea una consulta que fusiona los resultados de dos, o varias, consultas  o  tablas  independientes.  Las  estructuras  de  las tablas y/o de las consultas fusionadas deben ser idénticas.

Creación y gestión de tablas CREATE TABLE

Crea una nueva tabla.

CREATE INDEX

Crea un nuevo índice para una tabla existente.

ALTER TABLE

Modifica la estructura de una tabla.

DROP TABLE

Elimina una tabla de la base de datos.

DROP INDEX

Elimina un índice de una tabla.

Creación y gestión de usuarios y de grupos CREATE USER

Crea uno o varios nuevos usuarios.

ADD USER

Agrega uno o varios usuarios a un grupo de usuarios existente.

DROP USER

Elimina uno o varios usuarios.

CREATE GROUP

Crea uno o varios nuevos grupos.

DROP GROUP

Elimina uno o varios grupos de usuarios.

GRANT

Atribuye  privilegios  específicos  a  un  usuario  o  a  un  grupo  de usuarios existente.

REVOKE

Revoca  privilegios  específicos  a  un  usuario  o  a  un  grupo  de usuarios existente.

Puede  obtener  más  información  sobre  el  lenguaje  SQL  y  sus  instrucciones,  a  partir  del  tema

"Referencia de Microsoft jet SQL", del Contenido de la ayuda de Access.

Ejemplos de utilización de consultas SQL Para  demostrar  el  interés  del  lenguaje  SQL,  los  ejemplos  siguientes  proponen  dos  procedimientos equivalentes: uno utiliza el lenguaje SQL y el otro no. Para realizar estos ejemplos debe crear una tabla Clientes con un campo llamado Cli_Empresa e introducir algunos registros en dicha tabla.

1. Actualización de registros El código del ejemplo siguiente permite modificar el contenido de un campo en una tabla para registros que respondan a ciertos criterios. Código VBA utilizando una consulta SQL de tipo UPDATE. Private Sub Act_País()  Dim cncPresupuesto As ADODB.Connection  Dim strSQL As String  ’  Actualización del código de país en la tabla clientes  Set cncPresupuesto = CurrentProject.Connection  strSQL = "UPDATE Clientes SET " _         & "Clientes.CLI_PAÍS = ’E’ " _         & "WHERE Clientes.CLI_CIUDAD = ’Valencia’"  cncPresupuesto.Execute strSQL  End Sub Código VBA equivalente sin consulta SQL. Private Sub Act_País1()  Dim cncPresupuesto As ADODB.Connection  Dim rstCliente As ADODB.Recordset   ’   Apertura de un conjunto de registros  Set cncPresupuesto = CurrentProject.Connection  Set rstCliente = New ADODB.Recordset  rstCliente.Open "CLIENTES", cncPresupuesto, adOpenForwardOnly, _  adLockOptimistic    ’   Recorrido secuencial de la tabla Clientes  Do While Not rstCliente.EOF     If rstCliente("CLI_CIUDAD") = "Valencia" Then        rstCliente("CLI_PAÍS") = "E"        rstCliente.Update     End If     rstCliente.MoveNext  Loop    End Sub

2. Carga de una lista desplegable El código de ejemplo siguiente permite mostrar en una lista desplegable (control cuadro de lista) el nombre de los clientes cuyo nombre de Empresa empiece por una letra determinada (la letra se indica en un cuadro de texto). Para probar este ejemplo debe: crear un formulario llamado Clientes, agregar los controles siguientes al formulario: un cuadro de texto llamado txtNomEmp. un cuadro de lista llamado lstEmp.

un botón de comando cmdLista1. Código  VBA  que  utiliza  una  consulta  SQL  de  tipo  SELECT.  El  contenido  de  la  lista  es  el  resultado  de  la consulta SQL. Private Sub cmdLista1_Click()  Dim strSQL As String    ’   Control del nombre introducido  If txtNomEmp = "" Then     MsgBox "Debe introducir al menos una letra", vbExclamation     txtNomEmp.SetFocus     Exit Sub  End If     ’   Propiedades de la lista desplegable ’   La lista contiene una consulta  Me.lstEmp.RowSourceType = "Tabla/Consulta"  strSQL = "SELECT Clientes.CLI_EMPRESA FROM Clientes " _     & "WHERE (Clientes.CLI_EMPRESA Like ’" & Me.txtNomEmp & "*’)"  Me.lstEmp.RowSource = strSQL  ’   Actualización de los datos de la lista  Me.lstEmp.Requery    End Sub Código VBA equivalente sin consulta SQL. La lista se rellena a partir de una lista de valores. Private Sub cmdLista1_Click()  Dim cncPresupuesto As ADODB.Connection  Dim rstCliente As ADODB.Recordset  Dim strNomEmp as String  ’   Control del nombre introducido  If txtNomEmp = "" Or IsNull(txtNomEmp) Then     MsgBox "Debe introducir al menos una letra", vbExclamation     txtNomEmp.SetFocus     Exit Sub  End If   ’   Inicialización de la lista desplegable ’   La lista contiene una lista de valores  Me.lstEmp.RowSourceType = "Lista valores"  Me.lstEmp.RowSource = ""  Me.lstEmp.Requery    ’   Apertura de un conjunto de registros  Set cncPresupuesto = CurrentProject.Connection  Set rstCliente = New ADODB.Recordset  rstCliente.Open "CLIENTES", cncPresupuesto, adOpenForwardOnly, _     adLockOptimistic    ’   Recorrido secuencial de la tabla e incorporación de elementos ’   a la lista  Do While Not rstCliente.EOF     If Ucase(Left(rstCliente("CLI_EMPRESA"), Len(Me.txtNomEmp))) = _        Ucase(Left(Me.txtNomEmp, Len(Me.txtNomEmp))) Then        strNomEmp = rstCliente("CLI_EMPRESA")        Me.lstEmp.AddItem strNomEmp     End If     rstCliente.MoveNext  Loop  rstCliente.close    End Sub Los ejemplos anteriores permiten constatar que el código que utiliza SQL es más corto y su ejecución más rápida, hecho que puede resultar muy útil, por ejemplo, si la tabla Clientes contiene un número importante de registros.

Presentación 1. Definición Un  evento  es  el  resultado  de  una  acción  del  usuario  o  del  sistema  sobre  un  objeto.  Desencadena  la ejecución del código correspondiente al procedimiento de evento del objeto activado.

La utilización de un procedimiento de evento o de una macro permite asociar un tratamiento específico en respuesta a un evento que se produzca en un formulario, en un informe o en un control.

2. Asociación de código VBA a un evento Puede asignar código VBA al evento de un objeto de dos maneras: a partir de la ficha Eventos de la ventana de propiedades del objeto en Access.

a partir de las listas desplegables de objetos y de eventos en el editor Visual Basic.

Categorías de eventos Las siguientes listas de eventos están clasificadas por tipo y contienen: el nombre del evento, el  nombre  de  la  propiedad  correspondiente  en  la  ventana  de  propiedades  del  objeto  (entre paréntesis), la descripción del evento, la  columna  de  la  derecha  (Cancelación)  indica  si  el  evento  puede  cancelarse.  La  cancelación  de  un evento se describe en el apartado Cancelación de un evento.

1. Eventos de tipo Ventana Cancelación Open

(AlAbrir) Se  produce  al  abrir  un  formulario  pero  antes  de  que  se muestre el primer registro. Se produce al abrir un informe, pero antes de su impresión.



Load

(AlCargar) Se  produce  al  abrir  un  formulario  cuando  se  muestra  el primer registro.

No

Resize

(AlCambiarTamaño) Se  produce  al  mostrar  por  primera  vez  el  formulario  y  al cambiar su tamaño.

No

UnLoad

(AlDescargar) Se produce al cerrar y cuando se liberan los registros, pero antes de que el formulario desaparezca.



Close

(AlCerrar) Se produce cuando el formulario o el informe desaparece al cerrarlo.

No

2. Eventos de tipo Enfoque Les  eventos  de  tipo  "enfoque"  pueden  aplicarse  a  los  formularios  (Activate,  Deactivate,  GotFocus, LostFocus) o a los controles (Enter, Exit, SetFocus, LostFocus). Decimos que un objeto tiene el enfoque (o foco)  cuando  puede  recibir  una  entrada  del  usuario  a  través  de  acciones  con  el  ratón  o  con  el  teclado. Los objetos que tienen el enfoque se llaman objetos activos (ActiveForm o ActiveControl).  El método SetFocus permite dar el foco a un control o a un formulario.

Cancelación Activate

(AlActivar) Se  produce  cuando  la  ventana  del  formulario  o  del informe se convierte en activa.

No

Deactivate

(AlDesactivar) Se  produce  al  activar  otra  ventana,  pero  antes  de  que esta última esté activada. Se produce también al cerrar la ventana.

No

Enter

(AlEntrar)

No

Se produce antes de que un control tome el foco a partir de un control o al abrir el formulario. Exit

(AlSalir)



Se produce antes de que un control pierda el enfoque en provecho  de  otro  control  del  formulario  o  de  otro formulario. GotFocus

(AlRecibirEnfoque)

No

Se  produce  cuando  un  control  o  un  formulario  sin control activo recibe el foco. LostFocus

(AlPerderEnfoque)

No

Se produce cuando un control o un formulario pierde el enfoque.

3. Eventos de tipo Datos Los  eventos  de  tipo  "datos"  se  aplican  a  los  formularios  asociados  a  un  origen  de  datos  (propiedad RecordSource rellenada a partir de un nombre de tabla o de una consulta) y a los controles asociados a un campo del origen de datos del formulario (propiedad ControlSource rellenada). Cancelación AfterInsert

(DespuésDeInsertar) Se  produce  después  de  agregar  un  nuevo registro a la tabla.

No

AfterUpdate

(DespuésDeActualizar) Se  produce  después  de  la  actualización  de un  control  o  de  un  registro  con  datos modificados.

No

AfterDelConfirm

(DespuésDeConfirmarEliminación) Se produce después de que el usuario haya respondido  a  la  solicitud  de  eliminación  de los registros.

No

BeforeInsert

(AntesDeInsertar) Se  produce  al  teclear  el  primer  carácter  de un  nuevo  registro,  pero  antes  de  agregar realmente el registro.



BeforeUpdate

(AntesDeActualizar) Se produce antes de la actualización de un control  o  de  un  registro  con  datos modificados.



BeforeDel­Confirm

(AntesDeConfirmarEliminación) Se produce después de que el usuario haya eliminado  registros  y  antes  que  Access solicite confirmación.



NotInList

(AlNoEnLaLista) Se produce al entrar un valor que no existe en  una  lista  y  cuando  la  propiedad LimitarALista es verdadera.

No

Current

(AlActivarRegistro)

No

Se  produce  cuando  el  foco  pasa  de  un registro a otro. Se  produce  también  al  abrir,  antes  de  que el primer registro se convierta en el actual.

Change

(AlCambiar)

No

Se  produce  al  modificar  el  contenido  de  un cuadro  de  texto  o  un  cuadro  combinado (teclado o macro/Visual Basic). Updated

(AlActualizar)

No

Se  produce  cuando  los  datos  de  un  objeto OLE han sido modificados. Delete

(AlEliminar)



Se produce antes de la eliminación efectiva. Al pulsar [Supr] por ejemplo. Dirty

(AlCambiar)



Se  produce  cuando  cambia  el  contenido  de un  formulario  o  la  parte  de  texto  de  un cuadro combinado. Se produce también al pasar de una página a otra en un control Ficha.

4. Eventos de tipo Ratón Cancelación Click

(AlHacerClic) Se  produce  al  pulsar  el  botón  izquierdo  del  ratón sobre  un  control  o  una  zona  en  blanco  de  un formulario.

No

DblClick

(AlHacerDobleClic) Se  produce  al  pulsar  dos  veces  el  botón  izquierdo del ratón sobre un control o una zona en blanco de un formulario.



MouseDown

(AlBajarMouse) Se  produce  al  pulsar  un  botón  del  ratón  sobre  un control o un formulario.



MouseMove

(AlMoverMouse)

No

Se  produce  cuando  el  usuario  desplaza  el  ratón sobre un formulario o sobre un control. MouseUp

(AlSubirMouse) Se  produce  cuando  el  usuario  suelta  el  botón  del ratón sobre un control o sobre un formulario.

No

5. Eventos de tipo Teclado Cancelación KeyDown

(AlBajarTecla)

No

Se  produce  al  pulsar  una  tecla  o  al ejecutar  SendKeys  oEnviarTeclas.  No  obstante,  es posible  impedir  al  objeto  recibir  la  tecla,  atribuyendo  el valor  0  al  argumentoKeycode  del procedimiento KeyDown del objeto. KeyPress

(AlPresionarTecla) Se  produce  al  pulsar  una  tecla  que  emita  un  carácter ANSI estándar o al ejecutar SendKeys o EnviarTeclas. No obstante, también es posible impedir al objeto recibir la  tecla,  atribuyendo  el  valor  0  al argumento  keyAsciidel  procedimiento  KeyPress  del

Sí (a través de macro o VBA)

objeto. KeyUp

(AlSubirTecla)

No

Se  produce  cuando  el  usuario  suelta  la  tecla  o  al ejecutarSendKeys  o  EnviarTeclas.  No  obstante,  es posible  impedir  al  objeto  recibir  la  tecla,  atribuyendo  el valor  0  al  argumento  KeyCode  del procedimiento KeyUp del objeto. La  propiedad  KeyPreview  (vista  previa  de  las  teclas)  de  un  formulario  determina  si  los procedimientos de evento de teclado a nivel del formulario se invocan antes de aquéllos a nivel de los controles. Puede utilizar la propiedad KeyPreview para crear un procedimiento de gestión del teclado a nivel de un formulario.

Ejemplo El ejemplo siguiente explica cómo mostrar un formulario cuando el usuario pulsa la tecla [F1], cualquiera que sea el control activo. Private Sub Form_Load()  KeyPreview = True  End Sub    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)   ’   Si la tecla es F1, se muestra el formulario Buscar   ’   KeyCode se reinicializa para no mostrar la ayuda Access  If KeyCode = vbKeyF1 Then     DoCmd.OpenForm "Buscar"     KeyCode = 0  End If  End Sub

6. Eventos de tipo Impresión Estos eventos se aplican a los informes Access. Cancelación Format

(AlDarFormato) Se  produce  cuando  Microsoft  Access  determina  qué  datos pertenecen a qué secciones.



Print

(AlImprimir)



Se  produce  al  formatear  datos  de  una  sección  para impresión. Retreat

(AlRetirarse) Se  produce  cuando  Microsoft  Access  vuelve  a  una  sección anterior durante la paginación de un informe.

No

NoData

(AlNoDatos)



Se  produce  cuando  Microsoft  Access  ha  paginado  un informe para su impresión y éste no contiene datos. Page

(AlPaginar) Se produce después de que Microsoft Access haya paginado una página de un informe para su impresión, pero antes de que se imprima.

No

Los eventos Format, Print y Retreat se aplican a las secciones de los informes.

7. Eventos de tipo Filtro Cancelación ApplyFilter

(AlAplicarFiltro) Se produce cuando el usuario aplica un filtro.



Filter

(AlFiltrar) Se produce cuando el usuario crea un filtro.



8. Eventos de tipo Error y Cronómetro Cancelación Error

(AlOcurrirError)

No

Se produce cuando ocurre un error. Timer

(AlCronómetro) Se  produce  cuando  transcurre  un  intervalo  de  tiempo especificado.

No

Cancelación de un evento En ciertos casos, es deseable poder anular un evento. Para ello, existen dos maneras de proceder: especificando el nombre de una macro que contenga la acción CancelarEvento, como parámetro de la propiedad de tipo evento correspondiente, por ejemplo para cancelar la actualización de un control o  para  colocar  el  nombre  de  la  macro  que  contiene  la  acción  CancelarEvento  en  su propiedadAntesDeActualizar.  La  acción  CancelarEvento  en  Visual  Basic  utiliza  el método CancelEvent del objeto Docmd. asignando el valor True al argumento Cancel de un procedimiento de evento.  Ejemplo Si la fecha es incorrecta, el evento Exit (Salir) se anula: el cursor se mantiene posicionado sobre el campo. Private Sub txtFechaFin_Exit(Cancel As Integer)    If IsNull(txtFechaFin) Then Exit Sub     ’  La fecha debe ser correcta  If Not IsDate(txtFechaFin) Then     MsgBox "Fecha incorrecta", vbCritical     Cancel = True     Exit Sub  End If    ’  La fecha final debe ser >= fecha inicial  If DateValue(txtFechaFin) < DateValue(txtFechaIni) Then      MsgBox "Fecha final anterior a la fecha inicial", vbCritical      Cancel = True      Exit Sub  End If    End Sub No todos los eventos son cancelables (ver tablas de categorías de eventos precedentes).

Secuencias de tipos de eventos Una acción de usuario o de sistema genera directamente un evento, pero pueden activarse varios eventos subyacentes. Estas son algunas secuencias de tipos de encadenamiento de eventos: Abrir un formulario: Open →Load →Resize →Activate →Current Cerrar un formulario: UnLoad →Deactivate →Close Entrar en un control: Enter →GotFocus Salir de un control: Exit →LostFocus Pasar de un formulario a otro: Deactivate (form1) →Activate (form2) Modificar un cuadro de texto: KeyDown →KeyPress →Change →KeyUp Actualizar un control: KeyDown →KeyPress →Change →KeyUp →Exit (Zona1) →LostFocus (Zona1) →Enter (Zona2) →GotFocus (Zona2) Actualizar un registro: KeyDown →KeyPress →Change →KeyUp →BeforeUpdate (Cuadro de texto) →AfterUpdate (Cuadro de texto) →BeforeUpdate (Formulario) →AfterUpdate (Formulario)

Introducir en el primer campo de un nuevo registro: KeyDown →KeyPress →BeforeUpdate (Formulario) →Change →KeyUp Eliminar registros: Delete →Current →BeforeDelConfirm →AfterDelConfirm

Los eventos de actualización En Microsoft Access, los eventos de actualización intervienen a dos niveles: actualización de un control, actualización de un registro. En el caso de una actualización de un control, se ejecutan los eventos BeforeUpdate y AfterUpdate  del mismo control. En el caso de una actualización de un registro, se ejecutan los eventos BeforeUpdate y AfterUpdate del formulario. Los  eventos  de  "actualización  de  los  controles"  se  ejecutan  antes  que  los  eventos  de  "actualización  del formulario".

Los distintos tipos de error Distinguimos distintos tipos de error en el lenguaje VBA: los errores de sintaxis, los errores de compilación, los errores de ejecución, los errores de lógica.

1. Los errores de sintaxis Los errores de sintaxis pueden descubrirse automáticamente durante la introducción del código en VBA. Para activar la comprobación de sintaxis, en el menú Herramientas:   Seleccione Opciones.   Y luego seleccione la ficha Editor y active la casilla Comprobación automática de sintaxis. Ejemplo

Los errores de sintaxis no corregidos provocarán un error de compilación (Ver mensaje mostrado).

2. Los errores de compilación Les errores de compilación se descubren cuando Access intenta compilar su código. El código VBA puede compilarse de dos maneras: a  petición  del  usuario  seleccionando  la  opción Compilar del  menú  Depuración.  En  este  caso  el código se compila en su totalidad.

automáticamente al ejecutar el código. En este caso, el código contenido en los procedimientos se compila solamente en el momento de la primera llamada al procedimiento. Los procedimientos no llamados no se compilarán. Se recomienda compilar el programa antes de ejecutarlo, ya que así se gana tiempo en su puesta a punto.

Ejemplo

Es posible evitar los errores de ejecución debidos a variables no declaradas utilizando la instrucción Option Explicit. Si intenta utilizar una variable no declarada se producirá un error durante la compilación.

3. Los errores de ejecución Los errores de ejecución se descubren cuando Access inicia la ejecución del código. Una instrucción, una operación,  una  llamada  a  una  función...  no  válidas  provocan  un  error  de  ejecución.  Por  ejemplo,  la utilización de una variable no declarada o un cálculo efectuado con una variable que contenga un valor no numérico pueden provocar un error de ejecución. Ejemplo La variable dblRadio pasada como argumento contiene un valor no numérico. 

4. Los errores de lógica Los  errores  de  lógica  están  vinculados  a  errores  de  razonamiento  o  a  una  mala  traducción  de  un razonamiento en código VBA. Por ejemplo, un algoritmo de cálculo puede producir un error de resultado si, durante su transcripción en VBA, se omite o se traduce mal una operación, o si el algoritmo es erróneo. Los errores de lógica son los más difíciles de detectar. Generalmente no causan ningún error de ejecución, pero producen un resultado distinto del esperado. En  el  ejemplo  citado  anteriormente,  si  el  valor  de  Pi  es  erróneo  o  la  fórmula  del  volumen  incorrecta,  el valor devuelto por VolEsfera será erróneo.

Depuración con VBA 1. Presentación El  modo  de  depuración  permite,  entre  otras  cosas,  detectar  y  corregir  interactivamente  los  errores, permitiendo la continuación de la ejecución del programa. Cuando se produce un error de ejecución, se muestra un código de error, Access interrumpe la ejecución del programa y se activa el modo de depuración. Con las distintas herramientas de depuración podemos: ejecutar el código paso a paso, agregar puntos de interrupción, conocer en todo momento el valor de una variable o de una expresión, modificar interactivamente el código, etc.

2. La barra de herramientas Depuración La  barra  de  herramientas  Depuración  permite  acceder  directamente  a  las  distintas  herramientas  de depuración.

1.

Modo de diseño

activa o desactiva el modo de diseño.

2.

Ejecutar ([F5])

ejecuta  el  código  del  procedimiento  actual,  la hoja UserForm activa o una macro.

3.

Interrumpir ([Ctrl][Pausa])

interrumpe  la  ejecución  del  programa  actual  y pasa al modo de interrupción

4.

Restablecer proyecto

borra el contenido de las variables y restablece el proyecto.

5.

Alternar punto de interrupción([F9])

establece o elimina un punto de interrupción en la  línea  actual;  el  código  se  ejecuta  hasta  el punto de interrupción y luego se pasa al modo de depuración.

6.

Paso a paso por instrucciones([F8])

ejecuta  el  código  instrucción  por  instrucción, recorriendo  el  procedimiento  actual  y  los procedimientos llamados.

7.

Paso a paso por procedimientos ([Mayús][F8])

ejecuta  el  código  instrucción  por  instrucción solamente  para  el  procedimiento  actual  (las instrucciones de los procedimientos llamados se ejecutan de forma continua).

8.

Paso a paso para salir ([Ctrl][Mayús][F8])

ejecuta  de  forma  continua  las  líneas  restantes del procedimiento actual.

9.

Ventana Locales

muestra  los  valores  de  las  variables  locales  del

procedimiento. 10.

Ventana Inmediato (método abreviado [Ctrl] G)

muestra  la  ventana  de  ejecución  que  permite ejecutar interactivamente una instrucción.

11.

Ventana Inspecciones

muestra la lista de las variables inspeccionadas.

12.

Inspección rápida

muestra  el  valor  actual  de  la  expresión seleccionada.

([Mayús][F9]) 13.

Pila de llamadas

muestra  la  lista  de  las  llamadas  procedimientos que se están ejecutando.

a

3. El objeto Debug El  objeto  Debug  permite  enviar  datos  para  mostrarlos  en  la  ventana  Inmediato  en  el  momento  de  la ejecución.

Métodos Print

Muestra  texto  o  el  resultado  de  la  evaluación  de  una  expresión  en  la ventanaInmediato.

Assert

Suspende la ejecución de manera condicional en la línea en la que aparece el método.

Ejemplo VolEsfera = 4 / 3 * Pi * ((dblRadio) ˆ 3)  Debug.print dblRadio  Debug.Assert VolEsfera > 0

Gestión de errores con VBA 1. Principios Cuando se produce un error de ejecución, Access genera un código de error. La gestión de errores consiste en identificar el error interceptando su código, y tratarlo para, por ejemplo: mostrar un mensaje más explícito que el definido por el sistema, corregir eventualmente el error. El sistema de gestión de errores de Access ofrece dos posibilidades para interceptar el error, según el lugar dónde éste se haya producido: en el procedimiento de evento Errorde un formulario o de un informe, si el error ha sido provocado en la interfaz de Microsoft Access o en el motor Microsoft Jet, utilizando la instrucción On Error si el error tiene lugar en el código VBA. Para  poder  tratar  los  errores,  es  necesario  conocer  la  lista.  La  lista  de  los  códigos  de  error  está detallada en el anexo Funciones e instrucciones VBA ­ Códigos de error interceptables.

2. El procedimiento de evento Error El procedimiento de evento Error posee dos argumentos: Sub Form_Error (DataErr As Integer, Response As Integer)

DataErr

Contiene el código del error.

Response

Permite  mostrar  (acDataErrDisplay)  o  no  (acDataErrContinue)  el mensaje de error estándar de Access.

Ejemplo El ejemplo siguiente permite interceptar un error y reemplazar el mensaje estándar de Access (ej: un índice o una clave principal no puede contener un valor nulo: correspondiente al número de error 3058), por un mensaje específico.  Sub Form_Error (DataErr As Integer,Response As Integer)    ’Índice Nulo     If DataErr = 3058 Then      MsgBox "Un empleado debe tener un número"       ’el mensaje estándar de Access no se muestra      Response = acDataErrContinue     End If  End Sub

3. La instrucción On Error On Error GoTo La instrucción On Error GoTo indica una secuencia de instrucciones que deben ejecutarse en caso de error. Esta instrucción debe estar situada antes de las instrucciones que pueden desencadenar el error. Sintaxis On Error {GoTo <etiqueta>| GoTo 0}

<etiqueta>

Nombre de la etiqueta que indica el inicio de la secuencia de instrucciones. Una  etiqueta  se  compone  de  un  nombre  que  empieza  por  una  letra  y  del signo dos puntos (:). Ej: Gest_error: La secuencia de instrucciones llamada para  gestionar  los  errores  está  situada  generalmente  al  final  del procedimiento  o  de  la  función,  y  precedida  por  una  instrucción  Exit Sub  oExit  Function  para  evitar  su  ejecución  en  el  caso  de  que  no  se produzca ningún error.

0

Desactiva el tratamiento de errores.

Por otra parte, en la secuencia de instrucciones de tratamiento de errores, es necesario indicar en qué lugar debe  continuar  la  ejecución  del  procedimiento  o  función  después  del  tratamiento  del  error.  Para  este  fin debe utilizarse una de las instrucciones siguientes:

Resume

Continúa  la  ejecución  del  programa  en  la  instrucción  que  ha provocado el error.

Resume Next

Continúa la ejecución del programa en la instrucción siguiente a la que ha provocado el error.

Resume<etiqueta>

Continúa la ejecución del programa en la etiqueta definida.

Ejemplo Sub MiProcedimiento()      On Error GoTo Error      ...      Exit Sub      Error:          Select Case Err              Case 11              ’División por Cero                  MsgBox ...                  ...                  Resume Next              Case 13               ’Tipos incompatibles                  ...          End Select  End Sub

4. El objeto Err El objeto Err contiene informaciones que permiten conocer el origen del error.

Propiedades Description

Devuelve una cadena de caracteres que explica el origen del error.

HelpContext

Devuelve  el  identificador  de  contexto  asociado  a  un  tema  de  un archivo de ayuda.

HelpFile

Devuelve  una  cadena  de  caracteres  que  contiene  la  ruta  de  acceso completa al archivo de ayuda.

LastDLLError

Devuelve un código de error de sistema producido por una llamada a una biblioteca de vínculos dinámicos.

Number

Devuelve un valor numérico que indica el número del error.

Source

Devuelve una cadena de caracteres que contiene el nombre del objeto o de la aplicación que ha generado el error.

Métodos

Clear

Borra de manera explícita el contenido del objeto Err.

Raise

Permite generar errores de ejecución.

Ejemplo El código siguiente permite mostrar un mensaje que da información sobre la naturaleza del error.

Ejemplo de cuadro de mensaje devuelto cuando se produce un error:

Presentación El lenguaje VBA le permite personalizar sus formularios e informes durante su ejecución. Podrá, por ejemplo, efectuar las operaciones siguientes: Modificar la apariencia de un control en un formulario o en un informe (color, tamaño, posición...). Agregar o eliminar controles en un formulario o en un informe. Encadenar formularios a partir de botones de comando. Mostrar o imprimir un informe. Aplicar filtros a los registros de un informe o de un formulario. Etc. Los asistentes para "Botones de comando" y para "Cuadros de lista" generan automáticamente código VBA en procedimientos de evento. Constituyen los primeros ejemplos sencillos de personalización de formularios y de informes. Encontrará  otros  ejemplos  de  personalización  de  formularios  y  de  informes  en  la  "mini­aplicación" descrita en el capítulo Código de una mini­aplicación.

Personalización de los formularios Un objeto Form forma parte de la colección Forms que representa todos los formularios que están abiertos. El objeto ActiveForm (Screen.ActiveForm) y el objeto Me designan el formulario activo. Utilice la palabra reservada Me para representar un objeto Form o Report en el código, solamente si hace referencia a ese formulario o informe a partir del código en el módulo de clase. Si la referencia se hace  a  partir  de  un  módulo  estándar  o  de  otro  módulo  del  formulario  o  del  informe,  deberá  utilizar  la referencia completa de dichos formularios o informes.

1. Sintaxis Para hacer referencia a un formulario, dispone de varias sintaxis que le permiten hacer referencia a un objeto de una colección: Forms!       ej: Forms!Pedidos  Forms![]       ej: Forms![Pedidos]  Forms("")       ej: Forms("Pedidos")  Forms(<índice>)       ej: Forms(0) La sintaxis Forms! es la más habitual.

Si un nombre de formulario contiene un espacio, la primera sintaxis no funciona. Utilice siempre la misma sintaxis para facilitar la lectura del código. Es preferible referenciar un formulario específico por su nombre que por su índice, ya que este último puede cambiar.

Para hacer referencia a un subformulario a partir de un formulario, debe utilizar el nombre del control que contiene el subformulario seguido de la palabra clave Form. Ejemplo [sFrmParticipante].Form!txtNumAlumn  [sFrmCursos].Form.RecordSource = strSQL  [sFrmCursos].Form.Requery

2. Propiedades disponibles en vista Diseño Para conocer el nombre VBA y la descripción de una propiedad disponible en modo diseño, debe situarse en la ventana Propiedades del objeto Formulario y pulsar la tecla [F1].

Access muestra entonces una página web que indica el nombre de la propiedad VBA, la sintaxis VBA y otra información (valores posibles para la propiedad, ejemplo de código VBA, referencias...).

a. Propiedades de la ficha Formato

1.

Caption

Cadena de caracteres

2.

DefaultView 0 Un único formulario (modo simple)

Byte

1 Formularios continuos (modo continuo) 2 Hoja de datos 3 Tabla dinámica 4 Gráfico dinámico 5 Formulario de doble vista 3.

AllowFormView

Boleano

4.

AllowDataSheetView

Boleano

5.

AllowLayoutView

Boleano

6.

PictureType

Byte

0 Incrustado (o incorporado) 1 Vinculado (o relacionado) 7.

Picture

Cadena de caracteres

8.

PictureTiling

Boleano

9.

PictureAlignment 0 Esquina superior izquierda

Byte

1 Esquina superior derecha 2 Centro 3 Esquina inferior izquierda 4 Esquina inferior derecha 5 Centro del formulario 10.

PictureSizeMode 0 Recortar 1 Escala

Byte

2 Zoom 11.

Width

Entero

12.

AutoCenter

Boleano

13.

AutoResize

Boleano

14.

FitToScreen

Boleano

15.

BorderStyle 0 Ninguno 1 Fino

Byte

2 Ajustable 3 Trazo doble fijo 16.

RecordSelectors

Boleano

17.

NavigationButtons

Boleano

18.

NavigationCaption

Boleano

19.

DividingLines

Boleano

20.

ScrollBars 0 Ninguna

Byte

1 Sólo horizontal 2 Sólo vertical 3 Ambas 21.

ControlBox

Boleano

22.

CloseButton

Boleano

23.

MinMaxButtons

Byte

0 Ninguno 1 Minimizar activado 2 Maximizar activado 3 Ambos activados 24.

Moveable

Boleano

25.

SplitFormSize

Entero Largo

26.

SplitFormOrientation

Byte

0 Hoja de datos arriba 1 Hoja de datos abajo 2 Hoja de datos a la izquierda

3 Hoja de datos a la derecha 27.

SplitFormSplitterBar

Boleano

28.

SplitFormDatasheet 0 Permitir modificaciones 1 Sólo lectura

Byte

29.

SplitFormPrinting 0 Sólo formulario

Byte

1 Sólo hoja de datos 30.

SplitFormSplitterBarSave

Boleano

31.

SubdatasheetExpanded

Boleano

32.

SubdatasheetHeight

Entero

33.

GridX

Entero

34.

GridY

Entero

35.

LayoutForPrint

Boleano

36.

Orientation 0 De izquierda a derecha 1 De derecha a izquierda

37.

PaletteSource

Cadena de caracteres

b. Propiedades de la ficha Datos

1.

RecordSource

Cadena de caracteres

2.

TypeRecordSet

Byte

0 Dynaset 1 Dynaset (Actualizaciones incoherentes) 2 Archivo Snapshot 3.

FetchDefaults

Boleano

4.

Filter

Cadena de caracteres

5.

FilterOnLoad

Boleano

6.

OrderBy

Cadena de caracteres

7.

OrderByOnLoad

Boleano

8.

DataEntry

Boleano

9.

AllowAdditions

Boleano

10.

AllowDeletions

Boleano

11.

AllowEdits

Boleano

12.

AllowFilters

Boleano

13.

RecordLocks

Byte

0 Ninguno 1 General 2 Regmodificado

c. Propiedades de la ficha Eventos

1.

OnCurrent

Cadena de caracteres

2.

OnLoad

Cadena de caracteres

3.

OnClick

Cadena de caracteres

4.

AfterUpdate

Cadena de caracteres

5.

BeforeUpdate

Cadena de caracteres

6.

BeforeInsert

Cadena de caracteres

7.

AfterInsert

Cadena de caracteres

8.

BeforeDelConfirm

Cadena de caracteres

9.

OnDelete

Cadena de caracteres

10.

AfterDelConfirm

Cadena de caracteres

11.

OnDirty

Cadena de caracteres

12.

OnGotFocus

Cadena de caracteres

13.

OnLostFocus

Cadena de caracteres

14.

OnDblClick

Cadena de caracteres

15.

OnMouseDown

Cadena de caracteres

16.

OnMouseUp

Cadena de caracteres

17.

OnMouseMove

Cadena de caracteres

18.

OnKeyUp

Cadena de caracteres

19.

OnKeyDown

Cadena de caracteres

20.

OnKeyPress

Cadena de caracteres

21.

OnUndo

Cadena de caracteres

22.

OnOpen

Cadena de caracteres

23.

OnClose

Cadena de caracteres

24.

OnResize

Cadena de caracteres

25.

OnActivate

Cadena de caracteres

26.

OnDeactivate

Cadena de caracteres

27.

OnUnload

Cadena de caracteres

28.

OnErrorr

Cadena de caracteres

29.

MouseWheel

Cadena de caracteres

30.

OnFilter

Cadena de caracteres

31.

OnApplyFilter

Cadena de caracteres

32.

OnTimer

Cadena de caracteres

33.

TimerInterval

Cadena de caracteres

34.

SelectionChange

Cadena de caracteres

35.

BeforeRender

Cadena de caracteres

36.

AfterFinalRender

Cadena de caracteres

37.

AfterRender

Cadena de caracteres

38.

AfterLayout

Cadena de caracteres

39.

OnConnect

Cadena de caracteres

40.

OnDisconnect

Cadena de caracteres

41.

BeforeQuery

Cadena de caracteres

42.

Query

Cadena de caracteres

43.

DataChange

Cadena de caracteres

44.

DataSetChange

Cadena de caracteres

45.

CommandExecute

Cadena de caracteres

46.

CommandBeforeExecute

Cadena de caracteres

47.

CommandEnabled

Cadena de caracteres

48.

CommandChecked

Cadena de caracteres

49.

ViewChange

Cadena de caracteres

50.

PivotTableChange

Cadena de caracteres

51.

BeforeScreenTip

Cadena de caracteres

52.

KeyPreview

Boleano

d. Propiedades de la ficha Otras

1.

Popup

Boleano

2.

Modal

Boleano

3.

Cycle

Byte

0 Todos los registros 1 Registro activo 2 Página activa 4.

RibbonName

Cadena de caracteres

5.

ToolBar

Cadena de caracteres

6.

ShortcutMenu

Boleano

7.

MenuBar

Cadena de caracteres

8.

ShortcutMenuBar

Cadena de caracteres

9.

HelpFile

Cadena de caracteres

10.

HelpContextID

Entero Largo

11.

HasModule

Boleano

12.

FastLaserPrinting

Boleano

13.

Tag

Cadena de caracteres

3. Propiedades no disponibles en modo Diseño a. Propiedades relativas al modo de ver el formulario CurrentView

Devuelve la vista actual del formulario.

OpenArgs

Devuelve  la  expresión  de  cadena  especificada  en  el argumentoOpenArgs del  método  OpenForm  que  ha  abierto  el formulario.

Page

Especifica el número de la página actual.

Section

Identifica una sección y permite acceder a las propiedades de esta sección.

SelHeight

Especifica o determina el número de filas seleccionadas (registros) en el rectángulo de selección actual.

SelLeft

Especifica o determina cuál es la columna (campo) que está más a la izquierda del rectángulo de selección actual.

SelTop

Especifica  o  determina  cuál  es  la  fila  (registro)  que  está  en  la parte superior del rectángulo de selección.

SelWidth

Especifica  o  determina  el  número  de  columnas  seleccionadas (campos) en el rectángulo de selección actual.

b. Propiedades relativas a los registros y a su actualización BookMark

Define un marcador que identifica de manera única un registro.

CurrentRecord

Permite identificar el registro actual.

Dirty

Permite  determinar  si  el  registro  actual  ha  sido  modificado desde la última vez que se guardó.

NewRecord

Determina si el registro actual es un nuevo registro.

RecordSet

Determina o devuelve el objeto DAO Recordset que representa el origen de registro de un formulario.

RecordSourceQualifer

Devuelve  o  define  una  cadena  de  caracteres  que  indica  el nombre  del  propietario  del  origen  de  los  registros  SQL  Server para el formulario.

c. Propiedades relativas a la presentación del formulario CurrentSectionLeft

Determina  la  distancia  en  twips  entre  la esquina  superior  izquierda  de  la  sección actual  y  la  esquina  superior  izquierda  del formulario  (twip:  unidad  de  medida equivalente  a  1/20  de  punto  o  1/1440  de pulgada.  Un  centímetro  contiene  567 twips).

CurrentSectionTop

Representa  la  distancia  en  twips  entre  la esquina  superior  de  la  sección  actual  y  la esquina superior del formulario.

DataSheetAlternateBackColor

Devuelve  o  define  el  color  mostrado  en otras  lineas  de  la  hoja  de  datos  de  un formulario.

DataSheetBackColor

Especifica o determina el color de fondo de toda la hoja de datos.

DatasheetBorderLineStyle

Indica el estilo de línea que debe emplearse para el borde de la hoja de datos.

DatasheetCellsEffect

Permite especificar si los efectos especiales se  aplican  a  las  celdas  de  una  hoja  de datos.

DatasheetColumnHeaderUnderlineStyle

Indica el estilo de línea que debe emplearse para el borde inferior de los encabezados de columna de la hoja de datos.

DatasheetFontHeight

Especifica  el  tamaño  en  puntos  utilizado para mostrar e imprimir los nombres de los campos  y  los  datos  en  la  vista  Hoja  de datos.

DatasheetFontItalic

Aplica  el  estilo  cursiva  a  los  nombres  de campos  y  a  los  datos  en  la  vista  Hoja  de datos.

DatasheetFontName

Especifica la fuente utilizada para mostrar e imprimir  los  nombres  de  los  campos  y  los datos en la vista Hoja de datos.

DatasheetFontUnderline

Subraya los nombres de campos y los datos en la vista Hoja de datos.

DatasheetFontWeight

Especifica  el  espesor  de  la  fuente  utilizada para  mostrar  e  imprimir  los  caracteres  de los nombres de campo y de los datos en la vista Hoja de datos.

DatasheetForeColor

Especifica o determina el color del texto de toda la Hoja de datos.

DatasheetGridlinesBehavior

Permite especificar el tipo de cuadrícula que debe aparecer en la vista Hoja de datos.

DatasheetGridlinesColor

Permite especificar el color de la cuadrícula de una hoja de datos.

HorizontalDatasheetGridlineStyle

Indica  la  cuadrícula  horizontal  que  debe emplearse  para  el  borde  de  la  hoja  de datos.

InsideHeight

Determina el alto (en twips) de la ventana que contiene un formulario.

InsideWidth

Determina  el  ancho  (en  twips)  de  la ventana que contiene un formulario.

Pages

Indica el número total de páginas.

Painting

Permite  especificar  si  se  debe  volver  a dibujar el formulario.

PaintPalette

Especifica  la  paleta  que  debe  emplearse para el formulario.

PictureData

Permite copiar la imagen del formulario en otro  objeto  que  reconozca  la  propiedad Imagen (Picture).

VerticalDatasheetGridlineStyle

Indica  la  cuadrícula  vertical  que  debe emplearse  para  el  borde  de  la  hoja  de datos.

WindowHeight

Indica  el  alto  de  un  formulario  expresado en twips.

WindowLeft

Indica la posición en pantalla, en twips, del borde izquierdo del formulario.

WindowTop

Indica la posición en pantalla, en twips, del borde superior del formulario.

WindowWidth

Devuelve  el  ancho  de  un  formulario expresado en twips.

d. Propiedades que devuelven un objeto Application

Permite acceder al objeto Application de Access.

ChartSpace

Devuelve  un  objeto  ChartSpace  que  representa  el  espacio gráfico.

Form

Permite hacer referencia a un formulario asociado a un control subformulario.

Module

Permite  especificar  un  módulo  de  formulario.  Los  métodos InsertLines,  DeleteLines  y  ReplaceLine  del  objeto  Module permiten modificar el contenido de un módulo de código.

Parent

Permite hacer referencia al objeto principal.

PivotTable

Devuelve un objeto PivotTable que  representa  el  contenedor de una lista de tabla dinámica.

Printer

Devuelve  o  define  un  objeto  Printer  que  representa  la impresora predeterminada del sistema actual.

RecordsetClone

Permite hacer referencia al objeto Recordset del formulario.

e. Propiedades relativas a la impresión del formulario PrtDevMode

Permite  definir  u  obtener  información  relativa  al  modo  del dispositivo de impresión especificado.

PrtDevNames

Permite  definir  u  obtener  información  relativa  a  la  impresora seleccionada.

PrtMip

Define  o  devuelve  información  sobre  el  modo  del  dispositivo seleccionado.

UseDefaultPrinter

Indica  si  el  formulario  utiliza  la  impresora  predeterminada  del sistema.

4. Métodos del objeto Form Métodos GotoPage

Mueve el foco al primer control de la página indicada.

Move

Desplaza  y/o  cambia  el  tamaño  del  formulario  a  las  coordenadas indicadas por los valores de los argumentos.

Recalc

Recalcula inmediatamente los controles del formulario.

Refresh

Actualiza  los  datos  del  formulario  para  que  contengan  los  últimos cambios que puedan haber realizado otros usuarios.

Repaint

Efectúa todas las actualizaciones en espera del formulario.

Requery

Actualiza los datos del formulario especificado.

SetFocus

Mueve el foco al formulario.

UnDo

Restablece un formulario que había sido modificado.

Ejemplo Muestra la ficha Cliente en función del nombre de la Empresa seleccionada en un cuadro de lista. Private Sub lstBuscCli_AfterUpdate()  Dim rs As Object    ’   Busca el registro correspondiente  ’   al cliente seleccionado  Set rs = Me.Recordset.Clone  rs.FindFirst "[Cli_CódigoCli] = ’" & Me![lstBuscCli] & "’"  If Not rs.EOF Then Me.Bookmark = rs.Bookmark    End Sub Aplicación  de  un  filtro  en  función  del  contenido  de  una  casilla  de  selección:  selección  de  los  clientes españoles, extranjeros o de todos los clientes. Private Sub chkPaís_AfterUpdate()    Select Case chkPaís        ’   Clientes españoles     Case 1         Me.FilterOn = True         Me.Filter = "[Cli_País] = ’España’"         Me.Refresh               ’   Clientes extranjeros     Case 2         Me.FilterOn = True         Me.Filter = "[Cli_País] <> ’España’"         Me.Refresh      ’   Todos los clientes     Case 3         Me.FilterOn = False         Me.Refresh           End Select  End Sub

Personalización de los informes Un objeto Report forma parte de la colección Reports que representa todos los informes que están abiertos. El objeto ActiveReport (Screen.Active­ Report) y el objeto Me designan el informe activo.

1. Sintaxis Para hacer referencia a un informe están disponibles las mismas sintaxis que para los formularios. Ejemplo Reports![ListaPdo]  Reports("ListaPdo")  Reports![ListaPdo]![FechaPdo]

2. Propiedades disponibles en vista Diseño a. Propiedades de la ficha Formato

1.

Caption

Cadena de caracteres

2.

DefaultView 0 Vista Informes 1 Vista preliminar

Byte

3.

AllowReportView

Boleano

4.

AllowLayoutView

Boleano

5.

PictureType 0 Insertado vinculadas 1 Vinculado

Byte

2 Compartidas 6.

Picture

Cadena de caracteres

7.

PictureTiling

Boleano

8.

PictureAlignment 0 Esquina superior izquierda

Byte

1 Esquina superior derecha 2 Centro 3 Esquina inferior izquierda 4 Esquina inferior derecha 9.

PictureSizeMode 0 Recortar

Byte

1 Escala 2 Zoom 10.

Width

Entero

11.

AutoCenter

Boleano

12.

AutoResize

Boleano

13.

FitToPage

Boleano

14.

BorderStyle 0 Ninguno

Byte

1 Fino 2 Ajustable 3 Diálogo 15.

ScrollBars 0 Ninguna

Byte

1 Sólo horizontal 2 Sólo vertical 3 Ambas 16.

ControlBox

Boleano

17.

CloseButton

Boleano

18.

MinMaxButtons

Byte

0 Ninguno 1 Minimizar activado 2 Maximizar activado 3 Ambos activados 19.

Moveable

Boleano

20.

ShowPageMargins

Boleano

21.

GridX

Entero

22.

GridY

Entero

23.

LayoutForPrint

Boleano

24.

GrpKeepTogether 0 Por página

Byte

1 Por Columna 25.

PicturePages

Byte

0 Todas las páginas 1 Primera página 2 Ninguna página 26.

PageHeader

Byte

0 En todas las páginas 1 Sin encabezado de informe 2 Sin pie de informe 3 Sin encabezado/pie de informe 27.

PageFooter

Byte

0 En todas las páginas 1 Sin encabezado de informe 2 Sin pie de informe 3 Sin encabezado/pie de informe 28.

Orientation

Byte

0 De izquierda a derecha 1 De derecha a izquierda 29.

PaletteSource

Cadena de caracteres

b. Propiedades de la ficha Datos

1.

RecordSource

Cadena de caracteres

2.

Filter

Cadena de caracteres

3.

FilterOnLoad

Boleano

4.

OrderBy

Cadena de caracteres

5.

OrderByOnLoad

Boleano

6.

AllowFilters

Boleano

c. Propiedades de la ficha Eventos

1.

OnCurrent

Cadena de caracteres

2.

OnLoad

Cadena de caracteres

3.

OnNoData

Cadena de caracteres

4.

OnClick

Cadena de caracteres

5.

OnGotFocus

Cadena de caracteres

6.

OnLostFocus

Cadena de caracteres

7.

OnDblClick

Cadena de caracteres

8.

OnMouseDown

Cadena de caracteres

9.

OnMouseUp

Cadena de caracteres

10.

OnMouseMove

Cadena de caracteres

11.

OnKeyUp

Cadena de caracteres

12.

OnKeyDown

Cadena de caracteres

13.

OnKeyPress

Cadena de caracteres

14.

OnOpen

Cadena de caracteres

15.

OnClose

Cadena de caracteres

16.

OnResize

Cadena de caracteres

17.

OnActivate

Cadena de caracteres

18.

OnDeactivate

Cadena de caracteres

19.

OnUnload

Cadena de caracteres

20.

OnError

Cadena de caracteres

21.

MouseWheel

Cadena de caracteres

22.

OnFilter

Cadena de caracteres

23.

OnApplyFilter

Cadena de caracteres

24.

OnTimer

Cadena de caracteres

25.

TimerInterval

Cadena de caracteres

26.

OnPage

Cadena de caracteres

27.

KeyPreview

Boleano

d. Propiedades de la ficha Otras

1.

Popup

Boleano

2.

Modal

Boleano

3.

DateGrouping 0 Predeterminado para EE.UU. 1 Usar opciones del sistema

4.

Cycle 0 Todos los registros 1 Registro activo 2 Página activa

5. 6.

RecordLocks

Boleano

RibbonName

Cadena de caracteres

7.

ToolBar

Cadena de caracteres

8.

MenuBar

Cadena de caracteres

9.

ShortcutMenuBar

Cadena de caracteres

10.

HelpFile

Cadena de caracteres

11.

HelpContextID

Entero Largo

12.

HasModule

Boleano

13.

FastLaserPrinting

Boleano

14.

Tag

Cadena de caracteres

3. Propiedades no disponibles en modo Diseño a. Propiedades relativas al modo de ver el informe Moveable

Indica si otro usuario puede mover el informe.

Page

Indica el número de página actual.

b. Propiedades relativas a los registros y a su actualización CurrentRecord

Identifica el registro actual.

Dirty

Permite  determinar  si  el  registro  actual  ha  sufrido modificaciones desde la última vez que se guardó.

HasData

Indica  si  el  informe  es  dependiente  de  un  conjunto  de registros vacío.

RecordSourceQualifier

Devuelve o define una cadena de caracteres que indica el nombre del propietario del origen de los registros SQL Server para el informe.

c. Propiedades relativas a la presentación del informe DrawMode

Especifica cómo afecta la pluma (el color utilizado para el dibujo) a los colores  de  fondo  del  informe  cuando  utiliza  los métodos  Line,  Circleo  PSet  para  dibujar  sobre  un  informe  al imprimir.

DrawStyle

Especifica  el  estilo  de  línea  cuando  utiliza  métodos Line y Circlepara imprimir líneas en un informe.

DrawWidth

Especifica  el  ancho  de  línea  para  los métodos Line, Circle y PSetcuando imprime líneas en un informe.

FillColor

Permite  especificar  el  color  de  relleno  de  los  rectángulos  y  de  los círculos dibujados en un informe mediante los métodos Line yCircle.

FillStyle

Especifica  si  un  círculo  o  una  línea  dibujada  mediante  el métodoCircle o Line es transparente, opaco o relleno con un patrón.

FontBold

Especifica  si  una  fuente  debe  aparecer  en  negrita  al  imprimir controles de informes o al utilizar el método Print en un informe.

Left

Define la posición izquierda del informe.

Painting

Permite especificar si se debe volver a dibujar el informe.

PaintPalette

Especifica la paleta que debe emplear el informe.

ScaleLeft

Especifica  las  unidades  de  las  coordenadas  horizontales  que representan  el  borde  izquierdo  de  una  página  cuando  utiliza  los métodos  Circle,  Line,  PSet  o  Print  para  la  impresión  o  la  vista

los

previa de un informe o para guardarlo como archivo. ScaleMode

Especifica  la  unidad  de  medida  para  las  coordenadas  de  una  página cuando  utiliza  los métodos Circle,  Line,  PSet,  Print,  TextHeight  oTextWidth  para la  impresión  o  la  vista  previa  de  un  informe  o  para  guardarlo  como archivo.

ScaleTop

Especifica las unidades de las coordenadas verticales que representan el  borde  superior  de  una  página  cuando  utiliza  los métodos  Circle,Line,  PSet  o  Print  para  la  impresión  o  la  vista previa de un informe o para guardarlo como archivo.

ScaleWidth

Especifica  el  número  de  unidades  utilizadas  en  el  ancho  de  página cuando  utiliza  los  métodos  Circle,  Line,  PSet  o  Print  para  la impresión  o  la  vista  previa  de  un  informe  o  para  guardarlo  como archivo.

Top

Define la posición superior del informe.

WindowLeft

Indica la posición en la pantalla, en twips, desde el borde izquierdo del informe.

WindowTop

Indica la posición en la pantalla, en twips, desde el borde superior del informe.

d. Propiedades que devuelven un objeto Application

Permite acceder al objeto Application de Access.

Module

Permite  especificar  un  módulo  de  informe.  Los métodosInsertLines,  DeleteLines  y  ReplaceLine  del objeto  Modulepermiten  modificar  el  contenido  de  un  módulo  de código.

Parent

Permite hacer referencia al objeto principal.

Printer

Devuelve  o  define  un  objeto  Printer  que  representa  la  impresora predeterminada del sistema actual.

Recordset

Determina o devuelve el objeto DAO Recordset  que  representa  los registros de un informe.

Shape

Devuelve  una  cadena  que  representa  el  comando  de  tipo  Shape  y que  permite  efectuar  la  ordenación  y  el  agrupamiento  del  informe especificado. Es sólo lectura.

Report

Permite  hacer  referencia  al  informe  asociado  a  un  control subinforme.

e. Propiedades relativas a la impresión del informe CurrentX

Permite  especificar  la  coordenada  horizontal  de  la  posición inicial  del  siguiente  método  de  impresión  o  de  dibujo  de  un informe.

CurrentY

Permite  especificar  la  coordenada  vertical  de  la  posición  inicial del siguiente método de impresión o de dibujo de un informe.

MoveLayout

Especifica si Microsoft Access debe ir a la siguiente posición de impresión de la página.

NextRecord

Especifica si una sección debe pasar al registro siguiente.

Pages

Indica el número total de páginas.

PrintCount

Devuelve el número de evaluaciones de la propiedad AlImprimir (OnPrint) para la sección actual de un informe.

PrintSection

Especifica si debe imprimirse una sección.

PrtDevMode

Permite  definir  o  restituir  informaciones  relativas  al  modo  del dispositivo de impresión especificado.

PrtDevNames

Permite  definir  o  devolver  información  relativa  a  la  impresora seleccionada.

PrtMip

Define  o  devuelve  información  sobre  el  modo  del  dispositivo especificado.

UseDefaultPrinter

Indica  si  el  informe  utiliza  la  impresora  predeterminada  del sistema.

f. Otras propiedades FormatCount

Permite  determinar  el  número  de  evaluaciones  de  la  propiedad AlDarFormato (OnFormat) para la sección actual de un informe.

GroupLevel

Hace  referencia  al  nivel  de  grupo  por  el  que  se  está  ordenando  o agrupando en un informe.

Hwnd

Devuelve  el  controlador  (un  valor  único  de  tipo  Entero  largo) atribuido a la ventana actual por Microsoft Windows.

PictureData

Permite copiar la imagen del informe en otro objeto que reconozca la propiedad Imagen (Picture).

Section

Identifica una sección y permite acceder a sus propiedades.

4. Métodos Circle

Permite dibujar un círculo o una elipse.

Line

Permite dibujar líneas o rectángulos.

Move

Desplaza  y/o  cambia  el  tamaño  del  informe  a  las  coordenadas indicadas por los valores de los argumentos.

Print

Envía el texto definido al objeto Report.

Pset

Determina un punto del informe para modificar su color.

Requery

Actualiza  los  datos  del  informe  especificado  actualizando  el  origen  de datos.

Scale

Define el sistema de coordenadas.

TextHeight

Indica el espacio vertical necesario para mostrar una cadena de texto en la fuente actual del informe especificado (la unidad de medida del valor de vuelto depende del valor de la propiedad ScaleMode).

TextWidth

Indica  el  espacio  horizontal  necesario  para  mostrar  una  cadena  de texto en la fuente actual del informe especificado (la unidad de medida del valor devuelto depende del valor de la propiedad ScaleMode).

Los objetos Control Un  objeto  Control  forma  parte  de  la  colección  Controls  que  representa  todos  los  controles  de  un formulario,  de  un  informe  o  de  un  subformulario.  El objeto ActiveControl (Screen.ActiveControl o.ActiveControl) designa el control activo.

1. Sintaxis Puede referenciar un control de manera implícita: |!     ej: Me!FechaPdo  |![]   ej: Me![FechaPdo]  |("")  ej: Me("FechaPdo")  |.     ej: Me.FechaPdo o de manera explícita como miembro de la colección Controls: |.Controls{("")|!|  (<índice control>)}  ej:       Me.Controls!FechaPdo      Me.Controls![FechaPdo]      Me.Controls("FechaPdo")      Me.Controls(0) Cada  control  tiene  sus  propiedades,  métodos  y  eventos  particulares.  Solamente  se  relacionan  aquí  las propiedades y métodos comunes a todos los controles. Para referenciar un control del formulario o del informe activo no es obligatoria la palabra clave Me. Puede utilizar directamente el nombre del control.

2. Propiedades comunes de la mayoría de los controles a. Propiedades que devuelvan objetos Application

Permite acceder al objeto Aplicación de Microsoft Access.

Hyperlink

Devuelve una referencia a un objeto hipervínculo.

Parent

Permite  hacer  referencia  al  objeto  contenedor  de  un  control (formulario, informe...).

b. Otras propiedades Height

Devuelve o define la altura de un control.

Left

Devuelve o define la posición vertical de un control en un formulario o un informe (corresponde a la propiedad "izquierda").

OldValue

Devuelve el valor sin editar del control dependiente (valor anterior).

Top

Devuelve  o  define  la  posición  horizontal  de  un  control  en  un formulario o un informe (corresponde a la propiedad "superior").

Width

Devuelve o define el valor de un control.

3. Métodos comunes a la mayoría de los controles

Requery

Recalcula el valor de un control.

SetFocus

Mueve el foco a un control.

SizeToFit

Ajusta un control para que quepa el texto o la imagen que contiene.

UnDo

Restablece un control que había sido modificado.

4. El método Move El  método  Move  está  disponible  para  la  mayoría  (CheckBox, ComboBox,CommandButton, Image, Label, Line, TextBox...).

de 

controles

Permite  desplazar  y/o  cambiar  el  tamaño  del  control  en  función  de  las  coordenadas  indicadas  por  los valores de los argumentos. Sintaxis del método Move <expresión>.Move()

<expresión>

Designa un control, informe o formulario.

Izquierda

Obligatorio.  Posición  en  pantalla,  en  twips,  desde  el  borde  izquierdo  del objeto en relación al borde izquierdo de la ventana de Microsoft Access.

Arriba

Opcional. Posición en pantalla, en twips, desde el borde superior del objeto en relación al borde superior de la ventana de Microsoft Access.

Ancho

Opcional. Ancho deseado, en twips, del objeto.

Alto

Opcional. Alto deseado, en twips, del objeto.

Los controles de Access 1. Presentación Microsoft  Access  2013  contiene  un  interesante  número  de  controles  que  facilitan  la  elaboración  de  una aplicación. Estos controles se sitúan en formularios o informes para poder obtener la interfaz deseada. Cada uno de ellos  posee  sus  propias  características  (propiedades),  sus  propios  comportamientos  (métodos),  así  como una  lista  de  eventos  a  los  que  pueden  responder;  todo  esto  es  accesible  mediante  el  examinador  de objetos. Distinguimos dos tipos de controles: los controles intrínsecos, integrados directamente en el motor de Access, los controles ActiveX, siendo cada uno objeto de un archivo OCX. Los controles intrínsecos están todos en el cuadro de herramientas. Los  controles  ActiveX  pueden  seleccionarse  mediante  la  herramienta 

 del  cuadro  de  herramientas,

que da una lista de todos los controles ActiveX existentes en el sistema. Funcionan del mismo modo que los controles intrínsecos y se instalan en el sistema al instalar nuevos programas o mediante la adquisición de bibliotecas de controles ActiveX. La versión Office 2013 Professional permite especialmente la utilización del control Calendar (Calendario) que facilita la presentación y actualización de una fecha a partir de un calendario.

2. Lista de los controles Access Para  acceder  a  los  controles  desde  un  formulario  o  un  informe  abierto  en  Vista  Diseño,  habilite  la fichaCrear de la cinta de opciones: la lista de controles y de herramientas de edición está disponible desde el grupo Controles.

Nombre del control

Tipo de objeto VBA

1.

Cuadro de texto

TextBox

2.

Etiqueta

Label

3.

Botón

CommandButton

4.

Control de pestaña

TabControl

5.

Insertar hipervínculo

Hyperlink

6.

Control de explorador Web

WebBrowserControl

7.

Control de navegación

NavigationControl

8.

Grupo de opciones

OptionButton

9.

Insertar o quitar salto de página

PageBreak

10.

Cuadro combinado

ComboBox

11.

Insertar gráfico

Chart

12.

Línea

Line

13.

Botón de alternar

ToggleButton

14.

Cuadro de lista

ListBox

15.

Rectángulo

Rectangle

16.

Casilla de verificación

CheckBox

17.

Marco de objeto independiente

UnboundObjectFrame

18.

Datos adjuntos

Attachment

19.

Botón de opción

OptionButton

20.

Subformulario / Subinforme

SubForm / SubReport

21.

Marco de objeto dependiente

BoundObjectFrame

22.

Imagen

Image

Las opciones de inicio Las opciones de inicio de Access 2013 permiten definir el aspecto y el comportamiento de la aplicación cuando ésta se abre. Para modificar las opciones de inicio:   Seleccione el comando Opciones de la pestaña Archivo.   Seleccione la categoría Base de datos actual. La  mayor  parte  de  estas  opciones  corresponden  a  las  propiedades  de  la  base  de  datos  actual (objetoCurrentDb) y se pueden modificar por medio del lenguaje VBA: Propiedad VBA

Descripción

Tipo

AllowFullMenus

Permitir menús completos

Boleano

AllowShortcutMenus

Permitir  los  menús  contextuales  por defecto

Boleano

AllowSpecialKeys

Permitir las teclas especiales Access

Boleano

AppIcon

Icono de la aplicación

Texto

AppTitle

Título de la aplicación

Texto

AutoCompact

Compactar  la  base  de  datos  cuando  se cierre

Boleano

RemovePersonalInformation

Eliminar  la  información  personal  en  el registro de la base de datos

Boleano

StartupForm

Nombre  del  formulario  que  se  muestra al abrir la base de datos

Texto

StartupShortcutMenuBar

Nombre de la barra de menu contextual

Texto

StartupShowStatusBar

Mostrar la barra de estado

Boleano

ThemedFormControls

Utilizar  los  controles  con  el  tema  de Windows en los formularios

Boleano

UseAppIconForFrmRpt

Utilizar  el  icono  de  la  aplicación  como icono de formulario e informe

Boleano

Para modificar una propiedad con ayuda del lenguaje VBA, debe utilizar la colección Propiedades del objeto Database. Si la propiedad no ha sido definida aún, deberá crearla mediante el método CreateProperty. El ejemplo siguiente permite modificar algunas opciones de inicio. Sub ModificaOpciones()      Dim intX As Integer  ’    Título de la aplicación      intX = AddAppProperty("AppTitle", DB_Text, _      "Gestión de los cursos")  ’    Icono de la aplicación      intX = AddAppProperty("AppIcon", DB_Text, "C:\Cursos\Curso.bmp")  ’    Opción "Utilizar como icono de formulario o de informe"      intX = AddAppProperty("UseAppIconForFrmRpt", DB_BOOLEAN, 1)  ’    Opción "Compactar al cerrar"      intX = AddAppProperty("Auto Compact", DB_BOOLEAN, 1)  End Sub

Function AddAppProperty(strName As String, _          varType As Variant, varValue As Variant) As Integer      Dim dbs As Object, prp As Variant 

    Const conPropNotFoundError = 3270   ’    Modifica el valor de la propiedad      Set dbs = CurrentDb      On Error GoTo AddProp_Err      dbs.Properties(strName) = varValue      AddAppProperty = True  AddProp_Bye:      Exit Function  AddProp_Err:  ’   En caso de error agrega la propiedad  ’   mediante el método CreateProperty      If Err = conPropNotFoundError Then          Set prp = dbs.CreateProperty(strName, varType, varValue)          dbs.Properties.Append prp          Resume      Else          AddAppProperty = False          Resume AddProp_Bye      End If  End Function

Personalización de la cinta de opciones 1. Presentación En Access 2013, se puede personalizar íntegramente el aspecto de la cinta de opciones mediante lenguaje XML. Este lenguaje permite: ocultar las fichas existentes. crear nuevas fichas, grupos de comandos y comandos. personalizar la presentación de los comandos mediante iconos. asociar macros o código VBA a los comandos. ver comandos integrados en Access. El código XML puede ser almacenado en varios lugares pero se recomienda encarecidamente almacenarlo en  una  tabla  del  sistema  de  la  base  de  datos.  Las  cintas  de  opciones  creadas  en  lenguaje  XML  pueden asociarse a la aplicación Access o únicamente a algunos formularios e informes.

2. Configuración de Access para la personalización de la cinta de opciones Para poder crear y probar mejor su código XML, se recomienda modificar las opciones siguientes:

a. Mostrar las tablas del sistema en el panel de navegación De  manera  predeterminada,  las  tablas  del  sistema  no  se  muestran  en  el  panel  de  navegación  y  por tanto, no podrá acceder a la tabla del sistema que permite almacenar el código XML. Para modificar esta opción:   Haga clic con el botón secundario del ratón en la barra de navegación situada en la parte superior delpanel de navegación.   Seleccione la opción Opciones de navegación en el menú contextual.   En el cuadro de diálogo Opciones de navegación, active la opción Mostrar objetos del sistemay a continuación haga clic en el botón Aceptar.

b. Mostrar mensajes de error contenidos en el código XML De  manera  predeterminada,  los  mensajes  de  error  detectados  en  el  código  XML  no  se  muestran.  Por tanto,  si  su  código  XML  contiene  errores,  la  cinta  de  opciones  no  aparecerá  y  será  difícil  identificar  la causa del error. Para modificar esta opción:   Seleccione el comando Opciones de la pestaña Archivo.   Seleccione la categoría Configuración de cliente.   Seleccione  la  opción  Mostrar  errores  de  interfaz  de  usuario  en  el  complemento  debajo deGeneral.   Haga clic en el botón Aceptar. Si se detecta un error durante la ejecución del código XML que permite generar la cinta personalizada, aparece un mensaje de error. Este mensaje indica el número de línea y de columna del código en el que

se encuentra el error así como la descripción del error. Ejemplo:

3. Creación de una tabla del sistema USysRibbons La  tabla  del  sistema  USysRibbons  permite  almacenar  el  código  XML  que  permitirá  crear  una  o  varias cintas de opciones. Para crear esta tabla:   Vaya a la ficha Crear.   En el grupo Tablas, haga clic en Diseño de tabla.   Inserte los campos siguientes: RibbonId

Autonumérico

RibbonName

Texto de 255 caracteres

RibbonXML

Memo

  Seleccione  el  campo  RibbonId  y  haga  clic  en  el  comando  Clave  principal  (situado  en  el grupoHerramientas de la ficha Diseño).   Haga clic en Guardar desde la barra de herramientas de Acceso rápido.   Asigne a la nueva tabla el nombre USysRibbons.

4. Adición de código XML de personalización a la tabla USysRibbons Para  asociar  código  XML  a  su  tabla  USysRibbons,  la  solución  más  sencilla  es  generar  un  formulario específico. Para ello:   Seleccione la tabla USysRibbons en el panel de navegación.   Vaya a la ficha Crear y a continuación haga clic en Formulario en el grupo Formularios.   Introduzca el nombre de la cinta de opciones y el código XML asociado en el formulario. Ejemplo: El código XML siguiente permite ocultar las fichas Crear y Datos externos de la Cinta de opciones:

Para facilitar la introducción y la lectura del código XML, puede utilizar un editor XML o un software de desarrollo (ejemplos: Visual Web Developer Express disponible para su descarga desde el sitio web de Microsoft, Microsoft Visual Studio y su complemento Visual Studio Tools) para crear su código y copiarlo a la tabla USysRibbon.

5. Asociación de la cinta de opciones a la aplicación activa   Seleccione el comando Opciones de la pestaña Archivo.   Seleccione la categoría Base de datos actual en el menú de la izquierda.   Inserte  el  nombre  de  la  cinta  (por  ejemplo:  Cinta1)  en  la  lista  Nombre  de  banda  de opcionesdebajo de Opciones de barra de herramientas y de cinta de opciones.

  Haga clic en el botón Aceptar. Aparecerá el mensaje siguiente:

  Cierre la base de datos y vuelva a abrirla para activar la nueva cinta de opciones.  El  código  XML  de  la  cinta  de  opciones  se  ejecuta  al  abrir  la  base  de  datos.  Para  probar  las modificaciones introducidas en el código XML, siempre deberá cerrar y volver a abrir la base de datos.

6. Asociación de la cinta de opciones a un formulario o a un informe   Abra el formulario o el informe en vista Diseño.   Muestre la hoja de propiedades del formulario o del informe.   En la ficha Otras de la hoja de propiedades, haga clic en la lista Nombre de banda de opciones y seleccione la cinta que desee que se muestre cuando se abra el formulario o el informe.

  Guarde y cierre el formulario.   Abra el formulario en Vista Formulario: aparece entonces la cinta de opciones seleccionada. Al cerrar el formulario, la cinta de opciones asociada a la aplicación será restaurada.

Presentación del lenguaje XML 1. El lenguaje XML El lenguaje XML (eXtensible Markup Language ­ Lenguaje de marcado extensible) es el lenguaje estándar de descripción y de intercambio de datos, utilizado especialmente en la web. Igual  que  el  lenguaje  HTML,  el  lenguaje  XML  utiliza  marcas  activas  (o  etiquetas)  para  delimitar  un contenido. Una marca activa es fácilmente identificable porque comienza con el carácter < y termina con el carácter > (las marcas activas de fin de contenido comienzan por /).

2. Elementos XML utilizados para personalizar la cinta de opciones a. Principales marcas activas XML utilizadas en el código XML de una cinta de opciones Nombre de la marca

Descripción

<customUI>

Marca principal de una cinta de opciones personalizada



Marca que contiene la descripción de la cinta de opciones



Menú accesible desde el botón Microsoft Office



Ficha en la cinta de opciones



Grupo de una ficha en la cinta de opciones



Etiqueta (título)


Related Documents

Excel Vba Good Book
January 2021 1
Apostila Excel Vba
February 2021 2
Vba Excel 2013.pdf
February 2021 0
Vba
January 2021 2
Vba Training03
January 2021 0

More Documents from "RMamac"

Vba Excel 2013.pdf
February 2021 0
January 2021 5
January 2021 1
February 2021 2
Medicina Con Simbolos
February 2021 1