Manual 2

April 5, 2018 | Author: Jeffersson Muñoz | Category: Macro (Computer Science), Point And Click, Table (Database), Databases, Window (Computing)
Share Embed Donate


Short Description

Download Manual 2...

Description

Tabla de Contenido MEJORANDO LA PRESENTACIÓN Y VISUALIZACIÓN DE LOS DATOS CON FORMULARIOS ..................................................................................................................... 1 Conceptos previos………………………………………………………………………………2 ASISTENTE PARA FORMULARIOS Y AUTOFORMULARIOS ............................................................. 16 Actividad 1: Crear Formulario usando asistente............................................................... 19 PROPIEDADES DEL FORMULARIO ............................................................................................. 21 Propiedades de Formato................................................................................................. 21 Propiedades de Datos..................................................................................................... 22 Actividad 2: Formulario sin acceso a datos.................................................................... 25 AUTOFORMATO ................................................................................................................... 27 VISTAS: FORMULARIO, PRESENTACIÓN Y DISEÑO.................................................................... 28 EDITAR CONTROLES ............................................................................................................ 31 Seleccionar controles.................................................................................................... 32 Cambiar las dimensiones .............................................................................................. 34 Ajustar .......................................................................................................................... 34 Mover ........................................................................................................................... 34 Alinear .......................................................................................................................... 35 Eliminar controles ......................................................................................................... 35 Agregar controles.......................................................................................................... 35 Propiedades de los controles ........................................................................................ 42 Cuadros combinados .................................................................................................... 44 Actividad 3: Insertar una etiqueta .................................................................................. 53 Actividad 4: Editar los controles de un formulario .......................................................... 53 Actividad 5: Agregar etiquetas, cajas de texto y fichas................................................... 54 FORMULARIOS CONTINUOS ................................................................................................... 56 Actividad 6: Crear un formulario continuo ...................................................................... 56 Pie de formulario........................................................................................................... 56 Encabezado de formulario ............................................................................................ 58 Actividad 7: Cuadro combinado en el encabezado ........................................................ 58 SUBFORMULARIOS ............................................................................................................... 59 Actividad 8: Subformulario creado manualmente ........................................................... 60 Utilizar el asistente para Subformularios/Subinformes Campos vinculados entre formulario padre y formulario hijo .................................................................................. 61 Actividad 9: Subformulario empleando el asistente para formularios.............................. 64 Modificar el diseño del subformulario ............................................................................ 64 PREGUNTAS DE REPASO ...................................................................................................... 64 Actividad propuesta 1 ...................................................................................................... 65 EJERCICIOS CASOS PROPUESTOS......................................................................................... 65 Actividad propuesta 2 ...................................................................................................... 66 Actividades de investigación............................................................................................. 67 UTILIDADES ........................................................................................................................ 69 FORMAS DE ABRIR UNA BASE DE DATOS ................................................................................. 70 SEGURIDAD ........................................................................................................................ 74 Cifrar una Base de Datos mediante contraseña............................................................. 77 Descifrar una base de datos.......................................................................................... 78 Quitar contraseña de una Base de Datos ...................................................................... 78 Uso del centro de confianza .......................................................................................... 79 COMPACTAR Y REPARAR UNA BD.......................................................................................... 80 CONVERTIR A OTRAS VERSIONES .......................................................................................... 82 Los formatos ACCDB y MDB ........................................................................................ 84 Convertir una base de datos al formato de archivos de Access 2007............................. 85 PREGUNTAS DE REPASO ...................................................................................................... 86

TRABAJANDO CON DATOS EXTERNOS ........................................................................... 87 IMPORTAR .......................................................................................................................... 89 Access.......................................................................................................................... 89 Excel ............................................................................................................................ 90 Lista de SharePoint....................................................................................................... 93 Archivo de texto ............................................................................................................ 96 Actividad 1 : Importar de un Archivo de Texto............................................................... 97 Archivo XML ................................................................................................................. 100 EXPORTAR ......................................................................................................................... 102 Excel ............................................................................................................................ 103 Un archivo RTF de Word............................................................................................... 107 Lista de SharePoint....................................................................................................... 107 Archivo de texto ............................................................................................................ 109 Archivo XML ................................................................................................................. 111 PREGUNTAS DE REPASO ...................................................................................................... 112 EJERCICIOS CASOS PROPUESTOS......................................................................................... 112 MACROS Y OPCIONES DE INICIO ...................................................................................... 113 BOTONES DE COMANDO EN FORMULARIOS ........................................................................... 114 El asistente para controles .......................................................................................... 114 MACROS .......................................................................................................................... 115 Asignar macros a controles en formularios .................................................................. 126 Macro Autoexec.......................................................................................................... 128 OPCIONES DE EXPLORACIÓN............................................................................................... 115 Crear Categorías ........................................................................................................ 130 Cambiar entre categorías............................................................................................ 136 Ordenar categorías ..................................................................................................... 137 Vistas ......................................................................................................................... 137 OPCIONES DE LA BASE DE DATOS ........................................................................................ 137 Formulario o página inicial .......................................................................................... 137 Agregar barra de menús personalizada. ...................................................................... 139 Actividad propuesta 1 .................................................................................................... 144 PREGUNTAS DE REPASO .................................................................................................... 144 EJERCICIOS CASOS PROPUESTOS....................................................................................... 144 PROGRAM ACIÓN CON VBA ............................................................................................. 145 USO DE VBA EN ACCESS ................................................................................................... 147 Actividad 1: Crear un Formulario ................................................................................. 148 Actividad 2: Uso de la ventana Inmediato .................................................................... 157 Actividad 3: Uso de Variables...................................................................................... 160 Actividad 4: Uso de Procedimientos y Funciones ........................................................ 163 Actividad 5: Funciones en Formularios ........................................................................ 168 Declaracion de Variables ............................................................................................ 173 Estructuras de Control. ............................................................................................... 183 Estructuras de Decisión. ............................................................................................. 183 Estructuras de Bucle. .................................................................................................. 188 Errores en Tiempo de Diseño...................................................................................... 201 Errores en Tiempo de Ejecución ................................................................................. 202 Tipos de Operadores .................................................................................................. 203 EDITANDO EL CÓDIGO DE LAS MACROS DE ACCESS ............................................................... 214 Código frente a macros............................................................................................... 214 Los modelos de objetos de Access ............................................................................. 216 USO DE CONTROLES ACTIVE X ............................................................................................ 223 Agregando controles en el Formulario ......................................................................... 223

Editando el código de los controles ActiveX ................................................................ 226 Microsoft Data Access Objects (DAO) ......................................................................... 230 Microsoft Jet Replication Projects (JRO) ..................................................................... 232 Microsoft ActiveX Data Objects (ADO) ........................................................................ 233 PREGUNTAS DE REPASO .................................................................................................... 234 EJERCICIOS CASOS PRACTICOS .......................................................................................... 235

Capítulo

Mejorando la presentación y visualización de los datos con Formularios en ACCESS En este capítulo trataremos: 

Crear formularios.



Utilizar el asistente de formularios.



Modificar las propiedades de los formularios



SENATI-Computación e Informática

Agregar campos a un formulario y modificar sus propiedades

1

Conceptos Previos: Una base de datos es un “gran almacén de datos” que nos permite guardar grandes volúmenes de información de forma organizada para que luego podamos ubicar y utilizar estos datos de forma fácil y eficiente. Una base de datos o banco de datos (Database en Ingles) es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. En la actualidad, y desde el punto de vista informático la base de datos es un sistema formado por un conjunto de datos almacenados en discos (formato digital) que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos.

Descripción y visualización general de elementos de las Bases de Datos de Access

los

múltiples

Archivos de base de datos de Access Puede utilizar Access para administrar todos sus datos en un solo archivo. Dentro de un archivo de base de datos de Access, puede utilizar:  Tablas para almacenar los datos.  Consultas para buscar y recuperar exactamente los datos que desee.  Formularios para ver, agregar y actualizar datos en las tablas.  Informes para analizar o imprimir los datos con un diseño específico.

2

SENATI-Computación e Informática

Todos estos elementos: tablas, consultas, formularios e informes son objetos de bases de datos (objetos de base de datos: una base de datos de Access contiene objetos como tablas, consultas, formularios, informes, macros y módulos. Un proyecto de Access contiene objetos como formularios, informes, macros y módulos.). Nota: Algunas bases de datos de Access contienen vínculos a tablas que están almacenadas en otras bases de datos. Por ejemplo, puede tener una base de datos de Access que no contenga nada más que tablas y otra base de datos de Access que contenga vínculos a esas tablas, así como consultas, formularios e informes basados en las tablas vinculadas. En la mayoría de los casos, no tiene importancia si se trata de una tabla vinculada o si está realmente almacenada en la base de datos.

Tablas Una tabla es una colección de datos sobre un tema específico, como alumnos, profesores, vehículos, distritos, productos o proveedores. La utilización de una tabla diferente para cada tema, significa que se almacenan los datos una sola vez, lo cual aumenta la eficacia de la base de datos, y reduce errores de entrada de datos. No debe almacenar información de dos temas diferentes en la misma tabla. Imagine que usted administra una cadena de tiendas que posee cinco locales de venta y desea modificar el precio de un producto. Si los datos están centralizados usted sólo tendrá que cambiar el precio una vez y ese cambio se verá reflejado en todos los establecimientos. De lo contrario tendrá que ir de tienda en tienda haciendo las modificaciones. Las tablas organizan datos en columnas (denominadas campos) y filas (denominadas registros). Tal como se muestra a continuación. Campo Componente de una tabla que contiene un elemento específico de información, como por ejemplo un apellido. Un campo se representa como una columna.

SENATI-Computación e Informática

3

Registro Es una colección de información acerca de cualquier entidad, ya sea persona, producto, proveedor, o cualquier otra cosa. Cada registro en una tabla contiene el mismo conjunto de campos. Se puede afirmar que un registro se confirma de campos. Un error muy frecuente es guardar el nombre del vendedor, el nombre del cliente, la dirección del cliente y los productos que llevó en la misma tabla. Debe utilizarse diferentes tablas para guardar la información de los vendedores, clientes, y productos. Luego se guardarán los códigos que identifican de forma única a cada vendedor y cliente en la tabla facturas, nunca sus nombres. Luego se relacionarán las tablas para obtener la información necesitada. Respecto a los productos, estos deben guardarse en otra tabla de detalles de facturación, junto con las cantidades pedidas y los precios a la fecha de la compra.

4

SENATI-Computación e Informática

Consultas Una consulta puede ayudarle a recuperar los datos que cumplen las condiciones que especifique, incluidos los datos de varias tablas. También puede utilizar una consulta para actualizar o eliminar varios registros a la vez y realizar cálculos predefinidos o personalizados con los datos.

SENATI-Computación e Informática

5

Formularios Se puede utilizar un formulario para ver, introducir o cambiar los datos de filas de una en una fácilmente. También se puede utilizar un formulario para realizar otras acciones, como enviar datos a otra aplicación. Los formularios contienen normalmente controles que están vinculados a campos subyacentes de las tablas. Al abrir un formulario, Access recupera los datos de una o más tablas y los muestra en el diseño que haya elegido al crear el formulario. Puede crear un formulario mediante uno de los comandos Formulario de la cinta de opciones, el Asistente para formularios, o crear su propio formulario en la vista Diseño.

6

SENATI-Computación e Informática

I Informes Los informes se pueden utilizar para analizar rápidamente los datos o presentarlos de una forma concreta, impresos o en otros formatos. Por ejemplo, puede enviar a un colega un informe que clasifique los datos y calcule los totales. O puede crear un informe con los datos de la dirección en un formato para imprimir etiquetas postales.

Macro Puede crear una macro (macro: acción o conjunto de acciones utilizados para automatizar tareas.) para realizar un conjunto específico de acciones (acción: componente básico de una macro; instrucción independiente que se puede combinar con otras acciones para automatizar tareas. A veces se denomina comando en otros lenguajes de macros.), y puede crear un grupo de macros (grupo de macros: colección de macros relacionadas que se almacenan juntas bajo un único nombre de macro. A menudo, se hace referencia a la colección simplemente como una macro.) Para realizar conjuntos de acciones relacionadas.

SENATI-Computación e Informática

7

En Microsoft Office Access 2007, las macros pueden estar incluidas en objetos de macro (que a veces reciben el nombre de macros independientes) o incrustadas en las propiedades de evento de formularios, informes o controles. Las macros incrustadas forman parte del objeto o control en el que están incrustadas. Los objetos de macro se pueden ver en el panel de exploración, bajo Macros, pero no ocurre lo mismo con las macros incrustadas.

Ejemplo del diseño de una macro.

Módulos Un módulo es una colección de declaraciones y procedimientos de Visual Basic para aplicaciones que se almacenan juntos en un objeto denominado módulo. Se requiere conocimientos de programación en Visual Basic.

8

SENATI-Computación e Informática

C r Crear una base de datos en blanco 1. En la página Introducción a Microsoft Office Access, en Nueva base de datos en blanco, haga clic en Base de datos en blanco. 2. En el panel Base de datos en blanco, escriba un nombre de archivo en el cuadro Nombre de archivo. Si no especifica una extensión de nombre de archivo, Access la agrega automáticamente. Para cambiar la ubicación predeterminada del archivo, haga clic en Buscar una ubicación donde colocar la base de datos (situado junto al cuadro Nombre de archivo), busque la nueva ubicación y, a continuación, haga clic en Aceptar.

3. Haga clic en Crear. Access crea la base de datos con una tabla vacía denominada Tabla1 y, a continuación, abre Tabla1 en la vista Hoja de datos. El cursor se sitúa en la primera celda vacía de la columna Agregar nuevo campo. 4. Comience a escribir para agregar datos o puede pegar datos de otro origen.

Escribir información en la vista Hoja de datos es muy similar a trabajar en una hoja de cálculo de Microsoft Office Excel 2007. La estructura de la tabla se crea conforme se

SENATI-Computación e Informática

9

escriben los datos: cuando se agrega una nueva columna a la tabla, se define un nuevo campo. Access define automáticamente el tipo de datos de cada campo en función de los datos que escribe. Si, de momento, no desea incluir información en Tabla1, haga clic en Cerrar . Si realizó cambios en la tabla, Access le pedirá que guarde los cambios efectuados en la tabla. Haga clic en Sí para guardar los cambios, haga clic en No para descartarlos o haga clic en Cancelar para dejar la tabla abierta. Importante Si cierra Tabla1 sin guardar los cambios al menos una vez, Access elimina toda la tabla, aunque haya escrito datos en ella.

Crear tablas en la Vista Diseño de la tabla Desde esta opción podremos definir todos los campos de la tabla detalladamente con todas sus características. Esta opción le da más control al usuario sobre la tabla que define y, por tanto, la opción que vamos a utilizar en este capítulo para crear las tablas de nuestras bases de datos.

De nuestro anterior ejemplo hacer Clic Derecho sobre la ficha Tabla1 y pulse sobre Cerrar Todo y luego no guarde los cambios. Luego ir a la ficha Crear, grupo Tablas y hacer Clic sobre el comando Diseño de tabla. Luego MS Access despliega la siguiente interface:

10

SENATI-Computación e Informática

C Creación de Campos Los elementos de información de los que se desea realizar un seguimiento se almacenan en campos (denominados también columnas). Por ejemplo, en una tabla Contactos podría crear campos para el apellido, el nombre, el número de teléfono y la dirección, entre otros. Para una tabla Productos, podría crear campos para el nombre del producto, el identificador de producto y el precio. Es importante elegir los campos con cuidado. Por ejemplo, no es recomendable crear un campo para almacenar un campo calculado; es mejor dejar que Office Access 2007 calcule el valor cuando sea necesario. Cuando elija los campos, intente almacenar la información en sus partes más pequeñas posibles. Por ejemplo, en lugar de almace nar un nombre completo, es preferible almacenar el apellido y el nombre por separado. Por regla general, si necesita realizar informes, ordenar o realizar búsquedas o cálculos con un elemento de información, ponga ese elemento en una columna independiente. Un campo tiene determinadas características que lo definen. Por ejemplo, cada campo tiene un nombre que lo identifica inequívocamente dentro de la tabla. También tiene un tipo de datos en consonancia con la información que almacena. El tipo de datos determina los valores que se pueden almacenar y las operaciones que se pueden realizar, así como la cantidad de espacio de almacenamiento provista para cada valor. Cada campo tiene también un grupo de opciones denominadas propiedades que definen las características formales o funcionales del campo. Por ejemplo, la propiedad Formato define el formato de presentación del campo, es decir, qué apariencia tendrá cuando se muestre.

Condición para las relaciones Uno de los objetivos de un buen diseño de base de datos es eliminar la redundancia de los datos (datos duplicados). Para lograr dicho objetivo, conviene desglosar los datos en muchas tablas basadas en temas para que cada hecho esté representado sólo una vez. A continuación, se debe proporcionar a MS Access los medios para recopilar de nuevo la información desglosada (esto se realiza colocando campos comunes en tablas que están relacionadas). Sin embargo, para realizar este paso correctamente, primero deberá comprender las relaciones existentes entre las tablas y, a continuación, especificar dichas relaciones en la base de datos de MS Access. Tras crear una tabla para cada tema en la base de datos, es preciso proporcionar a MS Access los medios para recopilar de nuevo esa información cuando sea necesario. Para ello, se colocan campos comunes en las tablas que están relacionadas y se definen las relaciones entre las tablas. De ese modo, se pueden crear consultas, formularios e informes que muestren a la vez la información de varias tablas. Por ejemplo, el formulario que se muestra a continuación incluye información recopilada de varias tablas:

SENATI-Computación e Informática

11

1. Tabla Clientes 2. Tabla Vendedor 3. Tabla Pedidos 4. Tabla Productos 5. Tabla Detalles del Pedido El nombre de cliente del cuadro Facturar a se obtiene de la tabla Clientes, los datos del vendedor de la tabla Empleados, los valores de Id. de pedido y Fecha de pedido proceden de la tabla Pedidos, el nombre de producto viene de la tabla Productos, y los valores Precio por unidad y Cantidad proceden de la tabla Detalles del pedido. Estas tablas se vinculan entre sí de varias formas para recopilar información de cada una e incorporarla al formulario. Imagine que tiene una tabla de productos y otra de pedidos. En una base de datos correctamente estructurada, la primera tabla contendrá toda la información concerniente a los productos (descripciones, medidas y todas las especificaciones que desee) mientras que en la segunda se representará a los productos solamente por medio de un identificador. No es necesario que incluya más información pues si usted puede distinguir cuál es el producto entonces podrá consultar todos sus detalles en la primera tabla. En el ejemplo anterior las tablas Producto y Pedido estarán relacionadas a través del identificador del producto. En la primera tabla esta columna será la clave principal y en la segunda será considerada una clave foránea. Es una buena costumbre emplear un mismo prefijo para todos los campos de una tabla sin embargo las claves foráneas no deberían seguir esta regla. Por ejemplo, dos de los campos de la tabla Producto pueden ser IdProducto y DetalleProducto mientras que los campos de la tabla Pedido podrían ser IdPedido, FechaDeEntrega, IdProducto y CantidadPedida. 12

SENATI-Computación e Informática

O t Otra alternativa correcta sería colocar IdPedido, FechaDeEntrega, IdPedidoProducto, CantidadPedida. Esto para evitar duplicar el nombre los nombres de campo en la base de datos, de tal manera que si se hace referencia al código de producto en la tabla Producto se utilice IdProducto y para hacer referencia al código del producto en la tabla Pedido se utilice IdPedidoProducto. En realidad debe tratar de buscar un mismo criterio y aplicarlo a través de todas las tablas. En los ejemplos subsiguientes se utilizará la primera sugerencia (IdPedido, FechaDeEntrega, IdProducto y CantidadPedida)

A la tabla que contiene a la clave principal se le llama tabla principal y a la que contiene la clave foránea se le denomina tabla secundaria. Otras consideraciones para crear relaciones: 1. Debe haber un campo común en ambas tablas 2. Uno de las campos comunes debe ser clave principal, no olvide que un campo clave principal no puede ser: Un campo de búsqueda de Objeto OLE, Memo, Datos Adjuntos o Varios valores. 3. Los campos comunes podrían tener o no el mismo nombre de campo, pero no pueden diferir en el tipo de dato.

Crear relaciones Se puede crear una relación de tabla mediante la ventana Relaciones o arrastrando un campo en una hoja de datos desde el panel Lista de campos. Cuando se crea una relación entre tablas, los campos comunes no tienen que tener los mismos nombres, si bien sus nombres suelen coincidir. Sin embargo, dichos campos tienen que tener el mismo tipo de datos.

SENATI-Computación e Informática

13

No obstante, si el campo de clave principal es un campo Autonumérico, el campo de clave externa puede ser un campo de tipo Número si la propiedad Tamaño del campo de ambos campos tiene el mismo valor. Por ejemplo, puede hacer coincidir un campo Autonumérico y un campo de tipo Número si la propiedad Tamaño del campo de ambos campos es Entero largo. Cuando ambos campos comunes son campos de tipo Número, tienen que tener el mismo valor para la propiedad Tamaño del campo.

Crear una relación de tabla mediante la ventana Relaciones Para nuestro ejemplo trabajaremos con la base de datos Control de Pedidos de la carpeta capitulo 3, si es que no estaba activa, abrir la base de datos, luego: 1.

En el grupo Mostrar u ocultar de la ficha Herramientas de base de datos, haga Clic en Relaciones.

2.

Si aún no ha definido ninguna relación, aparecerá automáticamente el cuadro de diálogo Mostrar tabla. Si no aparece, en la ficha Diseño, en el grupo Relaciones, haga clic en Mostrar tabla. En el cuadro de diálogo Mostrar tabla se muestran todas las tablas y consultas de la base de datos. Para ver únicamente las tablas, haga clic en Tablas. Para ver únicamente las consultas, haga clic en Consultas. Para ver las tablas y las consultas, haga clic en Ambas.

3. Luego de seleccionar las tablas y aceptar se muestra la ventana relaciones con las listas de campos de las tablas seleccionadas 4. Al mostrarse las tablas en la ventana Relaciones, usted verá que en cada una de ellas la clave principal se muestra en negrita y el icono de una llave al costado. 5. Cree la relación arrastrando la clave principal de la tabla Principal hasta la clave foránea de la tabla secundaria o viceversa. Por ejemplo, en la ilustración anterior, se puede arrastrar el campo IdCliente de la tabla Cliente hasta el campo IdCLiente de la tabla Pedido.

14

SENATI-Computación e Informática

6. Después de haber efectuado el arrastre se mostrará el cuadro de diálogo:

7. Active la exigencia de integridad referencial y hacer Clic en el botón Crear.

8. El gráfico anterior muestra la relación de uno a varios entre las tablas Cliente y Pedido. 9. Continúe con las demás relaciones de tal modo que obtengamos un resultado como se muestra en la siguiente grafica:

SENATI-Computación e Informática

15

Asistente para Formularios y Autoformularios Los formularios constituyen la interfaz más común entre el usuario y los datos contenidos en las tablas. A través de ellos se puede presentar los datos en forma jerárquica atendiendo a las relaciones que existen entre las tablas. También pueden incluirse controles que muestren imágenes propias de cada registro e incluso es posible crear formularios que no muestren registros pero que permitan “navegar” ent re los distintos objetos que posea la base de datos Uno de los caminos más cortos para crear formularios es emplear el asistente para formularios. Para hacer uso de él ejecute el siguiente procedimiento: 1. Haga clic en la ficha Crear, en la Cinta Formularios, Opción Mas Formularios y elegir Asistente para Formularios.

2. Al iniciar el asistente, seleccione la tabla o consulta desde la que serán tomados los datos. Si los datos que necesita ver en el formulario se encuentran en dos o más tablas, puede crear primero una consulta que las relacione y después crear el formulario.

16

SENATI-Computación e Informática

Formularios 3. Seleccione los campos que desea incluir en el formulario. Para esto usted puede:

Hacer doble clic convenientemente en cada uno de los campos de la lista izquierda. También puede seleccionar un campo y luego emplear el botón >. Si desea seleccionar todos los campos, haga uso del botón >>. Para deseleccionar campos haga doble clic en los elementos de la lista derecha o emplee los botones < o ) para moverlo a la lista Campos seleccionados. Observe que debe seleccionar los campos que desee dejar visibles además del campo que desea que suministre el valor que se almacena al realizar una selección en la columna de búsqueda. Cuando termine, haga clic en Siguiente.

50

SENATI-Computación e Informática

Formularios

El Asistente para búsquedas muestra una página que permite especificar un campo o campos que puede usar para ordenar la columna de búsqueda. Esta ordenación es opcional. Cuando termine, haga clic en Siguiente.

Puede ajustar el ancho de las columnas que aparecerán en la columna de búsqueda. Si reduce el ancho de un campo para que ya no esté visible, no aparecerá en la columna de búsqueda. Por ejemplo, puede usar esta función para impedir que se muestre una columna de Id. Cuando termine, haga clic en Siguiente.

SENATI-Computación e Informática

51

Al seleccionar una fila de la columna de búsqueda, puede almacenar un valor de dicha fila en la base de datos o usar el valor posteriormente para realizar una acción. Esta página del asistente, que se muestra en la siguiente figura, permite elegir el campo que suministra dicho valor. Debe elegir un campo que identifique de forma exclusiva la fila. Normalmente, el campo de clave principal de la tabla de origen resulta una buena elección. Cuando termine, haga clic en Siguiente.

En la página final del Asistente para búsquedas, debe escribir un nombre para la columna de búsqueda; éste se convertirá en el nombre del campo de la tabla.

Si desea permitir la selección de más de un valor cuando aparece la columna de búsqueda y, a continuación, almacenar varios valores, active la casilla de verificación Permitir varios valores. Observe que activar esta casilla de verificación cambia la columna de búsqueda por un campo multivalor.

52

SENATI-Computación e Informática

Formularios

Actividad 3: Insertar una etiqueta En la base de datos PersForm modificará el formulario Bienvenida para que se muestre como la siguiente ilustración:

Procedimiento 1. Abra el formulario en vista diseño. Etiqueta

2. En el cuadro de herramientas, haga clic en el icono etiqueta y luego haga clic en el formulario. 3. Escriba Comercial DOUP y luego haga clic fuera del control pero dentro del formulario. 4. Puede seleccionar la etiqueta y modificar su fuente, tamaño y demás características. 5. Muestre la vista formulario, guarde y cierre.

Actividad 4: Editar los controles de un formulario En la base de datos PersForm, usted creará un formulario con la tabla Trabajador empleando el asistente para formularios y lo modificará que se vea como se muestra en la siguiente ilustración:

Aspecto final del formulario Procedimiento

SENATI-Computación e Informática

53

Microsoft Office

1. Emplee el asistente para formularios a fin de crear uno que tome los campos de la tabla indicada que se muestran en la imagen. 2. Cuando el asistente le muestre el objeto terminado, cambie a la vista diseño y seleccione los cuatro primeros campos; haga clic en el menú Formato, despliegue el submenú Tamaño y active el comando Ajustar al más estrecho. 3. Repita la operación anterior con los campos Cargo y Dirección. 4. Active la vista formulario, guarde el formulario con el nombre predeterminado y ciérrelo.

Actividad 5: Agregar etiquetas, cajas de texto y fichas En la base de datos PersForm, usted modificará el formulario creado en la actividad anterior de modo que contenga un control de fichas tal como indica la siguiente ilustración:

Formulario con fichas Procedimiento 1. Active la vista diseño. 2. Aumente ligeramente el tamaño de la sección detalle del formulario arrastrando sus bordes tal como se indica en la imagen:

Cambiar el ancho y alto del formulario 54

SENATI-Computación e Informática

Formularios

3. Para colocar el control de fichas: a. Active el formulario Edición y haga clic sobre el comando Seleccionar todo. b. Efectúe la acción Cortar mediante la combinación de teclas Ctrl+X o cualquier otro método disponible. Control ficha

c. Haga clic en el botón Control ficha del cuadro de controles. d. Haga clic en la sección Detalle del formulario. e. Haga clic en la primera lengüeta del control ficha. Con esta acción usted indica que los objetos que colocará en el formulario deberán pertenecer a esta página. f. Efectúe la acción Pegar mediante la combinación de teclas Ctrl+V o cualquier otro método disponible. g. Redimensione el control ficha para que sea apropiado para las etiquetas y cajas de texto que ha colocado en él.

h. Haga doble clic sobre la primera lengüeta del control. En la propiedad Título (primera ficha de la página de propiedades), escriba Datos básicos. i.

Mueva la ventana de propiedades para que no obstaculice la visión del formulario. Sin cerrar esta ventana, haga clic en la segunda lengüeta del control ficha y escriba Datos adicionales en la propiedad Título.

4. Para los controles de la segunda ficha: a. Haga clic en la segunda lengüeta del control ficha del formulario. b. Muestre la lista de campos del formulario haciendo clic en el menú Ver y luego en el comando Lista de campos. c. Arrastre el campo traFechaNac dentro de la ficha. Cuadro de texto

d. En el cuadro de herramientas, haga clic en el botón Cuadro de texto y luego haga clic dentro de la ficha, debajo del campo que acaba de crear. e. Cambie la propiedad Título de la etiqueta, para que en ella se lea Edad. f. Cambie la propiedad Origen del control –ubicada en la segunda ficha de la ventana de propiedades-a se lea:

SENATI-Computación e Informática

55

Microsoft Office

=Ent((ahora()-traFechaNac)/365) g. Repita los pasos del c al f para la fecha de contratación y el tiempo de servicio. h. Active la vista formulario, guarde el formulario con el nombre predeterminado y ciérrelo.

Formularios continuos Los formularios continuos permiten que sean vistos los detalles de más de un registro simultáneamente, tal como se aprecia en la siguiente ilustración:

Formulario continuo para los productos Aunque la forma más sencilla de presentar un formulario en modo de formulario continuo es a través del asistente para formularios (en la distribución simplemente se selecciona la que está identificada como Tabular), también puede activar esta vista desde la propiedad Vista predeterminada que se encuentra en la ficha Formato.

Actividad 6: Crear un formulario continuo En la base de datos Persform, usted creará el formulario de la ilustración anterior. Procedimiento 1. Cree el formulario empleando el asistente. a. Haga clic en el enlace Crear un formulario utilizando el asistente en la sección Formularios de la ventana de la base de datos. b. Primer paso: tabla y campos de origen del formulario. Indique al asistente que empleará la tabla Producto y, en ella, los campos proNombre, medID, proPrecio y catId c. Segundo paso: Seleccione la distribución Tabular. d. Tercer paso: Elija el estilo Estándar (más adelante puede emplear el autoformato para cambiarlo por cualquier otro) 56

SENATI-Computación e Informática

Formularios

e. Cuarto paso: Indique que el título del formulario será Múltiples productos. 2. Modifique el diseño para que se muestre como el gráfico. a. Active la vista diseño. b. Para la sección detalle: i.

Cambie el ancho de las cajas de texto y cambie su posición

c. Para la sección del encabezado: i. Ampliar el pie

Modifique las etiquetas. Algunas necesitan que cambie su texto, otras su alineación, otras su posición y todas que las coloque en negrita.

d. Para la sección del pie: i.

Amplíe la sección arrastrando el puntero desde la parte inferior de la banda.

ii. Haga clic en el botón Cuadro de texto del cuadro de herramientas y luego haga clic en la sección Pie del formulario. iii. Modifique el texto de la etiqueta para que diga “Productos mostrados.” iv. Cambie la propiedad Origen de datos del cuadro de texto que acaba de crear para que sea: =Cuenta(proId) v. Cambie el formato del cuadro de texto de para que la alineación sea izquierda, la propiedad Estilo de fondo sea Transparente, la propiedad Efecto especial sea Sin relieve y el Estilo de los bordes sea Transparente. 3. Cambie las propiedades del formulario a. Establezca la propiedad Barras de desplazamiento al valor Sólo vertical b. La propiedad Botones de desplazamiento debe estar configurada en No. 4. Muestre la vista formulario, guárdelo con el nombre que se le sugiere (Múltiples productos) y ciérrelo.

Pie de formulario Los formularios presentan comúnmente tres secciones: encabezado, detalle y pie. Usted puede mostrar y ocultar la primera y la tercera sección a través del comando Encabezado o Pie del formulario. Es común emplear estas secciones para colocar controles de búsqueda; en el siguiente formulario el cuadro combinado se emplea para buscar el producto cuyos detalles serán mostrados.

SENATI-Computación e Informática

57

Microsoft Office

Formulario con cuadro combinado de búsqueda Es importante que usted comprenda completamente la diferencia entre los el cuadro combinado del encabezado y los dos de la sección de detalles: el primero permite buscar un registro para mostrar o modificar sus detalles, los otros dos ayudan al usuario a elegir la unidad de medida del producto y su categoría.

Encabezado de formulario Actividad 7: Cuadro combinado en el encabezado En la base de datos Persform, usted creará el formulario de la ilustración Formulario con cuadro combinado de búsqueda. Botón Tablas

Procedimiento 1. Para crear el formulario: a. Active el botón Tablas de la ventana de la base de datos. b. Haga clic sobre la tabla Producto y luego haga clic en el botón Autoformulario. Ampliar el encabezado

2. Para crear el encabezado del formulario: a. Active la vista diseño y haga visible el encabezado y pie del formulario utilizando para ello el menú Ver. b. Amplíe la sección Encabezado del formulario arrastrando la banda Detalle hacia abajo. 3. Para colocar el cuadro combinado en el encabezado: a. Asegúrese de que el asistente para controles esté activado y luego haga clic sobre el botón Cuadro combinado.

58

SENATI-Computación e Informática

Formularios

b. Haga clic sobre el encabezado. En este momento el asistente debe haber empezado a guiarlo por el proceso de configuración del control: Indique que desea que desea buscar un registro en el formulario según el valor que seleccione en el cuadro y pulse Siguiente. Haga doble clic sobre el campo proNombre para indicar que ese campo es el que empleará como origen del control y pulse Siguiente. Usted verá la lista de los nombres de productos que contiene la tabla. Haga clic en el botón Siguiente. Escriba Seleccione un producto como etiqueta del cuadro combinado y haga clic en Finalizar

Subformularios Los subformularios son formularios dentro de otros formularios y son empleados comúnmente para mostrar registros de tablas que tienen alguna relación con el origen de datos del formulario; por ejemplo, puede mostrarse los pedidos que se han hecho sobre el producto que se esté mostrando en el formulario de productos, o los recibos que corresponden al cliente que se esté viendo en el formulario de los clientes. La siguiente vista muestra un formulario que presenta en el formulario padre a las categorías y, como un subformulario, a los productos que pertenecen a aquella categoría que se muestra actualmente.

Formulario y subformulario Para crear un subformulario: 1. Muestre el formulario en vista diseño. SENATI-Computación e Informática

59

Microsoft Office

Si es necesario, cambie la propiedad Vista predeterminada del formulario al valor Un único formulario (no es posible colocar un subformulario en formularios continuos) 2. Si es necesario, modifique el tamaño de la sección Detalle de modo que quepa el subformulario que creará. 3. Asegúrese de que el Asistente para controles esté activado en el cuadro de controles. Subformulario /Subinforme

4. Haga clic en el botón Subformulario/Subinforme 5. Haga clic en la sección Detalle, el Asistente para Subformularios se iniciará. a. Indique si empleará una tabla como origen del subformulario o un formulario que se pueda tomar como tal y haga clic en el botón Siguiente. b. Si decidió emplear una tabla o consulta deberá seleccionar cuál es e indicar qué campos utilizará; haga clic en el botón Siguiente. Deberá existir un campo del formulario padre que tenga valores relacionados con un campo del formulario hijo. c. El siguiente paso es de vital importancia para el proceso: usted deberá indicar la relación que existe entre el formulario padre y el formulario hijo. Como se mencionó previamente, debe haber un campo del formulario padre que tenga valores relacionados con un campo del formulario hijo. d. Escriba el nombre del subformulario y haga clic en el botón Finalizar.

Información Cuando se crea un subformulario a partir de una tabla o consulta se genera un adicional formulario nuevo.

No cambie el nombre de un subformulario después de haberlo colocado en un formulario padre pues, si lo hace, este formulario no funcionará apropiadamente.

Actividad 8: Subformulario creado manualmente Objetivo En la base de datos Persform, usted creará el subformulario que se muestra en la imagen Formulario y subformulario. Procedimiento 1. Preparación del formulario padre: a. Empleando el enlace Crear un formulario utilizando el asistente de la ventana de la base de datos, cree un formulario que presente el Id de la categoría, su nombre y descripción. b. Muestre la vista diseño para colocar en negrita las etiquetas y ampliar la sección Detalle. 2. Para colocar el subformulario:

60

SENATI-Computación e Informática

Formularios

a. Asegúrese de que el Asistente para controles esté activado en el cuadro de controles. Subformulario /Subinforme

b. Haga clic en el botón Subformulario/Subinforme c. Haga clic en la sección Detalle, el Asistente para Subformularios se iniciará. d. Indique que empleará el formulario Múltiples productos como origen del subformulario y haga clic en el botón Siguiente. e. Para definir la relación entre el formulario padre y el hijo: 

Haga clic en el botón de opción Definir la mía propia.



En los primeros cuadros combinados (de la izquierda y derecha) elija el elemento catId



Haga clic en el botón Siguiente.

f. Escriba el nombre del subformulario y haga clic en el botón Finalizar.

Utilizar el asistente para Subformularios/Subinformes Campos vinculados entre formulario padre y formulario hijo Emplear el asistente para formularios con dos tablas o consultas puede llevarlo a crear: Un formulario convencional que tenga como origen de datos una instrucción interna (alojada en la propiedad Origen del registro del formulario) que toma campos de ambas tablas. Por ejemplo, tomando el caso de la tabla Categoría y la tabla Producto, usted puede obtener el siguiente formulario:

Formulario que muestra solamente un registro a la vez

SENATI-Computación e Informática

61

Microsoft Office

Un formulario que “llama” a otro (a través de un botón de comando) para mostrar los detalles de los registros relacionados.

Formulario que llama a otro Un formulario que contenga un subformulario.

Formulario con subformulario La presentación final que tengan los formularios depende de las indicaciones que se den en el segundo paso del asistente, de acuerdo con las siguientes indicaciones: Para obtener un formulario convencional elija que desea crear el formulario a partir de la tabla hija en la relación (en el ejemplo presentado la tabla hija es Producto)

62

SENATI-Computación e Informática

Formularios

Selección para un formulario convencional Para crear un formulario que llame a otro indique que el formulario se creará a partir de la tabla madre de la relación y que desea obtener formularios vinculados.

Selección para crear formularios vinculados Para crear un formulario con un subformulario active el botón Formulario con subformulario después de indicar que desea ver los datos a través de la tabla madre.

Selección para crear un formulario con un subformulario SENATI-Computación e Informática

63

Microsoft Office

Actividad 9: Subformulario empleando el asistente para formularios En la base de datos Persform, usted creará el formulario que se muestra en la ilustración Formulario con subformulario. Procedimiento 1. Inicie el asistente para formularios haciendo clic en el enlace Crear un formulario utilizando el asistente. 2. En el primer paso, seleccione los campos catId, catNombre y catDescrip de la tabla Categoría y los campos proNombre, medId y proPrecio de la tabla Producto. 3. En el segundo paso, indique que desea ver los datos por categoría y que debe ser creado un formulario con un subformulario tal y como se presenta en la ilustración Selección para crear un formulario con un subformulario 4. Haga clic en el botón Siguiente hasta llegar al último paso del asistente, en él, indique que el título del formulario será Categorías y productos III y que el subformulario se llamará Productos III. 5. Haga clic en el botón Finalizar, vea el resultado en la vista Formulario, guárdelo y ciérrelo.

Modificar el diseño del subformulario Para modificar un subformulario: 1. Muestre el formulario en vista diseño. 2. Haga clic dentro de la sección detalle, dentro del subformulario y haga los cambios que considere pertinentes como si estuviera en la vista diseño del formulario del subformulario.

Preguntas de Repaso 1. ¿Cómo se cambia el texto que aparece en la barra de título de un formulario? 2. ¿Qué se debe hacer para tener cuadros combinados en la vista hoja de datos de las tablas para aquellos campos que pertenecen al lado “hijo” de una relación entre dos tablas? 3. ¿Qué ventaja proporciona crear cuadros combinados de búsqueda en la vista hoja de datos de las tablas? 4. ¿Cómo se crea un cuadro de texto calculado? 5. En la siguiente imagen, señale los siguientes elementos: sección encabezado, sección de detalle, sección pie del formulario, separadores de registros, selector de registro, botones de desplazamiento, barra de desplazamiento vertical.

64

SENATI-Computación e Informática

Formularios

Nota: El texto “47 distritos en el formulario” es un campo calculado 6. ¿Cómo se cambia el formato de un formulario? 7. ¿Qué es el orden de tabulación y cómo se modifica? 8. ¿Qué debe hacerse para que un formulario creado con el botón Autoformulario presente las secciones Encabezado y Pie? 9. ¿Cómo se amplía el alto de la sección Detalle de un formulario? 10. ¿Cómo se crea un formulario continuo? 11. ¿Por qué debe haber un campo común entre un subformulario y su formulario padre?

Ejercicios Casos Propuestos Actividad propuesta 1 Abra la base de datos Transporte que emplea una empresa de transportes para el registro de sus actividades. En ella: a. Haga que la vista hoja de datos se muestre con cuadros combinados para los campos Ruta, Horario y Servicio.

SENATI-Computación e Informática

65

Microsoft Office

Vista hoja de datos de la tabla Salida b. Cree el siguiente formulario:

Actividad propuesta 2 Abra la base de datos Biblioteca y en ella: 1. Cree los formularios vinculados que se muestran a continuación:

2. Cree el siguiente formulario:

66

SENATI-Computación e Informática

Formularios

Actividades de investigación Emplee cualquier base de datos para realizar las siguientes actividades: 1. Cree el formulario mostrado en la ilustración Formulario que muestra solamente un registro a la vez de la tabla Usuario y vea qué contiene la propiedad Origen del registro del formulario. 2. Cree un cuadro combinado de búsqueda en la vista hoja de datos de una tabla y luego muestre las propiedades de búsqueda de dicho campo tal como se presenta en la siguiente ilustración:

SENATI-Computación e Informática

67

Microsoft Office

Propiedades de búsqueda del campo catID de la tabla Productos de la base de datos Persform Modifique la propiedad Ancho de columnas para que su nuevo valor sea 1;1 (dependiendo de cuál sea la configuración regional que haya sido establecida en el panel de control de Windows, es posible que usted deba escribir 1,1), guarde el diseño y muestre la vista Hoja de datos; ¿qué efecto se ha producido? ¿Es posible que un formulario que muestra un registro a la vez se convierta en un formulario continuo? ¿Qué limitaciones hay para esto?

68

SENATI-Computación e Informática

Capítulo

Utilidades En este capítulo trataremos: Establecer Seguridad en una Base de Datos Compactar y reparar una BD

SENATI-Computación e Informática

69

Microsoft Office

Formas de abrir una base de datos Abrir una base de datos de Access desde el Explorador de Windows En el Explorador de Windows, vaya a la unidad o carpeta que contiene el archivo de base de datos de Access que desea abrir y haga doble clic en la base de datos. Se inicia Access y se abre la base de datos. Abrir una base de datos en Access Si ya se está ejecutando Access, utilice el procedimiento siguiente para abrir la base de datos: 1. Haga clic en el Botón Microsoft Office Abrir.

y, a continuación, haga clic en

2. Haga clic en un acceso directo del cuadro de diálogo Abrir o en el cuadro Buscar en y, a continuación, haga clic en la unidad o carpeta que contenga la base de datos que desee. 3. En la lista de carpetas, vaya a la carpeta que contiene la base de datos. 4. Cuando encuentre la base de datos, siga uno de estos procedimientos: Haga doble clic en la base de datos para abrirla en el modo predeterminado especificado en el cuadro de diálogo Opciones de Access o en el modo establecido por una directiva administrativa. Haga clic en Abrir para abrir la base de datos para acceso compartido en un entorno de multiusuario, de manera que cualquier usuario pueda leer y escribir en la base de datos.

70

SENATI-Computación e Informática

II: Utilidades

Haga clic en la flecha situada junto al botón Abrir y, a continuación, en Abrir en modo sólo lectura para abrir la base de datos en acceso de sólo lectura y, de esta forma, poder verla pero no editarla. Otros usuarios pueden seguir leyendo y escribiendo en la base de datos. Haga clic en la flecha situada junto al botón Abrir y, a continuación, en Abrir en modo exclusivo para abrir la base de datos en acceso exclusivo. Cuando tiene una base de datos abierta en acceso exclusivo, cualquiera que intente abrir la base de datos recibe el mensaje "el archivo ya está en uso". Haga clic en la flecha situada junto al botón Abrir y, a continuación, en Abrir en modo exclusivo de sólo lectura para abrir la base de datos en acceso exclusivo. Otros usuarios pueden seguir abriendo la base de datos pero estarán limitados al modo de sólo lectura.

Si no puede encontrar la base de datos que desea abrir 1. En el cuadro de diálogo Abrir, haga clic en el acceso directo Equipo situado a la izquierda (o en el cuadro Buscar…, haga clic en Equipo).

SENATI-Computación e Informática

71

2. En la lista de unidades, haga clic con el botón secundario del mouse (ratón) en la unidad en la que cree que podría estar la base de datos y haga clic en Buscar. 3. Especifique sus criterios de búsqueda y presione ENTRAR para buscar la base de datos. 4. Si encuentra la base de datos, haga doble clic en ella en el cuadro de diálogo de búsqueda para abrirla. 5. Como la búsqueda se inició en el cuadro de diálogo Abrir, debe hacer clic en Cancelar de ese cuadro de diálogo antes de abrir la base de datos.

Sugerencias: Para abrir una de las últimas bases de datos que se hayan abiertas, haga clic en el nombre de archivo en la lista Abrir base de datos reciente en la página Introducción a Microsoft Office Access. Access abrirá la base de datos con la misma configuración de opciones que tenía cuando se abrió por última vez. Si no se muestra la lista de archivos recientemente utilizados: 1. Haga clic en el botón Microsoft Office Opciones de Access.

y, a continuación, haga clic en

2. En el cuadro de diálogo Opciones de Access, haga clic en Avanzadas.

3. En Mostrar, escriba un número en el cuadro Mostrar este número de documentos recientes (el máximo es nueve).

72

SENATI-Computación e Informática

II: Utilidades

Si está abriendo una base de datos utilizando el comando Abrir, puede ver una lista de accesos directos a bases de datos que ha abierto anteriormente haciendo clic en Documentos recientes en el cuadro de diálogo Abrir.

Abrir varias bases de datos al mismo tiempo En una única instancia de Access, puede tener sólo una base de datos abierta a la vez. Es decir, no puede iniciar Access, abrir una base de datos y después abrir otra base de datos sin cerrar la primera. Sin embargo, puede ejecutar varias instancias de Access al mismo tiempo, cada una de ellas con una base de datos abierta. Cada vez que inicia Access, abre una nueva instancia de la aplicación. Por ejemplo, para tener dos bases de datos de Access abiertas al mismo tiempo, inicie Access y abra la primera base de datos y, a continuación, inicie una nueva instancia de Access y abra la segunda base de datos.

Para disponer más de una ventana de Access en mosaico 1. Para aquellos programas que no desea organizar en mosaico, haga clic en el botón Minimizar de la esquina superior derecha de la ventana. 2. Haga clic con el botón secundario del mouse en la barra de tareas de Windows y, a continuación, haga clic en Mosaico vertical. Después de haber dispuesto las ventanas en mosaico, puede copiar y pegar datos más fácilmente, así como arrastrar y colocar objetos de base de datos en las bases de datos de Access. SENATI-Computación e Informática

73

Microsoft Office

Crear un acceso directo en el escritorio para abrir un objeto de base de datos Puede crear un acceso directo en el escritorio para abrir un objeto de base de datos de Access (por ejemplo, un formulario o informe). La base de datos se puede almacenar localmente en el equipo, remotamente en un servidor de archivos de red o en un directorio compartido. 1. Abra la base de datos que contiene el objeto para el que desea crear un acceso directo. 2. Cambie el tamaño de la ventana de Access y minimice cualquier otra ventana abierta para poder ver el escritorio detrás de la ventana de Access. 3. En el panel de exploración, busque el objeto para el que desea crear el acceso directo. 4. Arrastre el objeto del panel de exploración al escritorio. Cuando suelte el botón del mouse, se crea el acceso directo en el escritorio. 5. Si desea el acceso directo en una ubicación distinta al escritorio, utilice el Explorador de Windows para mover el acceso directo a la ubicación deseada. Si hace doble clic en el acceso directo, Access abre la base de datos en donde está almacenado el objeto y lo muestra. Si Access ya está ejecutándose y el objeto asociado con el acceso directo se encuentra en otra base de datos distinta a la base de datos actualmente abierta, se inicia una instancia nueva de Access. Para abrir el objeto en una vista específica en Access, haga clic con el botón secundario del mouse en el acceso directo y, a continuación, seleccione la vista que desee.

Seguridad Office Access 2007 proporciona un modelo de seguridad mejorada que ayuda a simplificar el proceso de aplicar seguridad a una base de datos y de abrir una base de datos con la seguridad habilitada. A continuación aparece una lista de las nuevas funciones de seguridad d e Office Access 2007: Posibilidad de ver los datos, incluso cuando no se desea habilitar ningún código deshabilitado de Microsoft Visual Basic para Aplicaciones (VBA) o ningún componente deshabilitado de una base de datos. En Microsoft Office Access 2003, si se establecía el nivel de seguridad en Alto, había que firmar código y confiar en una base de datos para poder ver los datos. En Office Access 2007, se pueden abrir bases de datos y ver los datos sin tener que habilitar la base de datos. Mayor facilidad de uso. Si se colocan archivos de bases de datos (ya sea con el formato de archivo de Office Access 2007 o formatos de archivo anteriores) en una ubicación de confianza, como una carpeta de archivos o un recurso de red designados como seguros, esos archivos se abrirán y se ejecutarán sin que se muestre ningún mensaje de advertencia o sin que se pida que se habilite contenido deshabilitado. Asimismo, si se abren bases de datos de las versiones anteriores de Access, como .mdb o .mde, en Office

74

SENATI-Computación e Informática

II: Utilidades

Access 2007, esas bases de datos llevan firma digital y se ha optado por confiar en el publicador, esos archivos se ejecutarán sin que sea necesario tomar decisiones en materia de confianza. No obstante, recuerde que el código de VBA de una base de datos firmada no se ejecutará hasta que se confíe en el publicador y tampoco se ejecutará si la firma digital deja de ser válida. Una firma pierde su validez cuando un usuario que no sea el firmante altera el contenido de una base de datos. Para obtener más información sobre la firma de bases de datos, vea la sección Cómo funciona la seguridad con las bases de datos de las versiones anteriores de Access que se abren en Office Access 2007. Si no sabe con seguridad si un certificado es de confianza, el artículo Cómo saber si una firma digital es de confianza proporciona información general acerca de la comprobación de las fechas y otros elementos de un certificado para saber si es válido o no. Centro de confianza. El Centro de confianza es un cuadro de diálogo que proporciona una sola ubicación para definir y cambiar la configuración de seguridad de Access. Se usa el Centro de confianza para crear o cambiar las ubicaciones de confianza y configurar las opciones de seguridad de Office Access 2007. Esa configuración afecta a la manera en que las bases de datos nuevas y existentes se comportan cuando se abren en esa instan cia de Access. El Centro de confianza contiene asimismo lógica para evaluar los componentes de una base de datos y determinar si es seguro abrir la base de datos o si el Centro de confianza debe deshabilitarla y dejar que el usuario decida si desea habilitarla. Para obtener información sobre el uso del Centro de confianza con Access, vea la sección Usar una base de datos de Office Access 2007 en una ubicación de confianza, que aparece más adelante en este artículo. Para obtener información general sobre el uso del Centro de confianza, vea el artículo Ver la configuración de seguridad y privacidad en el Centro de confianza. Menos mensajes de advertencia. En las versiones anteriores de Access, aparecía una gran variedad de mensajes de alerta: la seguridad de macros y el modo de recinto de seguridad, para citar sólo dos. De forma predeterminada, si se abre una base de datos de Office Access 2007 fuera de una ubicación de confianza, se ve una sola herramienta denominada barra de mensajes.

Si se sabe con certeza que se puede confiar en la base de datos, se puede usar la herramienta Barra de acciones del documento para habilitar los componentes deshabilitados, es decir, consultas de acción (consultas que agregan, eliminan o cambian datos), macros, controles ActiveX, expresiones (funciones que se evalúan como un solo valor) y código de VBA, cuando se abre una base de datos que contiene uno o varios de esos componentes.

SENATI-Computación e Informática

75

Microsoft Office

Nuevas formas de firmar y distribuir los archivos creados con el formato de archivo de Office Access 2007. En las versiones anteriores de Access, se usaba el Editor de Visual Basic para aplicar un certificado de seguridad a los componentes individuales de las bases de datos. En Office Access 2007, se empaqueta la base de datos y, a continuación, se firma y se distribuye el paquete. Si se extrae una base de datos desde un paquete firmado hasta una ubicación de confianza, la base de datos se ejecuta sin que se muestre la barra de mensajes. Si se extrae una base de datos desde un paquete firmado hasta una ubicación que no es de confianza, pero se confía en el certificado del paquete y la firma es válida, no es necesario tomar ninguna decisión en materia de confianza. Cuando se empaqueta y se firma una base de datos que no es de confianza o que contiene una firma digital no válida, es preciso usar la barra de mensajes para confiar en la base de datos cada vez que se abre, a menos que se coloque la base de datos en una ubicación de confianza. Algoritmo más seguro para cifrar las bases de datos con formato de archivo de Office Access 2007 que usan la característica de contraseña. Al cifrarse una base de datos, se codifican los datos de las tablas y se ayuda a evitar que usuarios no deseados lean los datos. Nueva subclase de acciones de macro que se ejecutan cuando se deshabilita una base de datos. Estas macros más seguras contienen asimismo funciones de tratamiento de errores. Además, las macros (incluso las que contienen acciones que Access deshabilita) se pueden incrustar directamente en cualquier propiedad de formulario, informe o control que funcione lógicamente con un módulo de código de VBA o una macro de una versión anterior de Access.

Por último, recuerde estas reglas a medida que avance: Si se abre la base de datos en una ubicación de confianza, se ejecutan todos los componentes sin que sea necesario tomar ninguna decisión en materia de confianza. Cuando se empaqueta, se firma y se implementa una base de datos de una versión anterior de Access (.mdb o .mde), se ejecutan todos los componentes sin que sea necesario tomar ninguna decisión en materia de confianza si la base de datos contiene una firma digital válida de un publicador de confianza y se confía en el certificado. Si se firma y se implementa una base de datos que no es de confianza en una ubicación que no es de confianza, el Centro de confianza deshabilita la base de datos de forma predeterminada y se debe optar por habilitar la base de datos cada vez que se abre. Para obtener más información, vea la sección Habilitar contenido deshabilitado al abrirse una base de datos.

76

SENATI-Computación e Informática

II: Utilidades

Cifrar una Base de Datos mediante contraseña Se cifra una base de datos de Microsoft Office Access 2007 cuando se necesita ocultar datos e impedir que usuarios no deseados abran la base de datos. 1. Abra la base de datos que desee cifrar en modo Exclusivo. ¿Cómo se abre una base de datos en modo Exclusivo? a. Haga clic en el Botón Microsoft Office clic en Abrir.

y, a continuación, haga

b. En el cuadro de diálogo Abrir, busque el archivo que desee abrir y, a continuación, seleccione el archivo haciendo clic en él. c. Haga clic en la flecha situada junto al botón Abrir y, a continuación, haga clic en Abrir en modo exclusivo. En la siguiente ilustración se refleja el menú.

2. En la ficha Herramientas de base de datos, en el grupo Herramientas de base de datos, haga clic en Cifrar con contraseña.

Aparece el cuadro de diálogo Establecer contraseña para la base de datos . 3. Escriba la contraseña en el cuadro Contraseña, escríbala de nuevo en el cuadro Confirmar y, a continuación, haga clic en Aceptar.

Utilice contraseñas seguras que combinen letras en mayúsculas y minúsculas, números y símbolos. Las contraseñas no seguras son aquellas que no combinan estos elementos. Un ejemplo de contraseña segura sería Y6dh!et5 y de contraseña no segura, Casa27. Las contraseñas deben tener 8 o más caracteres.

SENATI-Computación e Informática

77

Microsoft Office

Una frase con 14 o más caracteres es todavía mejor. Para obtener más información, vea Ayudar a proteger la información personal con contraseñas seguras. Es fundamental que recuerde la contraseña. Si la olvida, Microsoft no puede recuperarla. Guarde las contraseñas que anote en un lugar seguro, lejos de la información que ayudan a proteger.

Descifrar una base de datos 1. Abra la base de datos cifrada de la misma manera que se abre cualquier otra base de datos. Aparece el cuadro de diálogo Solicitud de contraseña.

2. Escriba la contraseña en el cuadro Escriba la contraseña de la base de datos y, a continuación, haga clic en Aceptar.

Quitar contraseña de una Base de Datos Cuando se quita una contraseña de una base de datos, se puede restaurarla en cualquier momento (o usar otra contraseña) repitiendo los pasos descritos en la sección Cifrar una base de datos mediante una contraseña, que aparece anteriormente en este artículo. 1. Haga clic en el Botón Microsoft Office Abrir.

y, a continuación, haga clic en

2. En el cuadro de diálogo Abrir, busque el archivo que desee abrir y, a continuación, seleccione el archivo haciendo clic en él. 3. Haga clic en la flecha situada junto al botón Abrir y, a continuación, haga clic en Abrir en modo exclusivo. En la siguiente ilustración se refleja el menú. 4. En la ficha Herramientas de base de datos, en el grupo Herramientas de base de datos, haga clic en Descifrar base de datos.

78

SENATI-Computación e Informática

II: Utilidades

Aparece el cuadro de diálogo Anular la contraseña establecida para la base de datos.

5. Escriba la contraseña en el cuadro Contraseña y, a continuación, haga clic en Aceptar.

Uso del centro de confianza El Centro de confianza es donde puede encontrar la configuración de seguridad y privacidad de los programas de 2007 Microsoft Office system. Los niveles de seguridad Muy alta, Alta, Media y Baja utilizados en versiones anteriores de Office se han reemplazado ahora por un sistema de seguridad más sencillo. 1. Siga estos pasos en estos programas de 2007 Microsoft Office system: Word, Excel, PowerPoint o Access Haga clic en el botón de Microsoft Office y, a continuación, en Opciones de Nombre del programa, donde Nombre de programa es el nombre del programa que está utilizando, por ejemplo, Opciones de Access. 2. Haga clic en Centro de confianza y, a continuación, en Configuración del Centro de confianza.

SENATI-Computación e Informática

79

Microsoft Office

Compactar y reparar una BD Para garantizar un rendimiento óptimo, se recomienda compactar y reparar los archivos de Microsoft Access con regularidad. Asimismo, si se produce un problema grave cuando está trabajando con un archivo de Access y el programa intenta recuperarlo, puede aparecer un mensaje de error que indique que la operación de reparación se canceló y que debe compactar y reparar el archivo. Precaución Al compactar un archivo de Microsoft Access ubicado en un volumen qu e utiliza el sistema de archivos NTFS, Access quita el archivo existente y lo reemplaza por el archivo compactado. A continuación, aplica los permisos de archivos predeterminados al nuevo archivo. Si el archivo es una base de datos de Access, utilice la seguridad por usuarios de Access en lugar de los permisos de nivel de archivo. En caso contrario, utilice permisos de carpetas. Para obtener más información sobre el sistema de archivos NTFS y los permisos de carpetas, vea la Ayuda de Windows. Para compactar y reparar una base de datos de Access, debe tener permisos de Abrir o ejecutar y de Abrir en modo exclusivo.

Compactar y reparar el archivo de Access con el que está trabajando 1. Si va a compactar una base de datos compartida de Microsoft Access que está ubicada en un servidor o en una carpeta compartida, asegúrese de que ningún otro usuario la tiene abierta. 2. En el menú Office, seleccione Administrar y, a continuación, haga clic en Compactar y reparar base de datos

80

SENATI-Computación e Informática

II: Utilidades

Compactar y reparar un archivo de Access que no está abierto 1. Cierre el archivo de Microsoft Access que tiene abierto. Si va a compactar una base de datos compartida de Access que está ubicada en un servidor o en una carpeta compartida, asegúrese de que ningún otro usuario la tiene abierta. 2. En el menú Office, seleccione Administrar y, a continuación, haga clic en Compactar y reparar base de datos. 3. En el cuadro de diálogo Base de datos a compactar, especifique el archivo de Access y, a continuación, haga clic en Compactar. 4. En el cuadro de diálogo Compactar la base de datos en, especifique un nombre, una unidad y una carpeta para el archivo de Access compactado. 5. Haga clic en Guardar. Si utiliza el mismo nombre, unidad y carpeta, y la base de datos de Access o proyecto de Access se compacta con éxito, Microsoft Access reemplaz a el archivo original por la versión compactada.

Compactar y reparar un archivo de Access automáticamente cada vez que se cierre La compactación no tiene lugar si cierra una base de datos compartida de Access mientras otro usuario la tiene abierta. 1. Abra la base de datos de Access o proyecto de Access que desee compactar automáticamente. 2. En el menú Office, haga clic en Opciones de Access.

SENATI-Computación e Informática

81

Microsoft Office

3. Haga clic en Base de Datos Actual 4. Active la casilla de verificación Compactar al cerrar.

Nota: Para detener el proceso de compactación y reparación, puede presionar la combinación de teclas CTRL+ENTER o la tecla ESC.

Convertir a otras versiones Características nuevas del formato de archivo de Office Access 2007

Campos de búsqueda multivalor La mayoría de los programas de base de datos, incluidas las versiones anteriores de Access, sólo permiten almacenar un valor único en cada campo. Sin embargo, en Office Access 2007 puede crear ahora un campo de búsqueda que le permite almacenar más de un valor en cada campo. En efecto, crea una relación de varios a varios en cada campo y oculta los detalles de la implementación mediante tablas de sistema. Por ejemplo, suponga que tiene una tabla Tareas con un campo de búsqueda que ha utilizado para asignar la tarea a un empleado. ¿Qué ocurre si tiene una tarea que debe asignar a varios empleados? En las versiones anteriores de Access, tendría qu e configurar una nueva tabla de referencias cruzadas para almacenar cada combinación de tarea y empleado, y revisar a continuación los formularios e informes para utilizar la nueva estructura de datos. En Office Access 2007, es mucho más sencillo si se implementa un campo de búsqueda multivalor. En lugar de seleccionar únicamente un elemento en una lista desplegable, ahora cada elemento de la lista tiene una casilla de verificación para que pueda seleccionar todos los que desee. Las selecciones múltiples se muestran en el campo, separadas por comas.

Tipo de datos Datos adjuntos El nuevo tipo de datos Datos adjuntos permite almacenar fácilmente todos los tipos de documentos y archivos binarios de la base de datos sin necesidad de sobrecargar la

82

SENATI-Computación e Informática

II: Utilidades

base de datos. Los datos adjuntos se comprimen automáticamente cuando así se requiere para racionalizar el uso del espacio. Puede anexar un documento de Microsoft Office Word 2007 a un registro o guardar una serie de imágenes digitales. Puede incluso anexar varios datos adjuntos a un único registro.

Integración con Microsoft Windows SharePoint Services 3.0 y Microsoft Office Outlook 2007 En el pasado, los archivos Access se habrían bloqueado en Windows SharePoint Services 3.0 y Office Outlook 2007 porque se podría incluir código no seguro en una base de datos de Access. Office Access 2007 implementa un nuevo formato qu e permite que el código se compruebe como seguro o se deshabilite. De esta forma la integración de las bases de datos de Access con Windows SharePoint Services 3.0 y Office Outlook 2007 es mucho más completa, y también permiten programas antiviru s para inspeccionar con más facilidad los archivos de base de datos de Access.

Trabajar con los datos de SharePoint sin estar conectado Puede desconectar las listas de SharePoint con un solo clic mediante Office Access 2007. Trabaje con los datos en Access y, despu és, sincronice los cambios, o bien, vuelva a conectarse más adelante con el sitio de SharePoint.

Seguimiento del historial de los campos Memo Los campos Memo sirven para almacenar grandes cantidades de información. En Office Access 2007, puede definir una propiedad (SóloAnexar (AppendOnly)) que obligue a Access a conservar un historial de todos los cambios efectuados en un campo Memo. A continuación, puede ver un historial de esos cambios. Esta característica admite la función de control de versiones de Wi ndows SharePoint Services 3.0, por lo que puede utilizar Access para realizar un seguimiento de los cambios realizados en un campo de varias líneas de texto almacenado en una lista de SharePoint (siempre que el campo tenga la opción Anexar cambios al texto existente establecida en Sí).

Tablas vinculadas Puede vincular una tabla con un formato anterior de Access a una base de datos de una versión posterior de Access, pero no puede vincular una tabla de una versión posterior de Access a una base de datos de una versión anterior de Access. Por ejemplo, puede crear un vínculo desde una base de datos .accdb a tablas de otra base de datos .accdb o a tablas de una base de datos .mdb, pero no puede crear un vínculo desde una base de datos .mdb a tablas de una base de datos .accdb.

Réplica La réplica no se admite en el formato de archivo de Office Access 2007. Puede utilizar Office Access 2007 para replicar una base de datos creada en un formato de archivo anterior, pero no la creada en el formato de Office Access 2007. SENATI-Computación e Informática

83

Archivos de información de grupo de trabajo (MDW) Los archivos de información de grupo de trabajo almacenan información para bases de datos seguras. No se ha realizado ningún cambio en el formato de archivo .mdw en Office Access 2007. El administrador del grupo de trabajo de Office Access 2007 creará archivos .mdw idénticos a los que se crearon en Access 2000 a través de Access 2003, y los archivos .mdw creados en las versiones anteriores se pueden utilizar en las bases de datos de Office Access 2007.

Bloqueo de archivos Cuando se abre una base de datos, un archivo de bloqueo controla el bloqueo de archivos. Cuando se abre un archivo .mdb, Access crea y abre un archivo de bloqueo .ldb. Esto ocurre aunque utilice Office Access 2007 para abrir un archiv o de base de datos .mdb. Por ejemplo, cuando se abre el archivo Db1.mdb, Access crea y abre un archivo llamado Db1.ldb que controla el bloqueo. En el caso de aquellos archivos creados en formato de archivo de Office Access 2007 (archivos .accdb), Access controla el bloqueo creando y abriendo un archivo con una extensión de nombre de archivo de .laccdb. Por ejemplo, si se abre Db1.accdb, Access crea y abre un archivo de bloqueo llamado Db1.laccdb. Al igual que en los archivos .ldb, los archivos .laccdb se eliminan automáticamente cuando todos los usuarios cierran la base de datos. Al mantener archivos de bloqueo independientes para los archivos de Office Access 2007 y para los archivos creados en versiones anteriores de Access, es posible tener ambos archivos Db1.mdb y Db1.accdb abiertos en Office Access 2007 al mismo tiempo, sin crear conflictos en el archivo de bloqueo, porque se crean dos archivos de bloqueo distintos. Es posible tener el mismo archivo .mdb abierto en Office Access 2007 y en una versión anterior de Access al mismo tiempo, mientras las dos versiones utilizan el mismo archivo de bloqueo .ldb.

Los formatos ACCDB y MDB Office Access 2007 incluye nuevas extensiones de archivo: ACCDB Extensión de archivo para el nuevo formato de archivo de Office Access 2007. Sustituye a la extensión de archivo MDB. ACCDE Extensión de archivo de los archivos de Office Access 2007 que se encuentran en modo de sólo ejecución. A todos los archivos ACC DE se les ha quitado el código fuente de Visual Basic para Aplicaciones (VBA). Los usuarios de archivos ACCDE sólo pueden ejecutar el código VBA, no modificarlo. ACCDE sustituye a la extensión de archivo MDE. ACCDT Extensión de archivo de Plantillas de base de datos de Access. ACCDR ACCDR es una nueva extensión de archivo que permite abrir una base de datos en modo de tiempo de ejecución. Cambiando simplemente la extensión de archivo de una base de datos de .accdb a .accdr, puede crear una versión "bloqueada" de la base de datos de Office Access 2007. Puede modificar la extensión de archivo de nuevo a .accdb para que recupere toda su funcionalidad. 84

SENATI-Computación e Informática

II: Utilidades

Archivos ACCDE Un archivo .accde es la versión de Office Access 2007 del archivo .mde en versiones anteriores de Access. Es una versión bloqueada del archivo .accdb original. Si el archivo .accdb contenía código de VBA, sólo se incluye el código compilado en el archivo .accde y por tanto, el usuario no puede consultar ni modificar el código de VBA. Además, los usuarios del archivo .accde no tienen permiso para realizar modificaciones de diseño en los formularios o informes. Puede crear archivos .accde a partir de archivos .accdb mediante el siguiente procedimiento:

Crear un archivo ACCDE en Office Access 2007 1. En Office Access 2007, abra la base de datos que desea guardar como un archivo .accde. 2. En la ficha Herramientas de base de datos, en el grupo Herramientas de base de datos, haga clic en Crear ACCDE. 3. En el cuadro de diálogo Guardar como, desplácese a la carpeta en la que desea guardar el archivo, especifique un nombre para el archivo en el cuadro Nombre de archivo y, a continuación, haga clic en Guardar.

Convertir una base de datos al formato de archivos de Access 2007 Puede convertir bases de datos de versiones anteriores de Access al formato de archivo de Microsoft Office Access 2007, abrir bases de datos de versiones anteriores de Access sin convertirlas y cambiar el formato de archivo predeterminado para las nuevas bases de datos que cree. Convertir una base de datos de Access a un formato de archivo diferente.

1. Si el archivo que desea convertir no está abierto, haga clic en el Botón de Microsoft Office y haga clic en Abrir. Busque el archivo y, a continuación, haga doble clic en él para abrirlo. Si se muestra el cuadro de diálogo Mejoras de base de datos y se le solicita que actualice la base de datos, significa que el formato de archivo de la base de datos que está abriendo es anterior a Access 2000. Para continuar, haga caso omiso de la sección Abrir archivos de versiones anteriores de Access en Office Access 2007. 2. Haga clic en el botón de Microsoft Office , seleccione Guardar como y, a continuación, en Guardar base de datos en otro formato, haga clic en el formato al que desee convertir el archivo.

SENATI-Computación e Informática

85

Microsoft Office

Por ejemplo, puede hacer clic en Formato de archivo actual para guardar la copia en el mismo formato que el original, o puede elegir uno de los otros formatos de archivo. Es importante tener en cuenta que si está abierto algún objeto de la base de datos cuando utiliza el comando Guardar base de datos en otro formato, Access le pedirá que lo cierre para poder crear la copia. Haga clic en Sí para que Access cierre los objetos, o bien, haga clic en No para cancelar todo el proceso. Si es necesario, Access le pedirá que guarde los cambios. 3. En el cuadro de diálogo Guardar como, escriba un nombre de archivo para la copia de la base de datos en el cuadro Nombre de archivo y, a continuación, haga clic en Guardar. Access crea una copia de la base de datos y después la abre. Access cierra automáticamente la base de datos original. Si tiene una base de datos de Office Access 2007 (.accdb) que desea guardar en un formato de archivo anterior de Access (.mdb), podrá hacerlo siempre que la base de datos .accdb no contenga campos de búsqueda multivalor, datos sin conexión o datos adjuntos. Si intenta convertir una base de datos .accdb que contenga alguno de estos elementos a un formato de archivo .mdb, Access mostrará un mensaje de error.

Abrir archivos de versiones anteriores de Access en Office Access 2007 Al abrir una base de datos .mdb en formato de archivo Access 97 o Access 95, Access muestra el cuadro de diálogo Mejoras de base de datos, donde se le solicita que actualice la base de datos.

86

SENATI-Computación e Informática

Capítulo

Trabajando con datos externos En este capítulo aprenderemos: Importar y Exportar datos Preparar y vincular la información con un sitio SharePoint

SENATI-Computación e Informática

87

atos Externos

Importar Access te permite importar objetos de otra base de datos a la tuya rápidamente. Para ello, sólo tendremos que acudir a la pestaña Datos externos, una vez allí seleccionar una opción de la sección Importar.

Aquí podemos seleccionar qué tipo de archivo contiene los datos que queremos importar.

Access Si quieres importar objetos de una base de datos a otra sólo tienes que hacer clic en el botón Access. Se abrirá el siguiente cuadro de diálogo:

Para importar un objeto de una base de datos Access, ya sea una tabla, formulario, informe, macro, etc... solo tendremos que seleccionar la base de datos de origen y pulsar el botón Aceptar.

En el siguiente cuadro de diálogo sólo tendremos que seleccionar los objetos que queremos añadir a nuestra base de datos y pulsar el botón Aceptar.

SENATI-Computación e Informática

89

Microsoft Office

En la imagen verás que el botón Opciones>> se encuentra desactivado, es porque hemos hecho clic sobre él y entonces han aparecido las opciones en la parte inferior del cuadro. Desde allí podrás seleccionar cómo y en qué medida quieres importar los objetos. Como habrás podido observar existen otros métodos de importación de datos, podrás acceder a ellos haciendo clic en los diferentes botones de la sección Importar.

Excel Para almacenar datos de Excel en una base de datos de Access y utilizar y mantener estos datos en Access de ahora en adelante, puede importar los datos. Cuando se importan datos, Access los almacena en una tabla nueva o existente sin modificarlos. Sólo puede importar una hoja de cálculo cada vez durante una operación de importación. Para importar datos de varias hojas de cálculo, repita la operación de importación para cada hoja de cálculo. A continuación se incluyen algunos escenarios comunes de importación de datos de Excel en Access: Utiliza Excel con mucha frecuencia, pero a partir de ahora desea utilizar Access para trabajar con estos datos. Desea mover los datos de las hojas de cálculo de Excel a una o varias bases de datos de Access. Su departamento o grupo de trabajo utiliza Access, pero de vez en cuando recibe datos en formato de Excel que debe combinar con bases de datos de Access. Desea importar estas hojas de cálculo de Excel a la base de datos cuando la s recibe.

90

SENATI-Computación e Informática

atos Externos

Utiliza Access para administrar los datos, pero los informes semanales que recibe del resto de los integrantes de su equipo son libros de Excel. Desea agilizar el proceso de importación para asegurarse de que los datos se importan cada semana a una hora específica a la ba se de datos. Si quieres importar objetos de un archivo de Excel solo tienes que hacer clic en el botón Excel. Se abrirá el siguiente cuadro de diálogo:

Para importar una hoja del archivo de Excel, hay que indicarle cual Hoja de Trabajo, o bien, Mostrar Rangos con Nombres, si previamente se han definido y pulsar el botón Siguiente.

SENATI-Computación e Informática

91

Microsoft Office

Verificar si la Primera Fila tiene encabezados de Columna.

Si es posible especificar algunas Características sobre las Opciones de Campo, por ejemplo el tipo de datos , o si va a ser indexado

Luego de Presionar Siguiente, tendrás que definir una clave principal para la tabla que estas importando, en caso contrario Access lo hará por ti.

92

SENATI-Computación e Informática

atos Externos

Por último indicarle el nombre que va a tener

Lista de SharePoint Importar una lista de SharePoint crea una copia de la lista en una base de datos de Access. Durante la operación de importación, puede especificar las listas que desea copiar y, para cada lista seleccionada, puede indicar si desea importar toda la lista o sólo una vista específica. La operación de importación crea una tabla en Access, y copia las columnas y los elementos de la lista de origen (o de la vista) en la tabla en forma de campos y registros. Para obtener más información sobre las tablas y sobre cómo está estructurada una base de datos, vea los vínculos de la sección Vea también. Al final de la operación de importación, puede elegir guardar la información de la operación de importación como una especificación. Una especificación de importación ayuda a repetir la operación de importación en el futuro sin tener que examinar el Asistente para importación cada vez.

SENATI-Computación e Informática

93

Microsoft Office

Escenarios comunes para importar una lista a Access En general, una lista de SharePoint se importa a una base de datos de Access por estos motivos: Si ya no necesita la lista en el sitio de SharePoint, puede mover una lista de forma permanente, como la lista Contactos, a una base de datos de Access. Puede importar la lista a Access y eliminarla del sitio de SharePoint. Su departamento o grupo de trabajo utiliza Access pero utiliza ocasionalmente una lista de SharePoint para obtener datos adicionales que se deben combinar en una de sus bases de datos.

Prepararse para la operación de importación 1. Busque el sitio de SharePoint que contiene las listas que desea copiar y anote la dirección del sitio. Una dirección válida de un sitio empieza por http:// seguido del nombre del servidor y finaliza con la ruta al sitio específico en el servidor. 2. Identifique las listas que desea copiar a la base de datos y decida si desea toda la lista o sólo una vista determinada. Puede importar varias listas en una única operación de importación pero puede importar sólo una vista de cada lista. Si es necesario, cree una vista que contenga sólo las columnas y los elementos que le interesen. 3. Revise las columnas en la lista de origen o la vista. En la tabla siguiente se explican algunas consideraciones que se deben tener en cuenta al importar distintos elementos. Elemento

94

Consideraciones

Columnas

Access no admite más de 256 campos en una tabla, de forma que Access importa sólo las 256 primeras columnas. Para evitar este problema, cree una vista, agréguele sólo las columnas que desea y asegúrese de que el número total de columnas no sea superior a 256.

Carpetas

Cada carpeta de la lista de SharePoint o de la vista aparece como un registro en la tabla de Access. Los elementos dentro de una carpeta también aparecen como registros, inmediatamente debajo del registro correspondiente a dicha carpeta.

Columnas de búsqueda

Si una columna de origen busca valores de otra lista, tiene dos opciones: Importar los valores de presentación como parte del campo. En este caso, no es necesario importar la lista relacionada. Obligar al campo de destino a buscar otra tabla. En este caso, si la base de datos no contiene una tabla que pueda proporcionar los valores de búsqueda, debe importar también la lista relacionada. NOTA: Una columna de origen de tipo Persona o Grupo es un tipo especial de columna de búsqueda. Busca valores en la lista SENATI-Computación e Informática

atos Externos

Información de usuario, por lo que debe decidir si desea importar la lista Información de usuario junto con otras listas. Columnas calculadas

Los resultados de una columna calculada se copian en un campo cuyo tipo de datos depende del tipo de datos del resultado calculado. No se copia la expresión que ejecuta el cálculo.

Datos adjuntos

La columna de datos adjuntos de la lista se copia en un campo denominado Datos adjuntos.

Relaciones

Access no crea automáticamente relaciones entre tablas relacionadas al finalizar una operación de importación. Debe crear manualmente las relaciones entre las diversas tablas nuevas y las existentes mediante las opciones de la ficha Relaciones. Para ver la ficha Relaciones: En la ficha Herramientas de base de datos, en el grupo Mostrar u ocultar, haga clic en Relaciones.

Columnas multivalor

Una columna de tipo opción o búsqueda puede contener varios valores. Al importar una columna que admite varios valores, Access crea una columna que hace lo mismo. Para obtener más información sobre los campos multivalor en Access, abra los vínculos en la sección Vea también de este artículo.

Formato de texto enriquecido

Las columnas que contienen un formato de texto enriquecido se importan a Access como campos Memo. La propiedad Formato de texto del campo Memo está establecida en Texto enriquecido y se conserva el formato.

1.

Identifique la base de datos a la que desea importar las listas. Asegúrese de que tiene los permisos necesarios para agregar datos a la base de datos. Si no desea guardar los datos en ninguna de las bases de datos existentes, cree una base de datos en blanco haciendo clic en el Botón de Microsoft Office . A continuación, haga clic en Nuevo. .

2.

Revise las tablas de la base de datos. La operación de importación crea una tabla con el mismo nombre que la lista de SharePoint. Si este nombre ya está en uso, Access anexará "1" al nuevo nombre de tabla, por ejemplo, Contactos1. (Si Contactos1 ya está en uso, Access creará Contactos2, etc.)

Importar datos 1. Abra la base de datos de destino. En la ficha Datos externos, en el grupo Importar, haga clic en Lista de SharePoint.

SENATI-Computación e Informática

95

Microsoft Office

2.

En el Asistente, especifique la dirección del sitio de origen.

3.

Haga clic en Importar el origen de datos en una nueva tabla de la base de datos actual y luego en Siguiente.

4.

En la lista que muestra el Asistente, seleccione las listas que desea importar.

5.

En la columna Elementos para importar , seleccione la vista que desea para cada lista seleccionada. Elija una vista Todos los elementos (por ejemplo, Todos los elementos, Todos los contactos o Todos los documentos) para importar toda la lista.

6.

La casilla de verificación Importar valores para mostrar en lugar de Id. para los campos que consultan valores almacenados en otra lista controla los datos que se importan para las columnas de búsqueda en las lista s seleccionadas. Siga uno de estos procedimientos: Si desea importar los valores de presentación como parte del campo, active la casilla de verificación. En este caso, el campo no buscará valores en otra tabla. Si desea que el campo de destino busque valores en otra tabla, desactive la casilla de verificación. Al hacerlo, los identificadores de las filas de valores de presentación se copian en el campo de destino. Los identificadores son necesarios para definir un campo de búsqueda en Access. Al importar identificadores, debe importar las listas que proporcionan actualmente los valores a las columnas de búsqueda (a menos que la base de datos de destino ya tenga tablas que puedan funcionar como tablas de búsqueda). Es importante recordar que la operación de importación sitúa los identificadores en el campo correspondiente pero no establece todas las propiedades necesarias para que el campo funcione como un campo de búsqueda. Los pasos para establecer las propiedades de búsqueda de este tipo de campo se describen en Establecer campos de búsqueda en la sección Tareas relacionadas de este artículo.

7.

Haga clic en Aceptar.

Access importa las listas y muestra el estado de la operación en la última página del asistente. Si prevé repetir la operación de importación, guarde los detalles como una especificación de importación. Vaya a los pasos siguientes para completar la tarea.

Archivo de texto Por ejemplo, para importar la información de una base de datos de un archivo de texto simplemente deberemos hacer clic en el botón Archivo de texto. En este caso se abrirá el Asistente para importación de texto, donde podrá s indicar la forma en la que está formateado el archivo del que vas a tomar la información, incluso te podrás guardar esa descripción y volver a utilizarla para importar datos de otro fichero con las mismas características utilizando el botón Importaciones guardadas.

96

SENATI-Computación e Informática

atos Externos

Para ver mejor cómo utilizar este asistente visita el avanzado de Importación de texto.

A veces cuando se importan datos algunos datos no pueden ser almacenados por no coincidir con la definición de la tabla, en este caso Access nos avisará que se han producido errores en la importación y creará una tabla con esos errores para que los podamos analizar y comprobar.

Actividad 1 : Importar de un Archivo de Texto Abre la base de datos Express.accdb. Vamos a importar el archivo Clientes.txt. 1. Selecciona la ficha Datos Externos y haz clic en el botón Archivo de texto de la sección Importar.

2. En el cuadro de diálogo Importar selecciona Importar el origen de datos en una nueva tabla de la base de datos actual. 3. Navega hasta la carpeta ejercicios del curso y selecciona el archivo Clientes.txt.

SENATI-Computación e Informática

97

Microsoft Office

4. Pulsa Aceptar. Se abrirá el asistente para importación de texto. 5. Pulsa el botón Avanzado, vamos a crear una especificación para archivos que tengan este determinado formato.

6. En Formato del archivo selecciona Delimitado. 7. En Delimitador de campo escribe ;. 8. En Cualificador de texto selecciona las dobles comillas ("). 9. En Orden de la fecha selecciona AMD. 10. Deselecciona la opción Años en cuatro cifras. 11. Selecciona la opción Ceros no significativos en fechas. Ahora pasaremos a establecer las propiedades de los campos. Ya hemos terminado de configurar las propiedades de los campos, debería haberte quedado algo así:

98

SENATI-Computación e Informática

atos Externos

Si se guarda esta especificación, más adelante, se puede volver a utilizarla. 12. En el diálogo de Avanzado haz clic de nuevo sobre el botón Aceptar. 13. En el siguiente paso hay que activar “Primera Fila contiene nombres de campos”

Ahora verás que a medida que vamos avanzando por el asistente todas las opciones ya se encuentran perfectamente configuradas. 14. Selecciona la opción Permitir a Access agregar la clave principal.

SENATI-Computación e Informática

99

Microsoft Office

15. Pulsa Siguiente para continuar. 16. En esta ventana escribiremos en el cuadro de texto Importar a la tabla el nombre Clientes.

17. Pulsa Finalizar para terminar. Verás cómo la tabla se importa. Podrás abrirla desde la ventana de Base de datos y ver sus contenidos.

Archivo XML Para Importar un archivo XML a Access 2007, seguir los siguientes pasos a. Selecciona la ficha Datos Externos y haz clic en el botón Archivo XML de la sección Importar

100

SENATI-Computación e Informática

atos Externos

b. Aparecerá un Cuadro de Dialogo, en el que tendrás que buscar la ubicación del archivo XML que necesitaras

c. Luego haz clic en Aceptar, y aparecerá la siguiente pantalla

SENATI-Computación e Informática

101

Microsoft Office

d. Por defecto esta activada la opción Estructura y Datos, lo que implica que importara, tanto los campos que contienen la tabla, como el contenido de la misma e. Aceptar, y luego Cerrar

f. Finalmente se verá la tabla Importada

Exportar En el apartado anterior veíamos como podíamos recuperar datos de otras bases de datos o incluso de archivos con otro formato, por ejemplo de texto. Ahora veremos el proceso contrario, enviar la información de nuestra base de datos a otra base de datos o a un archivo de otro tipo, por ejemplo de texto. Para ello, sólo tienes que seleccionar una de las opciones que encontrarás en la sección Exportar de la pestaña Datos Externos. Estos comandos te permitirán copiar tablas, informes, formularios, macros y en definitiva cualquier objeto de tu base de datos a otra . Creando una copia exacta del objeto en otro lugar. Para utilizar esta opción sólo tendrás que seleccionar el objeto y entonces ejecutar el comando Exportar. Si haces clic en el botón Más desplegarás más formatos de exportación entre ellos Base de datos de Access que te permitirá exportar datos de una base de datos a otra rápidamente. Se abrirá el cuadro Exportar tabla 'tabla1' a... y sólo tendrás que indicar en qué base de datos quieres copiar el objeto, a continuación Access abrir un cuadro de diálogo

102

SENATI-Computación e Informática

atos Externos

Exportar donde te permitirá cambiar el nombre del objeto en la otra base de datos y se encargará de exportarlo íntegramente sin ninguna otra interacción por tu parte. Si el objeto es una tabla se te presentará un cuadro de diálogo Exportar como este:

Como puedes ver en la imagen, estamos exportando una tabla llamada Alumnado a una base de datos llamada prueba.accdb. Podemos indicar el nombre que tendrá la tabla en la base de datos de destino y también elegir qué parte queremos exportar. En el marco Exportar tablas podremos seleccionar Definición y datos para exportar la tabla completa (con todos los registros que contiene incluidos) o exportar únicamente su estructura seleccionando la opción Sólo definición.

Excel Puede copiar los datos de una base de datos de Microsoft Office Access 2007 a una hoja de cálculo exportando un objeto de base de datos a una hoja de cálculo de Microsoft Office Excel 2007. Esto se hace mediante el Asistente para exportación en Office Access 2007. Desde la sección Exportar, podremos exportar el contenido de nuestras tablas, informes o formularios a aplicaciones del mismo paquete como Word o Excel.

Excel copia y formatea el contenido de nuestro objeto y lo presenta en una hoja de Excel dentro de un archivo tipo XLSX o otros tipos que podremos elegir. Escenarios comunes para exportar datos a Excel Su departamento o grupo de trabajo utiliza Access y Excel pa ra trabajar con datos. Guarda los datos en las bases de datos de Access pero utiliza Excel para analizar los datos y distribuir los resultados de sus análisis. Su equipo exporta actualmente datos a Excel cuando y como lo necesita pero desea aumentar la efi cacia de este proceso. Es usuario de Access desde hace tiempo pero su administrador prefiere trabajar con los datos en Excel. A intervalos regulares, suele copiar los datos en Excel, pero desea automatizar este proceso para ahorrar tiempo.

SENATI-Computación e Informática

103

Microsoft Office

Si es la primera vez que exporta datos a Excel Para exportar datos de Access a Excel, debe estar trabajando en Access (Excel no proporciona ningún mecanismo para importar datos de una base de datos de Access). Tampoco puede guardar una base de datos o una tabla de Access como libro de Excel mediante el comando Guardar como de Access. Es importante tener en cuenta que el comando Guardar como de Access permite guardar un objeto de Access en la base de datos actual sólo como otro objeto de base de datos de Access. Puede exportar una tabla, una consulta o un formulario. También puede exportar los registros seleccionados en una vista. No puede exportar macros ni módulos a Excel. Al exportar formularios, informes u hojas de datos que contienen subformularios, subinformes u hoja s secundarias de datos, sólo se exporta el formulario, el informe o la hoja de datos principales. Debe repetir la operación de exportación para cada subformulario, subinforme y hoja secundaria de datos que desea exportar a Excel. Sólo puede exportar un objeto de base de datos en cada operación de exportación. No obstante, puede combinar los datos en varias hojas de cálculo en Excel después de finalizar las operaciones individuales de exportación.

Prepararse para la operación de exportación 1. Abra la base de datos de origen. 2. En el panel de navegación, seleccione el objeto que contiene los datos que desea exportar. 3. Puede exportar una tabla, una consulta, un informe o un formulario.

4. Revise los datos de origen para asegurarse de que no contienen indicadores de error ni valores de error. 104

SENATI-Computación e Informática

atos Externos

5. Si hay algún error, debe resolverlo antes de exportar los datos a Excel. De lo contrario, se pueden producir errores durante la operación de exportación y pueden aparecer valores nulos en los campos. 6. Si el objeto de origen es una tabla o una consulta, decida si desea exportar los datos con formato o sin él.

7. Esta decisión afecta a dos aspectos del libro resultante: la cantidad de datos que se exportan y el formato de presentación de los datos. En la tabla siguiente se describe el resultado de la exportación de datos con y sin formato. Exportar Sin formato

Objeto de origen Tabla consulta

Campos y registros o

NOTA Los formularios no se pueden exportar sin formato.

Con formato

Tabla, consulta, formulario informe

SENATI-Computación e Informática

o

Formato

Se exportan todos los campos y registros del objeto base.

La configuración de la propiedad Formato se omite durante esta operación. Para campos de búsqueda, se exportan sólo los valores de identificador de búsqueda. Para campos de hipervínculo, el contenido se exporta como una columna de texto que muestra los vínculos en el formato textoParaMostrar#dirección#.

Sólo se exportan campos y registros que se muestran en la vista o el objeto actual. No se exportan los registros

El Asistente respeta la configuración de la propiedad Formato. Para campos de búsqueda, se exportan los valores de búsqueda. Para campos de hipervínculo, los valores se exportan como hipervínculos. Para campos de texto enriquecido,

105

Microsoft Office

filtrados, las columnas ocultas en una hoja de datos ni los campos no mostrados en un formulario o informe.

se exporta el texto pero no el formato.

8. Elija el libro de destino y el formato de archivo. Durante la operación de exportación, Access le pide que especifique el nombre del libro de destino. En la tabla siguiente se resume cuándo se crea un libro (si no existe aún) y cuándo se sobrescribe (si ya existe). Si el libro de destino

Y el objeto de origen es

Y desea exportar

No existe

Una tabla, consulta, formulario o informe

Los datos con formato o sin formato

El libro se crea durante la operación de exportación.

Ya existe

Una tabla o consulta

Los datos pero no el formato

El libro no se sobrescribe. Se agrega una nueva hoja de cálculo al libro y recibe el nombre del objeto del que se exportan los datos. Si ya existe una hoja de cálculo con ese nombre en el libro, Access le pide que reemplace el contenido de la hoja de cálculo correspondiente o especifique otro nombre para la nueva hoja.

Ya existe

Una tabla, consulta, formulario o informe

Los datos, incluido el formato

El libro se sobrescribe con los datos exportados. Se eliminan todas las hojas de cálculo existentes y se crea una nueva hoja de cálculo con el mismo nombre que el objeto exportado. Los datos de la hoja de cálculo de Excel heredan la configuración de formato del objeto de origen.

Entonces

Los datos siempre se agregan en una hoja de cálculo nueva. No puede anexar los datos en una hoja de cálculo existente o en un rango con nombre.

106

SENATI-Computación e Informática

atos Externos

Un archivo RTF de Word Word copia y formatea el contenido de nuestro objeto y lo presenta en una tabla dentro de un archivo tipo RTF. Si sabes utilizar el comando Combinar correspondencia de Word, podrás seleccionar la opción Combinar con Microsoft Office Word que se encuentra en el desplegable del botón Más y así crear desde Access un archivo combinado para por ejemplo crear cartas personalizadas o enviar emails personalizados a todos los clientes (por ejemplo) que tengas en tu tabla de base de datos.

Lista de SharePoint Si los miembros de su departamento o grupo de trabajo utilizan Windows SharePoint Services 2.0 o posterior para comunicarse y colaborar entre ellos, se puede encontrar con escenarios donde algunos de los datos de la base de datos de Access deban estar disponibles en uno o varios sitios de SharePoint. El modo más fácil de exportar datos a un sitio de SharePoint es ejecutar el Asistente para exportación. Una vez ejecutado, puede guardar la configuración (la información proporcionada al ejecutar el Asistente) como especificación de exportación. Luego, puede ejecutar de nuevo la operación de exportación sin tener que volver a proporcionar la información.

Preparar la operación 1. Busque la base de datos que tiene la tabla o la consulta que desea exportar. Al exportar una consulta, las filas y columnas de los resultados de la consulta se exportan como elementos de lista y columnas. No se pueden exportar formularios ni informes. Puede exportar sólo un objeto a la vez. 2. Identifique el sitio de SharePoint en el que desea crear la lista. Una dirección de un sitio válido empieza por http:// seguido del nombre del servidor y finaliza con la ruta al sitio específico del servidor. El siguient e ejemplo es una dirección válida: http://adatum/EquipoAnalisis 3. Asegúrese de que tiene los permisos necesarios para crear una lista en un sitio de SharePoint. Póngase en contacto con el administrador del servidor si no está seguro de los permisos. La operación de exportación crea una lista nueva que tiene el mismo nombre que el objeto de origen de Access. Si el

SENATI-Computación e Informática

107

Microsoft Office

sitio de SharePoint ya tiene una lista con este nombre, se le pide que especifique un nombre diferente para la lista nueva. No se pueden sobrescribir ni anexar datos a una lista existente. 4. Revise los campos de la tabla o de la consulta de origen. La tabla siguiente explica cómo se importan determinados elementos y si se deben tomar acciones adicionales en casos específicos. Elemento

Resolución

Campos y registros

Se exportan todos los campos y registros de la tabla o de la consulta, incluidos los campos ocultos en la hoja de datos. Se omite la configuración de filtros durante la operación de exportación.

Datos adjuntos

Si el objeto de origen tiene más de una columna adjunta, debe quitar todas las columnas de datos adjuntos excepto una. Esto se debe a que una lista de SharePoint sólo puede admitir una columna de datos adjuntos. Si el objeto de origen contiene más de una columna de este tipo, Access muestra un mensaje en el que se le pide que quite todas las columnas de datos adjuntos antes de iniciar la operación. Para resolver este problema, puede copiar cualquier columna adicional de datos adjuntos en otros objetos de Access y exportarla a otras listas de SharePoint.

Campos de búsqueda que tienen valores únicos o varios valores

Los valores de presentación en los campos de búsqueda de valor único se exportan como campos de opciones de menús desplegables en la lista de SharePoint. Si el campo de origen admite varios valores, se crea un campo de opción que permite selecciones múltiples en la lista de SharePoint. NOTA Un campo de opción de una lista de SharePoint no puede constar de más de una columna. Si el campo de búsqueda de origen contiene varias columnas, los valores de todas las columnas se combinarán en una única columna.

Campos de consulta calculados

Los resultados de las columnas calculadas se copian en un campo cuyo tipo de datos depende del tipo de datos del resultado calculado. No se copia la expresión en la que se basan los resultados.

Campos Objeto OLE

Los campos Objeto OLE se omiten durante la operación de exportación.

5. Si la base de datos de origen no está abierta aún, ábrala y vaya a la siguiente serie de pasos.

108

SENATI-Computación e Informática

atos Externos

Exportar los datos 1. En la ficha Datos externos, en el grupo Exportar, haga clic en Lista de SharePoint. Se inicia el Asistente para exportación. 2. En el cuadro Especifique un sitio de SharePoint, escriba la dirección del sitio de destino. 3. En el cuadro Especifique el nombre de la nueva lista de SharePoint, escriba un nombre para la nueva lista. Si el objeto de origen de la base de datos ya tiene el mismo nombre que el de una lista del sitio de SharePoint, especifique un nombre diferente. 4. De manera opcional, escriba una descripción para la nueva lista en el cuadro Descripción y active la casilla de verificación Abrir la lista al finalizar. 5. Haga clic en Aceptar para iniciar el proceso de exportación. 6. Access crea una lista en el sitio de SharePoint y muestra el estado de la operación en la última página del Asistente. Cuando finaliza la operación de exportación, puede cerrar el Asistente o guardar los pasos de la exportación en una especificación. Asimismo, durante la operación, Windows SharePoint Services selecciona el tipo de datos correcto para cada columna basándose en el campo de origen corre spondiente. Para ver una lista de cómo se asignan los tipos de datos de Access y Windows SharePoint Services entre sí durante la exportación de los datos, y qué valores de campo se exportan para cada tipo de datos, vea la sección Cómo se asignan los tipos de datos de Windows SharePoint Services a los tipos de datos de Access más adelante en este artículo.

Archivo de texto En el caso de exportar el contenido de una tabla a un archivo de texto podremos marcar la opción Exportar datos con formato y diseño.

SENATI-Computación e Informática

109

Microsoft Office

Si activamos esta opción podremos elegir el modo en el que se guarda la información en el archivo de texto mediante este cuadro de diálogo:

Aquí podrás seleccionar el tipo de codificación de los datos de tipo Texto de la tabla. Aunque el predeterminado sea Windows, Unicode (UTF-8) suele ser el formato que mayor compatibilidad presenta. Aunque si tu intención es seguir trabajando dentro de la plataforma Windows deja la opción predeterminada seleccionada.

Si no activas la opción Exportar datos con formato y diseño, se abrirá el Asistente para exportación de texto, que es muy parecido al que hemos visto en el apartado anterior de importación. Podrás especificar el modo en el que se formateará el archivo de salida e incluso guardar esa especificación. Indicarle si va a ser Delimitado o de Ancho Fijo.

110

SENATI-Computación e Informática

atos Externos

Indicarle el delimitador

Y por ultimo para finalizar, indicarle la ruta donde va a ser guardado el archivo de Texto.

Archivo XML Para importar a un Archivo XML, seguir los siguientes pasos: 1. Elegir de la Cinta Exportar, la opción Mas, para luego elegir la opción Archivo XML

2. Indicarle la ruta y el nombre donde va a exportar SENATI-Computación e Informática

111

Microsoft Office

3. Aceptar la opción, y aparecerá la siguiente ventana

4. Elegir la opción que ud desea. Y luego cerrar.

Preguntas de Repaso 1. ¿Como se denomina al proceso de recoger datos de un programa diferente y los incorpora a su base de datos? 2. ¿Cual de los siguientes elementos no puede importarse a otra base de datos: Tablas, Consultas, Formularios o Macros? 3. ¿Como se denomina al proceso de recoger datos de un programa diferente, pero no los incorpora a su base de datos?

Ejercicios Casos Propuestos 1. Exporte los campos nombre, apellidos, dirección, distrito, Ocupacion de la tabla Datos personales de la Base de Datos Agenda, a Word para la realización de una carta tipo Combinacion de Correspondencia. En dicha carta comunicaremos a nuestros clientes la aparición de un nuevo producto de nuestra empresa. 2. Exporte los campos NombreVideo, IdCategoria, IdProductora de la tabla Video de la Base de Datos Alquiler Videos a Word y realice una tabla adornándola con diferentes opciones de formato.

112

SENATI-Computación e Informática

Capítulo

Macros y opciones de Inicio En este capítulo aprenderemos: Crear macros Asignar macros a controles de formulario Personalizar herramientas Definir las opciones de inicio

SENATI-Computación e Informática

113

Microsoft Office

Botones de comando en formularios Como su nombre indica estos controles sirven para ejecutar comandos cuando son pulsados. Los usuarios avanzados de Access son capaces de concentrar muchísimas acciones en un solo botón gracias a la integración de este programa con el lenguaje de programación Visual Basic y al uso de macros.

El asistente para controles Cuando, teniendo el asistente activado, intentamos crear un Botón de Comando nos aparece una cuadro de diálogo. Veremos paso a paso cómo deberemos seguirlo para conseguir nuestro objetivo.

En la primera pantalla podremos elegir entre diferentes acciones a realizar cuando se pulse el botón. Como puedes ver en la imagen estas acciones se encuentran agrupada s en Categorías. Selecciona la Categoría que creas que se ajusta más a lo que quieres r ealizar y luego selecciona la Acción en la lista de la derecha. Pulsa Siguiente para continuar.

Ahora podrás modificar el aspecto del botón. Puedes elegir entre mostrar un Texto en el botón, o mostrar una Imagen.

114

SENATI-Computación e Informática

ones de Inicio

En el caso de escoger Imagen, podrás seleccionar una entre las que Access te ofrece. Marca la casilla Mostrar todas las imágenes para ver todas las imágenes que Access tiene disponible para los botones. También podrías hacer clic en el botón Examinar para buscar una imagen en tu disco duro. Cuando hayas terminado pulsa Siguiente para continuar, y que aparezca la siguiente pantalla

En esta última pantalla le daremos un nombre al control Botón de Comando para poder reconocerlo más tarde en la lista de controles. Pulsa Finalizar para terminar. Al ser tan fácil añadir Botones de comando con el Asistente este control se convierte en una forma muy versátil de añadir acciones a tus formularios e informes. Como podrás ver en las primeras ventanas del Asistente para controles existen varia s acciones que podrás realizar. Con la categoría de Exploración de registros podrás moverte de forma rápida por todos los datos del formulario, buscando registros o desplazándote directamente a alguno en particular. Utiliza las acciones de Operaciones con registros para añadir nuevos, duplicarlos, eliminarlos, guardarlos o imprimirlos. Del mismo modo podrás jugar con los formularios aplicándoles filtros y actualizándolos. En cualquier momento podrás añadir un botón para abrir, cerrar o imprimir informes, formularios y consultas.

Macros Las Macros son un método sencillo para llevar a cabo una o varias tareas básicas como abrir y cerrar formularios, mostrar u ocultar barras de herramientas, ejecutar informes, etc... También sirven para crear métodos abreviados de teclado y para que se ejecuten tareas automáticamente cada vez que se inicie la base de datos. Si guardamos la Macro con el nombre de AutoExec, cada vez que se inicie la base de datos, se ejecutará automáticamente. Esto es debido a que Access al arrancar busca un a

SENATI-Computación e Informática

115

Microsoft Office

macro con ese nombre, si la encuentra será el primer objeto que se ejecute antes de lanzar cualquier otro. Esta opción es muy socorrida a la hora de efectuar comprobaciones o lanzar procesos antes de que el usuario empiece a trabajar con la base de datos. La configuración por defecto de Access, nos impedirá ejecutar ciertas acciones de macro si la base de datos no se encuentra en una ubicación de confianza, para evitar acciones malintencionadas. Para ejecutar correctamente las macros de bases de datos que consideremos fiables, podemos añadir la ubicación de ésta al Centro de confianza. Crear una Macro Para definir una macro, indicaremos una acción o conjunto de acciones que automatizarán un proceso. Cuando ejecutemos una Macro, el proceso se realizará automáticamente sin necesidad, en principio, de interacción por nuestra parte. Por ejemplo, podríamos Macro que abra un cuando el usuario haga botón, o una Macro que nuestros productos.

definir una formulario clic en un abra una consulta para subir un diez por cien el precio de

Crear una Macro es relativamente fácil, sólo tienes que hacer clic el botón Macro de la pestaña Crear, Cinta Otros, Opción Macro. Se abrirá la Vista de diseño de Macro.

116

SENATI-Computación e Informática

ones de Inicio

Esta ventana es muy parecida a la vista Diseño de tabla que ya conoces y tiene la misma dinámica pero ahora en vez de campos lo que definimos son las acciones que queremos que se ejecuten. Como podrás observar, al principio consta de dos columnas: Acción y Comentario, aunque puede que aparezca también la columna Argumentos, que se puede mostrar y ocultar, y que explicaremos más adelante.

En la imagen puedes ver cómo en la columna Acción deberemos seleccionar una acción de entre las existentes en el cuadro desplegable. En la columna Comentario podremos escribir una pequeña descripción opcional sobre el por qué de la acción o un comentario sobre su efecto. Cuando selecciones una Acción en la lista desplegable, en la parte inferior izquierda aparecerán sus opciones y a la derecha una descripción breve de lo que hace la acción.

Podemos añadir tantas acciones como queramos, simplemente deberemos colocarla s una después de otra y en el orden que queremos que se ejecuten.

SENATI-Computación e Informática

117

Microsoft Office

Recuerda que deberás tener cuidado con el orden en el que estableces las acciones, pues es muy importante. Imagina que tienes dos acciones (entre varias) que abren y cierran un formulario. El formulario deberá estar abierto antes de ejecutar la orden de cerrar el formulario, por lo que la acción de apertura debería ir antes de la de cierre. En todo momento podrás utilizar los botones de Insertar o Eliminar filas para insertar nuevas acciones entre dos existentes o eliminar una acción. Para cambiar el orden en el que se encuentren las acciones puedes seleccionar algunas de ellas y arrastrarlas con el ratón para colocarlas en otra posición. Cuando la Macro está terminada, puede guardarse, ejecutarse y cerrarse. Más tarde podremos llamarla desde un control Botón de comando, o ejecutarla directamente desde la ventana de la base de datos haciendo clic en Ejecutar o bien haciendo doble clic directamente sobre ella.

Acciones más utilizadas En este apartado veremos las acciones más utilizadas en las Macros. Siempre puedes recurrir a la ayuda de Access para obtener información sobre acciones que aquí no tratemos. Cuando selecciones una Acción en la lista desplegable, en la parte inferior izquierda aparecerán sus opciones:

A continuación veremos las acciones más comunes, puedes ver la descripción de sus argumentos de acción haciendo clic en.

118

Abrir Consulta

Esta acción abre una consulta escogida entre las existentes en la base de datos.

AbrirFormulario

Del mismo modo que la acción anterior, abre un formulario

AbrirInforme

Igual que las acciones anteriores, permite abrir un informe

AbrirTabla

Esta acción permite abrir una tabla.

BuscarRegistro

Utilizaremos esta acción para buscar registros. Esta acción busca el primer registro que cumpla los criterios

SENATI-Computación e Informática

ones de Inicio

especificados. Puedes utilizar esta acción para avanzar en las búsquedas que realices. BuscarSiguiente

Se posiciona en el siguiente registro que cumpla con los criterios indicados en la acción BuscarRegistro anterior. No tiene argumentos.

CancelarEvento

Esta acción cancela el evento que produjo la ejecución de la macro. No tiene argumentos.

Cerrar

Con esta acción podrás cerrar cualquier objeto que se encuentre abierto.

CuadroMsj

Con las Macros incluso podremos mostrar mensajes para interactuar con el usuario.

DetenerMacro

Introduce esta acción en una Macro para detener su ejecución. No tiene argumentos. Verás su utilidad más adelante.

DetenerTodasMacros

Esta acción detendrá todas las Macros que se estén ejecutando en ese momento. No tiene argumentos.

*Eco

Esta acción es muy útil para ocultar al usuario las operaciones que se están realizando con una Macro. Permite la activación o desactivación de la visualización de las acciones en pantalla.

EjecutarComando

Utiliza esta acción para lanzar comandos que puedas encontrar en cualquier barra de herramientas.

*EstablecerValor

Una acción muy útil que te permitirá modificar los valores de los campos.

IrARegistro

Te permitirá saltar a un registro en particular dentro de un objeto.

Maximizar

Esta acción maximiza la ventana activa para que ocupe todo el espacio de la ventana de Access.

Minimizar

Al contrario que la anterior, esta acción minimiza la ventana activa convirtiéndola en una barra de título en la parte inferior de la ventana de Access.

Salir

Esta acción hace que Access se cierre.

Algunas de estas acciones no se muestran si no está pulsado el icono Mostrar todas las acciones, en la banda de Diseño de Macros.

Acciones Condicionadas Ahora que ya conocemos las acciones y cómo introducirlas y ordenarlas, veremos un modo que nos ayudará a crear acciones con muchas posibilidades. Para ello utilizaremos las condiciones.

SENATI-Computación e Informática

119

Microsoft Office

Puedes activar este modo haciendo clic en el botón de Condiciones en la Ficha de Diseño.

La vista de Diseño de Macro cambiará para tomar este aspecto (observa como se ha añadido una columna a la izquierda):

En esta columna podremos introducir condiciones para que la acción establecida en la fila se ejecute o no según el resultado de la condición. Por ejemplo si escribimos [Formularios]![Clientes]![IDCliente]=4 en la columna Condición, su acción sólo se ejecutará en el caso de que la condición sea afirmativa, es decir, que el IDCliente sea igual a 4.

Esto nos abre muchas posibilidades, sobre todo si lo combinamos con los puntos suspensivos (...).

120

SENATI-Computación e Informática

ones de Inicio

Si escribimos una condición y resulta verdadera se ejecutará la acción que se encuentre en la misma fila, ¿Pero qué pasa si queremos que la condición ejecute más de una acción? Muy fácil, escribe puntos suspensivos en la columna Condi ción para todas aquellas acciones siguientes que quieres que se ejecuten al resultar afirmativa la condición. Si la condición diese como resultado falso, la Macro saltará a la siguiente acción que no tenga puntos suspensivos en la columna Condición. En el campo Condición también podemos incluir expresiones más complejas, como: [Formularios]![Cursos]![Fecha Inicio] Entre #2 -Mar-2006# Y #9-Nov-2007# para indicar si la fecha se encuentra en un intervalo, o EsNulo ([Formularios]![Cursos]![nºhoras]) para realizar la acción si no hay nada guardado en el campo nºhoras. Puedes unir varias condiciones utilizando los operadores Y y O como vimos en el tema de consultas. Aunque a primera vista el uso de Macros en Access pueda parecer algo limitado, veremos en las próximas páginas que podemos crear grupos de macros y definir bucles repetitivos que nos permitirán realizar operaciones mucho más complejas.

Grupos de Macros Cuando tenemos muchas macros, puede llegar a ser dificultoso localizar una macro dentro de la ventana Base de Datos. Al igual que es más cómodo agrupar los archivos en carpetas, puede ser útil agrupar nuestras macros en grupos de macros que contengan macros relacionadas. También los grupos de macros pueden ser útiles para definir macros a modo de subrutinas dentro de una macro principal. Para definir un grupo de macros haremos uso de la opción Nombres de macro en la pestaña Diseño.

Si activas el botón verás que la Vista de Diseño de Macros cambia para añadir una nueva columna a la izquierda:

SENATI-Computación e Informática

121

Microsoft Office

Esta columna nos da la opción de crear diferentes macros dentro de una Macro principal. Imagina que tenemos la siguiente macro y la guardamos como Macro1:

Macro1 aparecerá en la ventana Base de Datos como una macro, pero realmente será un grupo de macros formado por las macros nombre1, nombre2 y nombre3. A partir de este momento podremos ejecutar las acciones AgregarMenu, CuadroMsj, y Beep simplemente llamando a la macro Macro1.nombre2. Sencillo, ¿verdad? Observa que para llamar a una macro que forma parte de un grupo de macros, hay que primero indicar el nombre del grupo y después el nombre de la macro separados por un punto.

Crear Bucles Si una macro se puede asemejar a un programa porque consiste en una serie de acciones que se ejecutan según un determinado orden, y que además incluye alternativas (gracias a la columna Condición), nos faltaba un concepto imprescindible en programación, el concepto de estructuras repetitivas (bucles). Pues bien, ahora aprenderemos una nueva acción que nos permite en cierta medida resolver el problema. Se trata de la acción EjecutarMacro.

EjecutarMacro: Nos da la posibilidad de llamar a una macro desde dentro de otra macro y repetir la ejecución de dicha macro, definiendo así un bucle repetitivo.

122

SENATI-Computación e Informática

ones de Inicio

Para ello deberemos especificar el Nombre de macro que queremos ejecutar. Por ejemplo, en el caso anterior, Macro1, Macro1.nombre1, Macro1.nombre2 o Macro1.nombre3. Podemos indicar que la Macro se ejecute más de una vez escribiendo en Número de repeticiones un número que indique cuántas veces queremos que se repita la ejecución de la macro (el número deberá ser mayor que 1). En Expresión de repetición podremos introducir una expresión condicional para que se repita la ejecución de la macro mientras la condición se cumpla (sea verdadera). Se evalúa la condición antes de ejecutar la macro así que si al empezar, la condición no se cumple, la macro no se ejecutará. ¡Ojo con los bucles infinitos! si utilizas el argumento Expresión de repetición la condición que pongas deberá depender de un parámetro que cambie dentro de la macro que se repite, sino podrás entrar en un bucle que no se acabe nunca!! Para componer la condición se nos dará la opción de utilizar el Generador de Expresiones. Ahora veremos una estructura que ilustrará el u so de la combinación de ambas técnicas.

Como puedes ver en la imagen, si reproducimos esta estructura seremos capaces de generar un bucle. Veamos que hemos hecho. En un punto de la macro necesitamos ejecutar unas acciones que se repitan hasta determinado momento. Para lograrlo lo que hacemos es incluir una llamada a la macro bucle que se encuentra en Macro1. Por lo que en el argumento Nombre de macro de la acción EjecutarMacro escribiremos Macro1.bucle. En el argumento Expresión de repetición escribiremos la condición que ha de cumplirse para que se vuelva a repetir el proceso. En caso de que la condición sea falsa, el proceso dejará de repetirse y continuará con la lista de acciones que siguen hasta la acción Detener Macro que terminará la ejecución de la macro.

SENATI-Computación e Informática

123

Microsoft Office

Observa que al final de la macro Macro1.bucle, hemos incluido la acción Cerrar, si como argumento de la acción pusiésemos la macro Macro1, este bloque solamente se ejecutaría como mucho una vez ya que la macro se cerraría antes de que se pueda repetir el bloque.

Depuración de errores Cuando creamos una Macro con diferentes condiciones y saltos de ejecución puede que al final la comprobación de que actúa correctamente sea cada vez más difícil. Access incorpora una herramienta que permite seguir la ejecución de la Macro paso a paso pudiendo en cada momento ver qué procesos se están llevando a cabo y los resultados que recibe de la base de datos. Para activar esta opción solamente deberemos de hacer clic sobre el botón de Paso a paso en la pestaña Diseño. Una vez activada, cada vez que se ejecute una macro en el sistema lo hará en modo Paso a paso. Cuando una Macro se ejecuta de este modo para cada acción que realiza produce una salida de información que nos llega a modo de Cuadro de diálogo:

Como puedes ver en la imagen este cuadro de diálogo te mostrará el Nombre de la macro que se está ejecutando. Si tiene condición, y en caso afirmativo, en qué consiste dicha condición y su estado de coincidencia (Verdadero: o Falso:).También podrás ver el Nombre de la acción que se va a ejecutar, y los Argumentos que tiene. En la imagen la función EstablecerValor cambiaría el valor del campo Nombre Curso a "Diseño Web" si la condición no hubiese dado falso. Para continuar con la reproducción Normal de la Macro pul sa Continuar. Si pulsas Paso a Paso seguirás en el mismo modo. Puedes detener la Macro pulsando el botón Detener. En cualquier momento en la reproducción de una Macro puedes detenerla también utilizando la combinación de teclas CTRL + INTRO. Esto te puede ser muy útil si una Macro entra en un bucle infinito y el sistema deja de responder.

124

SENATI-Computación e Informática

ones de Inicio

AutoKeys o Métodos abreviados de Teclado Las Macros también te permitirán crear métodos abreviados de teclado. Esto es, podremos asignar a través de una Macro diferentes acciones mediante una combinación de teclas. El modo de construir una Macro que actúe de este modo es muy sencillo. Sólo tendrás que seguir los siguientes pasos: 1. Crea una nueva Macro y llámala AutoKeys. 2. Activa la opción Nombres de Macro para añadir la columna con el mismo nombre.

3. En la columna Nombre de Macro deberás indicar la combinación de teclas que activarán las acciones que escribas en la columna Acción. De este modo podrás crear varias combinaciones y asignarlas a un grupo de acciones.

En vez de Combinación1, Combinación2, Combinación3, etc... Deberás escribir la combinación de teclas que quieres que ejecuten las acciones, siguiendo la sintaxis que encontrarás en la siguiente tabla: Sintaxis de la Combinación Combinación de Teclas ^C or ^1

CTRL+C ó CTRL+1

{F3}

F3

^{F3}

CTRL+F3

+{F3}

MAYUS+F3

SENATI-Computación e Informática

125

Microsoft Office

{INSERT}

INSERT

^{INSERT}

CTRL+INSERT

+{INSERT}

MAYUS+INSERT

El modo en el que indicaremos las combinaciones es muy sencillo. Simplemente tendremos que escribir los nombres de las teclas que forman la combinación en la columna Nombre de Macro. Lo único que deberás tener en cuenta es que la tecla CTRL se escribirá como ^, y la tecla MAYUS como +. Las teclas que contengan más de una letra deberán ir encerradas entre llaves {} para que no se confundan c on combinaciones. Por ejemplo, END sería el equivalente a la combinación de teclas E+N+D, mientras que {END} equivaldría a pulsar la tecla FIN. Es interesante asociar combinaciones de teclas a la acción EjecutarMacro para permitir lanzar una macro con sólo pulsar unas teclas.

Asignar macros a controles en formularios Después de haber creado las macros usted debe hacer que se activen a través de los objetos en sus formularios. Por ejemplo puede obligar a que al pulsar un botón de comando se active una macro. Para configurar que la ejecución de una macro se realice cuando se haga clic en un control de un formulario: 1. Muestre la vista diseño del formulario. 2. Muestre las propiedades del control (puede hacer clic derecho sobre él y luego activar el comando Propiedades). 3. Active la ficha Eventos.

4. Haga clic en el control ubicado a la derecha de Al hacer clic. 5. Despliegue la lista y elija el nombre de la macro que desea ejecutar mediante el control elegido.

126

SENATI-Computación e Informática

ones de Inicio

6. Muestre la vista diseño del formulario, pruebe la asociación que ha realizado, guarde el formulario y ciérrelo a. Botones de comando

Asociar una macro con un botón de comando En la base de datos Pedidos, usted configurará el formulario de bienvenida para que al hacer clic en el botón Aceptar se cierre este formulario y se abra el Panel de control. Procedimiento • Muestre la vista diseño del formulario Panel de control. • Haga clic derecho sobre el botón de comando y luego active el comando Propiedades (deberá utilizar la barra de desplazamiento vertical del formulario para ver el botón de comando) • Active la ficha Eventos. • Haga clic en el control ubicado a la derecha de Al hacer clic. • Despliegue la lista y elija Cerrar bienvenida y Abrir Panel

SENATI-Computación e Informática

127

Microsoft Office

Elegir la macro que se ejecutará • Muestre la vista diseño del formulario y haga clic sobre el botón. Cuando realice esta acción se cerrará el formulario de bienvenida, se guardará automáticamente y se abrirá el formulario Panel de control. b. Etiquetas

Asociar macros a etiquetas En la base de datos Pedidos, usted configurará el formulario Panel de control para que al hacer clic en sus etiquetas se abran los formularios e informes a los que se refieren. Procedimiento • Muestre la vista diseño del formulario. • Muestre la ventana de propiedades para la etiqueta Catálogo de productos y en su evento Al hacer clic indique que se debe ejecutar la macro Abrir formulario Productos. • Sin cerrar la ventana de propiedades, haga clic en la etiqueta Pedidos en el formulario; nuevamente en la ventana de propiedades, indique que se debe ejecutar la macro Abrir formulario Pedidos en el evento Al hacer clic. • Asocie el resto de etiquetas en forma análoga a la indicada en el paso 3 • Cierre la ventana de propiedades. • Muestre la vista formulario y pruebe las etiquetas.

Macro Autoexec Si ya ha creado una macro que contiene las acciones que desea que se produzcan al iniciarse la base de datos, simplemente cambie el nombre de la macro a AutoExec, y se ejecutará la próxima vez que abra la base de datos. De lo contrario, siga estos pasos para crear una macro: 1. En el grupo Otros de la ficha Crear, haga clic en Macro. Si el comando no está disponible, haga clic en la flecha situada debajo del botón Módulo o Módulo de clase y, a continuación, haga clic en Macro. 2. En el Generador de macros, en la primera celda Acción vacía, seleccione la acción que desea realizar. Cuando corresponda, dentro de Argumentos de acción, escriba los valores apropiados en los cuadros para argumentos. Si no encuentra la acción deseada, en la ficha Diseño, en el grupo Mostrar u ocultar, asegúrese de que esté seleccionado Mostrar todas las acciones. Esto amplía la lista de acciones que se pueden utilizar, pero también se incluirán algunas acciones que solamente se pueden ejecutar si la base de datos está designada como "de confianza". Para obtener más información, vea los artículos Decidir si se debe confiar en una base de datos o Cómo se comportan los objetos de base de datos cuando son de confianza y cuando no lo son .

128

SENATI-Computación e Informática

ones de Inicio

3. Repita el paso 2 para cada acción adicional que desee que se produzca. 4. Haga clic en Guardar, y en el cuadro de diálogo Guardar como, escriba AutoExec. 5. Haga clic en Aceptar y luego cierre el Generador de macros. La nueva macro se ejecutará la próxima vez que abra la base de datos. Para obtener más información sobre la creación de macros, vea el artículo Crear una macro. Para omitir la macro AutoExec y otras opciones de inicio, mantenga presionada la tecla MAYÚS mientras se inicia la base de datos. Para obtener má s información, vea el artículo Omitir las opciones de inicio cuando se abre una base de datos. Otra forma de realizar acciones cuando se inicie una base de datos consiste en especificar un formulario de inicio y, a continuación, adjuntar las macros o código VBA a los eventos AlAbrir o AlCargar del formulario. Para obtener má s información, vea el artículo Establecer el formulario predeterminado que aparece cuando se abre una base de datos.

Opciones de exploración Cuando se crea una categoría personalizada, se crea para la base de datos que está abierta y la categoría está ligada a esa base de datos. No se pueden transferir categorías y grupos personalizados a otras bases de datos. Para crear y administrar categorías y grupos personalizados, se utiliza el cuadro de diálogo Opciones de exploración. Éstos son los pasos generales del proceso: Primero, se crea una categoría personalizada. Access proporciona la categoría: Personalizado. Puede cambiar el nombre de esa categoría y, a continuación, agregar o quitar grupos según sus necesidades, o bien, puede crear una nueva categoría en cualquier momento. Tras la creación de una categoría, se crea uno o varios grupos para la nueva categoría. Cierre el cuadro de diálogo Opciones de exploración y, en el panel de exploración, arrastre o copie y pegue los objetos de la base de datos que desee asignar al grupo personalizado. Los objetos se arrastran o se copian desde un grupo especial denominado Objetos no asignados, que Access crea cuando se crea una categoría personalizada. Cuando se agrega un objeto de base de datos desde el grupo Objetos no asignados a un grupo personalizado, Access crea un acceso directo a ese objeto: no se mueve ni se copia el propio objeto. Si se cambia de nombre o se elimina un acceso directo en un grupo personalizado, esos cambios no afectan al propio objeto, sólo al acceso directo a dicho objeto. Tras rellenar los grupos personalizados, puede ocultar el grupo Objetos no asignados y todos los demás grupos que no desee mostrar.

SENATI-Computación e Informática

129

Microsoft Office

Crear Categorías 1. Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y, a continuación, haga clic en Opciones de exploración.

2. En el cuadro de diálogo Opciones de exploración, bajo la lista Categorías, haga clic en Agregar elemento. Aparecerá una nueva categoría en la lista.

Esta figura ilustra una nueva categoría personalizada:

130

SENATI-Computación e Informática

ones de Inicio

3. Escriba un nombre para la nueva categoría y, a continuación, presione ENTRAR. Procure usar un nombre que tenga sentido para los usuarios de la base de datos. Tras crear el nombre, observe que el título de la lista a la derecha cambia para reflejar ese nombre. Por ejemplo, si asigna el nombre Mi panel de control a la nueva categoría, el título de la lista a la derecha será Grupos de "Mi panel de control". Asimismo, observe que la lista contiene un grupo denominado Objetos no asignados, que Access crea de forma predeterminada. Este grupo contiene todos los objetos de la base de datos, y son dichos objetos los que se utilizan para rellenar el grupo personalizado.

Tras crearse la categoría personalizada, se crea uno o varios grupos para dicha categoría. Se pueden crear tantos grupos como sean necesarios. Mantenga abierto el cuadro de diálogo Opciones de exploración y siga los procedimientos que se detallan a continuación

Crear un grupo personalizado 1. Bajo la lista Grupos de "nombre de grupo", haga clic en Agregar grupo y, a continuación, escriba un nombre para el grupo. Puede repetir este proceso tantas veces como crea necesario. Por ejemplo, Mi panel de control puede contener tres grupos: Formularios de entrada de datos, Informes y Consultas. Los grupos que agregue en esta fase del proceso dependen de las necesidades de los usuarios o de sus propias preferencias.

SENATI-Computación e Informática

131

Microsoft Office

2. Mantenga activada la casilla de verificación situada junto a Objetos no asignados y haga clic en Aceptar. Access cierra el cuadro de diálogo Opciones de exploración y agrega el nuevo grupo personalizado al panel de exploración, pero aún no podrá ver el nuevo grupo. 3. Siga los procedimientos descritos a continuación para poder ver el nuevo grupo y agregar objetos al grupo.

Agregar objetos a un grupo personalizado 1. Haga clic en el menú situado en la parte superior del panel de exploración y, en la sección superior del menú, haga clic en la nueva categoría. Los grupos creados para la categoría aparecen en la sección inferior del menú, junto con el grupo Objetos no asignados. 2. En el grupo Objetos no asignados, seleccione los elementos que desee usar en el grupo personalizado y, a continuación, muévalos a ese grupo. Access permite mover los elementos seleccionados de varias formas. Puede: Arrastrar los elementos individualmente. Mantener presionada la tecla CTRL y hacer clic en varios elementos y, a continuación, arrastrar los elementos hasta el grupo personalizado. Hacer clic con el botón secundario del mouse (ratón) en uno de los elementos seleccionados, elegir Agregar al grupo y, a continuación, hacer clic en el nombre del grupo personalizado. Cuando finalice, podrá dejar visible el grupo Objetos no asignados en el panel de exploración u ocultarlo.

132

SENATI-Computación e Informática

ones de Inicio

Ocultar el grupo Objetos no asignados 1. Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y haga clic en Opciones de exploración. 2. En el panel Grupos de categoría, desactive la casilla de verificación Objetos no asignados.

Después de crear una categoría personalizado y un grupo personalizado y de agregar algunos accesos directos al grupo, puede usar esos accesos directos para crear otros grupos. En el siguiente procedimiento se explica cómo realizar esta operación. Crear un nuevo grupo personalizado mediante un objeto de un grup o personalizado existente Para usar esta técnica, primero debe crear una categoría personalizada y agrupar los objetos siguiendo los procedimientos descritos en las secciones anteriores. 1. Con una categoría y un grupo personalizados abiertos en el panel de exploración, haga clic con el botón secundario del mouse en el objeto que desee colocar en un grupo nuevo. 2. Elija Agregar al grupo y, a continuación, haga clic en Nuevo grupo. Aparecerá un grupo nuevo en el panel de exploración

SENATI-Computación e Informática

133

Microsoft Office

Escriba un nombre para el nuevo grupo y, a continuación, arrastre accesos directos adicionales al nuevo grupo, según sea necesario.

Mostrar u ocultar los grupos y objetos de una categoría Es posible ocultar algunos o todos los grupos de una categoría personalizada y algunos o todos los objetos de un grupo. Recuerde los siguientes puntos: Access proporciona dos formas de ocultar un objeto. Se pueden usar los comandos del panel de exploración para ocultar un objeto de su grupo y categoría primarios, o bien, se puede elegir una propiedad de cada objeto y ocultarla de todos los grupos y categorías de la base de datos abierta. Los objetos y grupos ocultos pueden quedar totalmente invisibles, o bien, se pueden mostrar en el panel de exploración como iconos atenuados y no disponibles. Para ello, active o desactive la casilla de verificación Mostrar objetos ocultos en el cuadro de diálogo Opciones de exploración. Esta casilla de verificación se usa también para mostrar o restaurar un grupo u objeto. Los pasos que se describen en las siguientes secciones indican cómo se lleva a cabo cada tarea.

Ocultar un grupo en una categoría En el panel de exploración, haga clic con el botón secundario del mouse en la barra de título del grupo que desee ocultar y, a continuación, haga clic en Ocultar. Para realizar esta tarea también puede usar el cuadro de diálogo Opciones de exploración. Abra el cuadro de diálogo (vea los pasos descritos en la siguiente sección si no sabe cómo hacerlo) y, en la lista Grupos de "categoría", desactive la casilla de verificación situada junto al grupo que desee ocultar.

Restaurar un grupo oculto en una categoría 1. Haga clic con el botón secundario del mouse en la barra de menús de la parte superior del panel de exploración y, a continuación, haga clic en Opciones de exploración en el menú contextual. 2. En la lista Categorías, seleccione la categoría que contenga el grupo oculto. 3. En la lista Grupos de "categoría", active la casilla de verificación situada junto al grupo oculto. 4. Haga clic en Aceptar.

Ocultar un objeto en su grupo primario En el panel de exploración, haga clic con el botón secundario del mouse en el objeto y, a continuación, haga clic en Ocultar.

134

SENATI-Computación e Informática

ones de Inicio

Ocultar un objeto de todos los grupos y categorías 1. Haga clic con el botón secundario del mouse en el objeto que desee ocultar y, a continuación, haga clic en Propiedades del objeto. Aparecerá el cuadro de diálogo Propiedades y Access agregará el nombre del objeto al título del cuadro de diálogo. Por ejemplo, si abre un formulario denominado Pedidos, el título del cuadro de diálogo será Propiedades de Pedidos. La siguiente figura muestra el cuadro de diálogo.

2. Active la casilla de verificación Oculto. 3. Haga clic en Aceptar. Restaurar o mostrar un objeto oculto 1. Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y haga clic en Opciones de exploración en el menú contextual. 2. Bajo Opciones de presentación, active la casilla de verificación Mostrar objetos ocultos. 3. Haga clic en Aceptar y vuelva al panel de exploración. En el panel se muestra un icono atenuado para todos los objetos ocultos. 4. Siga uno de estos procedimientos: Si ocultó el objeto únicamente de su grupo y categoría primarios, haga clic con el botón secundario del mouse en el objeto y, a continuación, haga clic en Mostrar. Si ocultó el objeto de todas las categorías y todos los grupos estableciendo la propiedad Oculto, haga clic con el botón secundario del mouse en el objeto, haga clic en Propiedades de vista y, a continuación, desactive la casilla de verificación Oculto.

SENATI-Computación e Informática

135

Microsoft Office

Quitar y restaurar objetos de grupos personalizados Los grupos personalizados pueden cambiar con el tiempo a medida que cambien las necesidades de los usuarios o de la empresa. Es posible agregar o quita r los objetos de un grupo en cualquier momento. Los siguientes procedimientos indica n cómo hacerlo.

Eliminar objetos de un grupo personalizado En el panel de exploración, haga clic con el botón secundario del mouse en el objeto que desee quitar y, a continuación, haga clic en Eliminar.

Restaurar un objeto en un grupo personalizado 1. Si está oculto el grupo Objetos no asignados, muéstrelo. a. Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y haga clic en Opciones de exploración en el menú contextual. b. En el panel Grupos de "categoría", active la casilla de verificación situada junto a Objetos no asignados. 2. Según sea necesario, arrastre o copie y pegue el objeto deseado del grupo Objetos no asignados en el grupo personalizado.

Cambiar el nombre de un objeto de un grupo personalizado 1. En el panel de exploración, haga clic con el botón secundario del mouse en el objeto cuyo nombre desee cambiar y, a continuación, haga clic en Cambiar nombre de acceso directo. Escriba el nuevo nombre del acceso directo y, a continuación, presione ENTRAR

Cambiar entre categorías Para cambiar entre categorías, solo hay que hacer clic en el Menú de Categorías y elegir la Categoría de su Preferencia

136

SENATI-Computación e Informática

ones de Inicio

Ordenar categorías Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y elija Ordenar por.. Elegir la Opción que desee

Vistas Haga clic con el botón secundario del mouse en el menú de la parte superior del panel de exploración y elija Vista por:

Opciones de la base de datos Formulario o página inicial Cuando usted abre una base de datos se le muestra de forma predeterminada la ventana que le permite administrar objetos en ella (ventana Base de datos); esto es bueno, pero en muchos casos, cuando se entrega una base de datos a un usuario final, se desea que ellos accedan directamente a los formularios en un orden predefinido (precisamente para eso se ha diseñado el Panel de Control en este capítulo). Usted puede configurar el comportamiento de Access al abrirse una base de datos de la siguiente manera: 1. Haga clic en la ficha Complementos, menú Herramientas y luego active la opción Inicio

SENATI-Computación e Informática

137

Microsoft Office

Usted verá aparecer el cuadro de diálogo Inicio.

2. Especifique la configuración que desee establecer y haga clic en Aceptar. 3. Cierre la base de datos y vuelva a abrirla para ver el efecto de su configuración.

Para abrir una base de datos ignorando las opciones de inicio que se haya establecido en ella: 1. Seleccione el archivo de la base de datos en el explorador de Windows. 2. Mantenga presionada la tecla SHIFT mientras hace doble clic sobre el archivo.

Finalizar el trabajo Usted hará que al abrir la base de datos Pedidos:

138



La barra de título muestre el texto Comercial Duop.



Se muestre el formulario Bienvenido.



No se muestre la ventana Base de datos.



Se muestre la barra de menús hrrComercial en lugar de la barra de menús predeterminada.



Se impida ver la ventana Base de datos pulsando la tecla F11.

SENATI-Computación e Informática

ones de Inicio

Procedimiento 1. Haga clic en la ficha Complementos, el menú Herramientas y luego active la opción Inicio. 2. Realice las siguientes acciones en el cuadro de diálogo: a. Escriba Comercial Doup en la caja de texto Título de la aplicación. b. En el cuadro combinado Mostrar Formulario/Página, seleccione Inicio. c. En el cuadro mnuComercial.

combinado

Barra

de

menús

(sic),

seleccione

d. Desactive la casilla Usar las teclas especiales de Access. 3. Haga clic en el botón Aceptar. 4. Cierre la base de datos y vuelva a abrirla para ver el efecto de su configuración.

Agregar barra de menús personalizada. Puede utilizar macros de Access para crear menús contextuales personalizados que aparezcan al hacer clic con el botón secundario en formularios, informes o controles individuales. También puede crear menús personalizados que aparezcan en la cinta de formularios o informes específicos. Para crear un menú mediante macros, son necesarios tres pasos principales: 1. Crear un grupo de macros para definir los comandos del menú. 2. Crear otra macro para construir el propio menú. 3. Adjuntar el menú a un control, un formulario, un informe, o a la base de datos como un todo. En las secciones siguientes, se explican estos pasos en detalle.

Paso 1: Crear un grupo de macros que contenga los comandos del menú En este paso, se crea un grupo de macros, cada una de las cuales será un comando independiente en el menú contextual. ¿Qué es un grupo de macros? a. En el grupo Otros de la ficha Crear, haga clic en Macro. Si el comando no está disponible, haga clic en la flecha situada debajo del botón Módulo o Módulo de clase y, a continuación, haga clic en Macro. b. En el grupo Mostrar u ocultar de la ficha Diseño, haga clic en Nombres de macro para mostrar la columna Nombres de macro. c. Para cada comando que desee agregar al menú contextual personalizado:

SENATI-Computación e Informática

139

Microsoft Office

En la columna Nombre de macro, escriba el texto que desee que aparezca en el menú contextual (por ejemplo, "Imprimir informe" o "Guardar"). Si desea crear una tecla de acceso de modo que se pueda elegir el comando con el teclado, escriba el símbolo & delante de la letra que desea designar como tecla de acceso en el nombre del comando (por ejemplo "&Guardar"). Esta letra aparecerá subrayada en el menú. En la columna Acción, seleccione la primera acción que desea que se produzca al hacer clic en el comando dentro del me nú contextual. Si desea que se ejecuten más acciones al seleccionar este comando, agréguelas en las líneas siguientes. En todas las acciones siguientes, deje vacía la celda Nombre de macro. Para crear una línea entre dos comandos del menú, escriba un guión (-) en la columna Nombre de macro entre los comandos de menú correspondientes. d. Guarde la macro con algún mcrComandosMenúContextual.

nombre,

por

ejemplo,

La ilustración siguiente muestra un ejemplo de grupo de macros para un menú personalizado o contextual.

Paso 2: Crear una macro para construir el menú Este paso puede parecer redundante, pero para construir el menú contextual a partir del grupo de macros creado en el paso 1, debe crear una segunda macro que contenga la acción de macro AgregarMenú . Esta macro se denomina a veces "macro de menú". a. En el grupo Otros de la ficha Crear, haga clic en Macro. Si el comando no está disponible, haga clic en la flecha situada debajo del botón Módulo o Módulo de clase y, a continuación, haga clic en Macro. b. En la primera línea de la macro, seleccione AgregarMenú en la lista Acción. c. En Argumentos de acción, en el cuadro Nombre del menú, escriba el nombre del menú (por ejemplo, "Comandos de 140

SENATI-Computación e Informática

ones de Inicio

informe"). Este argumento no es obligatorio, pero se recomienda por si en el paso 3 quisiera agregar el menú a una ficha de la cinta (por ejemplo, la ficha Complementos de un informe o formulario). Si en el paso 3 agrega el menú como menú contextual, el argumento Nombre del menú no se tendrá en cuenta. d. En el cuadro Nombre de macro de menú, escriba el nombre de la macro creada en el paso 1. e. Guarde la macro con algún mcrAgregarMenúContextual.

nombre,

por

ejemplo,

La ilustración siguiente muestra un ejemplo de macro de menú que crea el menú diseñado en el paso 1.

Paso 3: Adjuntar el menú a un control, formulario, informe o base de datos Según dónde desee que aparezca el menú, siga uno o varios de los procedimientos siguientes.

Agregar el menú a la ficha Complementos de un formulario o informe Utilice este procedimiento si desea que el menú aparezca en la ficha Complementos de un formulario o informe en particular, como se muestra en la ilustración siguiente:

a. En el panel de navegación, haga clic con el botón secundario en el formulario o el informe donde desea que aparezca el menú y, a continuación, haga clic en Vista Diseño. b. En la ficha Diseño, en el grupo Mostrar u ocultar, haga clic en Hoja de propiedades. c. Para seleccionar todo el objeto, seleccione Formulario o Informe en la lista que aparece en la parte superior del panel de tareas Hoja de propiedades. d. En la ficha Otras de la hoja de propiedades, en el cuadro de propiedad Menú contextual, escriba el nombre de la macro que creó en el paso 2 (en este ejemplo, “mcrAgregarMenúContextual”).

SENATI-Computación e Informática

141

Microsoft Office

La próxima vez que abra el formulario o informe, la ficha Complementos aparecerá en la cinta. Haga clic en la ficha para ver el menú. Para obtener más información sobre técnicas de personalización de la cinta, por ejemplo agregar fichas personalizadas u ocultar las fichas predeterminadas, vea el artículo Personalizar la cinta de opciones.

Agregar el menú como menú contextual de un formulario, informe o control Utilice este procedimiento si desea que el menú aparezca al hacer clic con el botón secundario en un formulario, informe o control específicos, como se muestra en la ilustración siguiente:

a. En el panel de navegación, haga clic con el botón secundario en el formulario o el informe donde desea que aparezca el menú y, a continuación, haga clic en Vista Diseño. b. En la ficha Diseño, en el grupo Mostrar u ocultar, haga clic en Hoja de propiedades. c. Seleccione el control u objeto al que desea adjuntar el menú contextual. d. Para seleccionar todo el objeto, seleccione Formulario o Informe en la lista que aparece en la parte superior del panel de tareas Hoja de propiedades. e. En la ficha Otras de la hoja de propiedades, en el cuadro de propiedad Barra de menús contextuales, escriba el nombre de la macro que creó en el paso 2 (en este ejemplo, “mcrAgregarMenúContextual”).

Agregar el menú como menú contextual global Este procedimiento reemplaza todos los menús contextuales predeterminados de la base de datos actual. Los menús contextuales personalizados que haya vinculado a formularios, informes o controles específicos no se verán afectados. a. Haga clic en el botón de Microsoft Office Opciones de Access.

y, a continuación, haga clic en

b. En el cuadro de diálogo Opciones de Access, haga clic en Base de datos actual. c. En Opciones de barra de herramientas y de la cinta de opciones, en el cuadro Barra de menús contextuales, escriba el nombre de la macro que creó en el paso 2 (en este ejemplo, “mcrAgregarMenúContextual”). Los menús contextuales personalizados sustituyen a los menús contextuales predeterminados de los objetos a los que se asocien. Si desea 142

SENATI-Computación e Informática

ones de Inicio

conservar algunos comandos de Access para utilizarlos en estos menús, use la acción EjecutarComando para colocar los comandos dentro de los grupos de macros de los menús donde los desee. Un menú contextual personalizado asociado a un control reemplaza cualquier otro menú contextual personalizado definido en la base de datos. Un menú contextual personalizado asociado a un formulario o informe reemplaza un menú contextual global personalizado. Cuando se especifica una macro de menú para un formulario, un informe o para la base de datos, Access ejecuta esta macro de menú siempre que se abre el formulario, el informe o la base de datos. Si modifica la macro de menú o el grupo de macros que definen los comandos mientras el formulario, el informe o la base de datos están abiertos, deberá cerrarlos y volverlos a abrir para ver los cambios. Para crear un submenú (submenú: menú que aparece cuando un usuario selecciona un comando en un menú de nivel superior.) , siga el paso 1 para crear un grupo de macros independiente que sólo contenga los comandos del submenú. A continuación, siga nuevamente el paso 1 para definir los comandos del menú de nivel superior. Agregue el submenú como un elemento en el grupo de macros de nivel superior, mediante la acción de macro AgregarMenú. La ilustración siguiente muestra el grupo de macros de un menú que contiene un submenú y, a continuación, muestra el menú contextual resultante. La tercera línea en el grupo de macros crea el submenú Exportar a... (mcrSubMenú).

Puede crear varios niveles de submenús mediante acciones AgregarMenú en los grupos de macros de cada nivel de menú. No olvide suministrar un valor para el argumento Nombre del menú de cada acción AgregarMenú, ya que de lo contrario el submenú aparecerá como una línea vacía en el menú de nivel superior.

SENATI-Computación e Informática

143

Microsoft Office

Sólo se admiten condiciones en la macro de menú de nivel superior. Dicho de otro modo, puede usar una condición en una macro de menú para determinar si un menú o menú contextual determinados aparecerán, pero solamente para los menús en el nivel superior. No se pueden usar condiciones para mostrar ni ocultar comandos o submenús en los menús. También puede utilizar una condición para mostrar u ocultar un menú contextual personalizado o un menú contextual global. De manera opcional, la macro de menú que cree en el paso 2 puede formar parte de un grupo de macros. Por ejemplo, si tiene varios menús contextuales para diferentes objetos o controles, puede crear un único objeto de macro que contenga todas las macros de menú necesarias. Asegúrese de mostrar la columna Nombre de macro y de escribir un nombre distinto para cada macro. En el paso 3, use este formato para hacer referencia a la macro: nombredegrupodemacros.nombredemacro. Por ejemplo, mcrAgregarMenúsContextuales.AgregarMenú2.

Preguntas de Repaso 1. ¿Qué es una macro? 2. ¿Cómo se crea una macro? 3. ¿Cómo se asigna una macro a una etiqueta en un formulario? 4. ¿Cómo se asigna una macro a un botón de comando en un formulario? 5. ¿Cómo se crea una barra de herramientas? 6. ¿Cómo se especifican las opciones de inicio? 7. ¿Qué debe hacerse para que al abrirse una base de datos de Access se ignoren las opciones de inicio que se haya especificado?

Ejercicios Casos Propuestos Abra la base de datos Biblioteca; en ella: 1. Cree un panel de control que abra los siguientes objetos de la base de datos: a. El formulario Categorías b. El formulario Usuarios c. El informe Préstamos. 2. Cree una barra de herramientas que abra al formulario Panel de control y a los objetos mencionados en la pregunta 1 de esta actividad.

144

SENATI-Computación e Informática

Capítulo

Programación con VBA En este capítulo aprenderemos:

SENATI-Computación e Informática



Agregar controles ActiveX



Programación de controles y procesos con VBA

145

Uso de VBA en Access VBA quiere decir Visual Basic para Aplicaciones. Es un conjunto de librerías, (un tipo especial de programas), desarrollado por Microsoft que incluye, entre otras cosas, un entorno de desarrollo y un lenguaje de programación. VBA no es exclusivo de Access; lo podemos encontrar también en todas las aplicaciones de Office como Word o Excel, en otro tipo de programas como Project o Visio, y en programas que no son de Microsoft y tan diversos como Corel Draw o AutoCad. Dominando los fundamentos de VBA, se podría desarrollar aplicaciones en cualquiera de esos aplicativos. VBA tiene un entorno de programación que es semejante para todos estos programas. Por ejemplo:

VBA para Access

VBA para MS Word

VBA para Corel Draw

VBA para AutoCAD

SENATI-Computación e Informática

147

Microsoft Office

Los módulos Los módulos son los objetos en los que se guarda el código que va a utilizar VBA. Hay tres tipos de módulos. 

Módulos generales



Módulos asociados a formularios e informes



Módulos de Clase.

Actividad 1: Crear un Formulario Manos a la obra: vamos a crear una nueva base de datos con el nombre Entrega01.mdb

Para acceder a los módulos generales debemos presionar en la Ficha Crear, y luego la Cinta Otros, para luego elegir Modulo.

148

SENATI-Computación e Informática

ic ón con VBA

Una vez hecho esto se abre el editor de VBA y nos crea un módulo con el original nombre de Módulo1.

Este módulo está vacío, salvo la primera Linea: Option Compare Database Desde la ventana del editor que se ha abierto, presionamos la opción de menú: Herramientas > Opciones

En el formulario que aparece activaremos la opción [Requerir declaración de variables].

SENATI-Computación e Informática

149

Microsoft Office

Le damos a Aceptar. ¿Pero qué es esto?Cuando empecemos a escribir código, veremos que existen unos elementos que se llaman variables, a los que podremos asignar valores. Si tenemos activada la opción [Requerir declaración de variables] nos obligará a declarar las variables antes de poder usarlas. Más adelante veremos que hay variables que pueden contener Texto, Números, Fechas, Objetos, etc. Esto significa darle nombre y expresar qué tipo de dato va a contener. Una vez hecho esto grabamos el módulo dándole al botón Guardar ó a la opción de menú Archivo, Guardar ó combinando las teclas [Ctrl] + [S]

Aceptamos el nombre por defecto Módulo1 y cerramos la ventana. Para cerrar la ventana del editor podemos usar Varios caminos: 1. Hacemos clic en el menú Archivo y elegimos Cerrar y volver a Microsoft Office Access

2. O simplemente usar el botón Cerrar

Nuestro primer formulario con código Vamos a crear un nuevo formulario que lo vamos a llamar Saludo. Para que nos de plena libertad de actuación, vamos a desactivar el botón del [Asistente para controles]

150

SENATI-Computación e Informática

ic ón con VBA

1. Nos vamos a la Ficha Crear, Cinta Formularios y hacer clic en Diseño del Formulario 2. Lo guardamos como Saludo

3. Añadimos una Etiqueta al formulario.

a. Utilizando las Propiedades, ponemos a la propiedad [Nombre] de la etiqueta el valor lblSaludo (Ficha Otras de la hoja de Propiedades) sustituyendo el que tenía por defecto: Etiqueta1. b. Desde la Ficha [Formato] le ponemos a la propiedad [Título] el valor Saludo, a la propiedad [Tamaño de la fuente] el valor 24, y al [Color de texto] el valor 255 (Rojo) y a la [Alineación del texto] el valor Centro. 4. Añadimos un Botón y le ponemos como [Nombre], en vez de Comando2, cmdSaludo 5. Seleccionamos el Formulario y ponemos a No las propiedades [Selectores de registro], [Botones de desplazamiento] y Separadores de registro. 6. La propiedad [Centrado automático] la ponemos a Sí, y a la propiedad [Título] el valor Mi primer código.

SENATI-Computación e Informática

151

Microsoft Office

Le ponemos como [Nombre] Saludo. Si visualizamos el formulario se verá algo así como esto:

Si presionamos el botón vemos que no pasa nada. Vamos a hacer que cuando se presione el botón aparezca el mensaje ¡¡¡Hola Mundo!!! en la etiqueta lblSaludo, sustituyendo su contenido actual que es Saludo.

Un poquito de teoría Windows funciona con las llamadas Ventanas. Esas ventanas contienen objetos, y tanto las ventanas como los objetos pueden mandar unos “mensajes” para indicar a la aplicación que usa Windows, o al propio Windows que han ocurrido determinadas cosas. Esos mensajes se llaman Eventos. Por cierto; en realidad muchos de los objetos, como los botones, también son ventanas; pero esa es otra guerra. En nuestro caso tenemos los siguientes objetos: • Formulario Saludo • Etiqueta lblSaludo • Botón cmdSaludo Cada uno de esos Objetos posee una serie de Propiedades, generan determinados Eventos y pueden hacer determinadas cosas mediante unos procedimientos propios que se llaman Métodos. Por ejemplo, al presionar el botón cmdSaludo, se genera el evento [Al hacer Clic] (Click). Podríamos capturar ese evento y aprovecharlo para, por ejemplo, cambiar el texto de la etiqueta lblSaludo. El texto que aparece en la etiqueta está en la propiedad [Título]; en inglés [Caption]. Ahora la pregunta: ¿dónde y cómo se hace todo eso? Cada formulario, y veremos más adelante que también cada informe, lleva asociado un módulo especial. Se llama módulo de clase del formulario. Vamos a verlo. En el modo Diseño del formulario Saludo, seleccionamos el botón cmdSaludo. Abrimos la Hoja de propiedades y seleccionamos la pestaña [Eventos], y dentro de éstos el evento [Al hacer clic]. Al poner el cursor sobre él, nos muestra un botoncito con tres puntos. Pulsamos en él, y seleccionamos [Generador de código] en la ventana que se nos abre. A continuación pulsamos en el botón [Aceptar].

152

SENATI-Computación e Informática

ic ón con VBA

Tras esto nos abrirá el módulo de clase del formulario Saludo, con el esquema de código correspondiente al evento Clic del botón cmdSaludo:

Crea el siguiente código: Option Compare Database Option Explicit Private Sub cmdSaludo_Click() End Sub Lo que ahora nos importa es el conjunto Private Sub cmdSaludo_Click() End Sub Este código se corresponde al procedimiento que recoge el evento Clic del botón. Consta de varias partes: Private Sub: Indica que empieza un procedimiento del tipo Sub, más adelante veremos en detalle qué es esto. cmdSaludo_Click(): Indica que es el procedimiento al que llama el evento Click del botón cmdSaludo. End Sub: Indica el punto donde acaba el procedimiento Entre esas dos líneas podemos escribir el código que le dirá a Access qué es lo que tiene que hacer. Vamos a hacer 2 cosas:

SENATI-Computación e Informática

153

Microsoft Office

1. Escribiremos en la propiedad [Título] (Caption) de la etiqueta el texto Hola Mundo. 2. En la propiedad [Título] (Caption) del formulario mostraremos el texto. Aquí estoy. Debo modificar el texto del código para que ponga: Option Compare Database Option Explicit Private Sub cmdSaludo_Click() Me.lblSaludo.Caption = "¡¡¡Hola Mundo!!!" Me.Caption = "¡Aquí estoy!" End Sub Al escribir el texto, se abre una ventana de Ayuda contextual, lo que simplifica en gran medida la escritura correcta del texto.

Esta ventana te va mostrando las propiedades y métodos. Para seleccionar uno en concreto podemos utilizar la tecla [Enter], o mejor aún, la tecla [tab] ó de tabulación (es la tecla que suele estar encima de la de Bloqueo de Mayúsculas). Me.lblSaludo.Caption = "¡¡¡Hola Mundo!!!" Lo que hace es pones el texto ¡¡¡Hola Mundo!!! en la etiqueta lblSaludo. Las comillas son para indicar a VBA que lo que hay dentro es un texto. Me.Caption = "¡Aquí estoy!" Pone el texto ¡Aquí estoy!en el título del formulario. Me es el propio formulario. Si nos fijamos en la sentencia Me.lblSaludo.Caption está indicando la propiedad Caption del objeto lblsaludo del formulario actual. Fijese que cada objeto ó propiedad está separada por un punto. Hablaremos más de esto. Cerramos la ventana de edición del código, y si hemos seguido correctamente los pasos, al presionar el botón formulario debería tener un aspecto semejante a éste:

154

SENATI-Computación e Informática

ic ón con VBA

Entorno de desarrollo Ya hemos comentado que VBA para Access tiene un entorno de desarrollo similar al de otras aplicaciones con VBA. Este entorno recibe el nombre de IDE, que significa algo así como Entorno de Desarrollo Integrado. En el “idioma bárbaro” se escribe Integrated Development Environment. Este entorno consta de una serie de ventanas y botones, algunos de los cuales se muestran en el siguiente gráfico Interrumpir Ejecutar Macro

Las ventanas, por el momento más importantes para nosotros, son •

Ventana de Código Es la ventana en la que se escribe todo el código que va a gestionar nuestra aplicación.

SENATI-Computación e Informática

155

Microsoft Office

Podemos seleccionar el módulo que se mostrará en cada momento, por ejemplo seleccionándolo con un doble clic en la ventana del Explorador del Proyecto. •

Ventana del Explorador del Proyecto La ventana del proyecto nos muestra todos los objetos que poseen módulos. Entre ellos tenemos los módulos de Formularios e Informes, los módulos estándar, y los módulos de clase. En esta primera parte del cursillo vamos a trabajar con los módulos asociados a formularios y los módulos estándar. Si en la ventana del proyecto hacemos doble clic sobre cualquiera de los elementos que aparecen, abriríamos su módulo correspondiente. Por ejemplo, si en la base de datos correspondiente al gráfico presionáramos (doble clic) el formulario Form_frmMarciano nos abriría el módulo asociado al formulario frmMarciano. Si presionamos sobre Funciones Marcianas nos abriría el módulo estándar Funciones Marcianas y si presionáramos sobre CMarciano, nos abriría el módulo de clase CMarciano. Fijaros que el icono asociado a cada módulo cambia en función del tipo que sea.



Ventana Inmediato Esta es una ventana desde la que podemos ordenar que se ejecuten determinadas órdenes, o imprimir desde el código determinados valores para efectuar comprobaciones. Recibe también el nombre de Ventana de Depuración. Su mayor utilidad es para la depuración del código, es decir para efectuar comprobaciones de errores. De hecho es un objeto que recibe el nombre de Debug.



Ventana Locales Esta es una ventana que también sirve para la comprobación y el seguimiento de los valores que van tomando determinados parámetros, variables, etc. durante la ejecución del código. Por tanto comparte la función de depuración con la ventana Inmediato.



Ventana Propiedades En esta ventana podemos ver las propiedades de los diferentes objetos que intervienen en el proyecto, al estilo de la ventana de propiedades del Formulario ó Informe en el modo diseño. Los módulos, como Objetos de Access, también tienen sus propiedades.

Existen otras ventanas no comentadas aquí, pero que no dejan de ser importantes. Entre ellas podemos destacar la Ventana del Examinador de Objetos, o la Ventana de Inspección, de las que hablaremos más adelante.

156

SENATI-Computación e Informática

ic ón con VBA

Actividad 2: Uso de la ventana Inmediato Creamos una nueva base de datos a la que llamamos Entrega02.mdb Vamos a Módulos y presionamos en el botón [Nuevo]. Nos creará un módulo con el original nombre de Módulo1. Vamos a examinar las ventanas que se abren y las comparamos con el gráfico de la Actividad 1. ¿Identificas lo que se ha explicado en los puntos anteriores? Si por casualidad no apareciera la ventana Inmediato, haz lo siguiente: Vete al menú Ver y presiona en la opción [Ventana Inmediato]; o más fácil aún, presiona la combinación de teclas [Ctrl] + [G]. Vamos a mantener las ventanas de Código, la de Inmediato y la del Explorador del proyecto. Las otras, si te molestan, puedes cerrarlas. Más tarde las podrás abrir con los botones o las opciones de menú correspondientes (Menú Ver > y seleccionar su opción). ¿Para qué sirve la ventana Inmediato? Vamos a hacer un ejemplo. Pincha con el cursor en ella, escribe lo siguiente: Print 4 + 5 y dale a la tecla [Enter] Y ¡oh sorpresa! Escribe 9 en la siguiente línea. Ahora escribe? 4 + 5 más [Enter] Y vuelve a escribir la cifra 9 Escribe: ? 4 * 5 más [Enter] ¿Adivinas qué va a escribir? ¡Premio! 20 Ahora vamos a hacerlo un poco más complicado a = 2 : b = 4 : Print a * b Pues sí, te escribe 8 en la siguiente línea. ¿Qué pasará si escribo? a^b y aprieto [Enter]? ¡Sorpresa! Ha escrito 16 que es 2 elevado a 4 Si ahora presiono la tecla de la barra de menú que tiene la forma de un cuadradito azul y que en el gráfico la identifico con Interrumpir la ejecución y reiniciar, si vuelvo a escribir. ? a^b como resultado me da 1. Pensemos un poco sobre estos sorprendentes resultados. Tras la primera línea a = 2 : b = 4 : Print a * b Parece que Access recuerda que existe “algo” llamado a, que se le ha dado el valor 2 y algo llamado b que tiene el valor 4, como se demuestra tras el resultado de escribir la segunda vez ? a^b SENATI-Computación e Informática

157

Microsoft Office

Pero resulta que tras presionar el botón de Reiniciar (el cuadradito azul) resulta que Access se equivoca y da como resultado 1. Pues no, Access no se ha equivocado. El exponente b tiene el valor 0, y cualquier número elevado al exponente 0 da como resultado 1. En realidad éste no es un gran ejemplo, ya que estaríamos en el caso singular de 0 elevado a cero, que no está definido en el campo de los números reales. Pero no vamos a ser más “papistas que el Papa”. Vamos a hacer ahora otro experimento. Escribimos en la ventana Inmediato: a = "2" : b = "4" : ? a + b Tras presionar la tecla Enter el resultado es ¡chan, chan….! Si se te ha ocurrido que sería 6 te puedo decir que estás equivocado. Si tu respuesta ha sido 24, has acertado; Como introducción hemos usado unos elementos que se llaman Operadores. Los que hemos usado por ahora son: + Suma * Producto ^ Exponenciación El símbolo: no es el operador de división. En realidad es un simple separador de instrucciones. El operador de división es /. Hay otros muchos más que ya iremos viendo poco a poco. ¿Por qué al escribir a = "2" : b = "4" : ? a + b, nos da 24? Vamos a fijarnos en estos pequeños detalles a = "2" y b = "4" La cifra 2está entre 2 comillas, lo mismo que la cifra 4. Esto hace que VBA considere el 2 y el 4, no como números, sino como texto, también llamado cadena. Tras esto el operador + no efectúa una suma numérica, sino que enlaza dos cadenas de texto. Si enlazamos la cadena "2" con la cadena "4", nos da la cadena "24". Para los “listos” que ya se sabían el resultado, el resto que no haga ni caso de este párrafo, les informo que esto, en lenguajes más avanzados, se llama Sobrecarga de Operadores, lo que equivale a decir que el operador + está Sobrecargado. En resumen, que con números hace la operación de Suma numérica y con cadenas de texto la operación de enlazar cadenas. Vamos a seguir con “pequeñas sorpresas”. Escribamos algo tan inocente como: Print 2,4 * 2

158

SENATI-Computación e Informática

ic ón con VBA

¡Sorpresa!. ¿Qué ha pasado? Que nos imprime: 2 8 ¿Por qué no nos ha dado como resultado 4,8 que es lo que le daría a un buen cristiano, judío ó musulmán, (o lo que sea siempre que sea bueno)?. De toda la vida la operación 2,4 * 2ha dado como resultado 4,8 ¡La culpa de esto la tienen que tener los americanos! Y no es broma. Sólo un pequeño matiz: Los americanos utilizan la coma como separador de miles. En cambio el separador decimal, en vez de la coma, es el punto. En una sentencia Print, cuando encuentra una coma entre dos valores, intercala una tabulación. Probemos ahora: Print 2.4 * 2 y nos da 4,8 ¡Nueva sorpresa!. Ahora lo hace bien pero ¿no hemos quedado que el separador decimal es el punto?. ¿Por qué ahora me muestra el resultado decimal con una coma como separador? Cosas de Windows. Como sabe que al otro lado de la pantalla hay un hispano, le muestra el resultado “en cristiano”; Excepto para algunos PCs. De México, Florida y otra s “colonias”. ¿Y cómo lo sabe?-. Fácil; para eso está la Configuración Regional de Windows-. Vamos a dejar de divagar y sigamos experimentando. Escribimos en la ventana Inmediato lo siguiente: a = 2 : b = "Peras" : Print a + b ¡No salimos de sustos! ¿Qué he roto?

SENATI-Computación e Informática

159

Microsoft Office

Tranquilo que no has roto nada. ¿No nos enseñaron en el colegio que no había que sumar Peras con Manzanas? Le estamos diciendo a VBA que sume un número con un texto, y lógicamente se queja. Cambiemos la línea a = "2" : b = " Peras" : ? a + b Ahora sí imprime bien 2 Peras Al poner el 2 entre comillas, lo hemos cambiado al modo texto y entonces ha funcionado. Si hacemos a = "Dos" : b = " Peras" : ? a + b Nos imprimirá Dos Peras Tenemos “algo” llamado que le da lo mismo ser Número que Texto.

Actividad 3: Uso de Variables Ya hemos visto que en la ventana Inmediato podemos efectuar cálculos, con valores directos o con unos elementos a los que les asignamos valores. Todo esto es interesante, pero todavía no podemos hacer grandes cosas, de hecho con una simple calculadora seríamos más eficientes. Un poco de paciencia; todo a su tiempo… Si no tenemos abierto un fichero Access, es el momento para hacerlo, por ejemplo crea un nuevo archivo con el nombre Entrega03.mdb Abrimos el apartado [Módulos] y presionamos el botón [Nuevo]. Pulsamos con el cursor en la ventana de Código y escribimos lo siguiente: Option Compare Database Option Explicit Const Pi As Double = 3.14159265358979 ¿Qué significa esta última línea? A falta de explicar otros detalles, declaramos una Constante llamada Pi del tipo Double (un valor numérico de coma flotante de 8 bytes) y le asignamos el valor del famoso Pi. Les recuerdo que Pi es algo más que el simple 3,1416 que nos enseñaron en el colegio… Al declarar Pi como Constante nos impide que en otro punto del módulo podamos hacer algo así como Pi = 25.36 ¿Por qué?Porque el valor de una constante es en definitiva Constante, y no se puede cambiar-.

160

SENATI-Computación e Informática

ic ón con VBA

¿Y cómo podemos declarar algo que se pueda cambiar?Ese algo, en contraposición a una constante, se llama Variable. Para declarar variables se podría hacer algo así como Dim Precio As Currency Dim Nombre As String Enseguida veremos qué es eso de Currency y String. Ahora vamos a intentar usar el valor que hemos declarado de Pi. Pulsamos en la ventana Inmediato y escribimos ? Pi y presionamos [Enter] ¡Y no pasa nada! Se suponía que seríamos muy felices si nos imprimiera el valor 3,14159265358979 ¿Por qué no lo ha hecho?

Ámbito ó Alcance de las Constantes y variables Antes que nada aclarar que se suelen utilizar indistintamente ambos términos ¿Qué entendemos por ámbito o por Alcance? Algo tan simple, y a la vez tan complejo, como los lugares en los que VBA puede “Ver”, a una variable ó constante lo que equivale a que se entera que existen, las constantes y variables que declaramos. Más adelante veremos que todo esto aún se puede generalizar para otros elementos de la programación. En el punto anterior hemos escrito? Pi en la ventana Inmediato y no ha pasado nada. Al declarar en la cabecera de un módulo una variable con Dim, o una constante con Const hacemos que esa variable, y esa constante sólo sean visibles desde dentro del código del módulo. Para que puedan verse desde fuera es necesario ponerles la palabra Public. Esto se hace de forma diferente para las Constantes y Variables. En el caso de las constantes se pone Public delante de la palabra Const. En el caso de la s variables Publicsustituye a Dim. El código del módulo quedaría así: Option Compare Database Option Explicit Public Const Pi As Double = 3.14159265358979 Public Precio As Currency Public Nombre As String Si ahora pulsamos con el ratón en la ventana Inmediato, escribimos ? Pi y [Enter] Nos escribirá 3,14159265358979. Vamos a hacer otra prueba Escribe en la ventana Inmediato Pi = 3.1416y pulsa [Enter]. ¿Qué ha pasado?

SENATI-Computación e Informática

161

Microsoft Office

Simplemente que estamos intentando asignar un valor a una constante que ya lo tenía. En definitiva una constante sólo puede tomar el valor una vez, “y a ti te encontré en la calle”. Por definición una constante no puede cambiar. Sólo mantiene relaciones y se casa una vez. En cambio las variables son mucho más promiscuas. Todo lo anterior, entiendanlo como una introducción a la declaración de variables y Constantes, que en realidad presenta más posibilidades que las aquí vistas. En puntos posteriores, estudiaremos el tema con más profundidad. Aquí han aparecido cosas nuevas; por ejemplo la palabra Currency y la palabra String. En el ejemplo, con Currency, hacemos que la variable Precio sea del tipo Moneda; un tipo de datos “aparentemente” de coma flotante creado para manejar datos monetarios sin errores de “Redondeo”. Puedes obtener ayuda sobre estos tipos de datos poniendo el cursor, por ejemplo en cualquiera de sus nombres, por ejemplo Currency y pulsando [F1]. Con String hacemos que la variable Nombre sea tratada como una variable de tipo Cadena, que permite manejar cadenas de Caracteres. En realidad podríamos haber hecho las declaraciones sin especificar su tipo pero, por el momento sin más explicaciones, les diré que esto genera código menos optimizado e incluso puede dar problemas a la hora de encontrar posibles errores. Por ejemplo podríamos haber hecho: Public Const Pi = 3.14159265358979 Public Precio Public Nombre Y la cosa funcionaría… En realidad el declarar así una variable ó constante, equivale a haber hecho esta otra declaración Public Const Pi As Variant = 3.14159265358979 Public Precio As Variant Public Nombre As Variant -¿Y qué es eso de Variant?El Variant es un tipo de dato al que se le puede asignar casi cualquier cosa. Esto lo hace a costa de consumir más recursos que otros tipos de variables y por consiguiente una velocidad más lenta en la ejecución. Ya tenemos las bases para el siguiente paso.

162

SENATI-Computación e Informática

ic ón con VBA

Actividad 4: Uso de Procedimientos y Funciones Procedimientos Sub Procedimientos Function o Funciones

Procedimientos Sub Un procedimiento Sub llamado también Procedimiento a secas es un conjunto de código que realiza determinadas tareas. Suele estar contenido entre las expresiones Sub y EndSub El término Sub puede ir precedido de otras expresiones, por ejemplo para delimitar el ámbito en el que puede ser llamado el procedimiento. Al procedimiento se le pueden pasar una serie de datos para que los use internamente. A estos datos se les llama Parámetros ó Argumentos. Si en la ventana de código escribimos la palabra Sub, le ponemos encima el cursor y presionamos la tecla [F1], Access nos mostrará la ayuda aplicable a Sub. En la ayuda podemos entre otras cosas podemos ver: [Private | Public | Friend] [Static] Sub nombre [(lista_argumentos)] [instrucciones] [Exit Sub] [instrucciones] End Sub Por cierto, estas líneas indican cómo es la estructura de un procedimiento Sub. Los elementos que están entre Paréntesis Cuadrados [ ] son opcionales. Cuando hay varias palabras separadas por Barras Verticales |, nos está indicando que podemos seleccionar una de ellas. Según esto serían igual de válidas las sentencias: Sub Procedimiento_01() End Sub Public Sub Procedimiento_02() End Sub Private Sub Procedimiento_03() End Sub Public Sub Procedimiento_04(Argumento1 As Double) End Sub Por supuesto que cada opción genera un código que se comportará de forma diferente. Es igualmente válido el que ya hemos usado en la primera entrega. Private Sub cmdSaludo_Click() Me.lblSaludo.Caption = "¡¡¡Hola Mundo!!!" Me.Caption = "¡Aquí estoy!" End Sub SENATI-Computación e Informática

163

Microsoft Office

Con una salvedad, este último es un tipo especial de Sub. Y es especial porque captura el evento que se produce cuando de presiona el botón cmdSaludo de su formulario. Recordemos que un Evento es un mensaje que envía Windows y en este caso es capturado por Access. En el módulo que hemos creado vamos a escribir el siguiente código: Public Sub Circunferencia() Dim Radio As Single Radio = 2.5 Debug.Print "Circunferencia = " & 2 * Pi * Radio Debug.Print "Círculo = " & Pi * Radio ^ 2 & " m2" End Sub Ahora, en la ventana Inmediato escribe Circunferencia y presiona [Enter] Efectivamente, en esa ventana se escribirá: Circunferencia = 15,7079632679489 Círculo = 19,6349540849362 m2 Vamos a analizar un poco esto. Hemos creado un procedimiento llamado Circunferencia. Este procedimiento es de los de tipo Sub. La primera línea es el encabezado. Al hacerlo Public, dentro de un módulo estándar, permitimos que se pueda llamar desde cualquier parte de la base de datos. Es un procedimiento público. En la segunda línea declaramos la variable Radio, de tipo Single. El tipo Single es un tipo de coma flotante, que ocupa 4 bytes, o lo que es lo mismo, 32 bits. En la siguiente línea asignamos a la variable el valor 2.5 Recuerdo que dentro del código, las comas separadores de decimales se ponen como puntos. La siguiente línea utiliza el método Printdel objeto Debug. La forma de llamarlo es poniendo primero el objeto, a continuación un punto y después el método. Fijese que mientras lo escribes se les muestra una “Ayuda en línea” que les permite seleccionar lo que quieres escribir.

164

SENATI-Computación e Informática

ic ón con VBA

El objeto Debuges la propia ventana Inmediato. El método Printimprime lo que se ponga a continuación. Lo primero que imprime es una cadena, en nuestro caso "Circunferencia = " A continuación vemos el operador & seguido de la expresión 2 * Pi * Radio Este operador hace de “Pegamento” entre dos expresiones. En este caso enlaza la cadena primera con el resultado de la operación 2 * Pi * Radio Dando como resultado Circunferencia = 15,7079632679489 Lo mismo es aplicable a la siguiente línea. Con End Sub se acaba el código del procedimiento. - Esto está bien, pero sólo puede imprimir los datos de la circunferencia de radio 2,5, lo que no es gran cosa. - Bueno, sí. Es un inicio. - Ahora, modifico el procedimiento Sub, de la siguiente forma: Public Sub Circunferencia(Radio As Single) Debug.Print "Circunferencia = " & 2 * Pi * Radio Debug.Print "Círculo = " & Pi * Radio ^ 2 & " m2" End Sub Fijense que la declaración de la variable Radio ya no se hace en el cuerpo del procedimiento, sino en su cabecera. Además ha desaparecido la línea en la que asignábamos el valor del radio. ¿Y cómo se utiliza esto? No tiene ninguna complicación especial Vamos a modificar la forma como llamamos desde la ventana Inmediato al procedimiento, y escribimos Circunferencia 2.5 El resultado es el mismo que en el caso anterior. Pero si escribimos Circunferencia 7.8 Nos dará los valores correspondientes a una circunferencia de radio 7.8. En este caso hemos utilizado un procedimiento con un único argumento. El argumento es precisamente 7.8. Si tuviera, por ejemplo 2, se escribirían separados por una coma NombreProcedimiento Argumento1, Argumento2 Hay otro tipo de procedimientos de los que hemos hablado. Se llaman procedimientos Function, las famosas Funciones.

Funciones En la entrega anterior hemos visto una introducción a los procedimientos Sub.

SENATI-Computación e Informática

165

Microsoft Office

Otro de los tipos de procedimientos son los procedimientos Function, que al igual que los procedimientos Sub están delimitados por Functiony End Function. La principal diferencia entre un procedimiento Sub y un procedimiento Function es que este último devuelve un valor. Entre los dos delimitadores se escribe el código que va a realizar las tareas que deseemos, y al final devolverá algún valor. Son las llamadas Funciones. Veamos la forma como lo explica la ayuda de Access. Si vamos a la ventana Inmediato, escribimos Function, ponemos el cursor en lo escrito y presionamos [F1], entre otras cosas nos aparece la sintaxis de su declaración: [Public | Private | Friend] [Static] Function nombre [(lista_argumentos)] [As tipo] [instrucciones] [nombre = expresión] [Exit Function] [instrucciones] [nombre = expresión] End Function Vemos que para declarar una función empezaríamos, por ejemplo poniendo la palabra Public (si quisiéramos que la función sea accesible desde cualquier parte de Access) a continuación la palabra Function, después abriríamos un paréntesis y pondríamos los parámetros que necesitáramos, cerraríamos el paréntesis y finalmente pondríamos el tipo de datos que devolvería la función. Supongamos que quisiéramos escribir una función en la que pasándole el ángulo y el radio, nos devolviera la longitud de un arco de circunferencia. La cabecera de esta función sería: Public Function Arco(Angulo As Single, Radio As Single) As Single Hay un truco para que una línea con mucho texto se pueda dividir en varias líneas, sin que deje de ser una única línea. Se coloca al final de la línea que se quiere dividir un espacio en blanco y la raya de subrayado. Con ello la línea anterior se podría poner así: Public Function Arco(Angulo As Single, Radio As Single) As Single Aquí declaramos la función como pública, para que se pueda utilizar desde cualquier parte de la aplicación, siempre que se escriba en un módulo normal. A continuación escribimos la palabra Function, seguida de su nombre, en este caso Arco. Abrimos paréntesis y escribimos los dos parámetros que necesitamos, Angulo y Radio, declarándolos del tipo Single (tipo numérico de coma flotante de 4 Bytes). Cerramos el paréntesis y declaramos la función Arco también del tipo Single. Si escribes la cabecera de la función en un módulo normal, veras que VBA, al igual que pasaba con los procedimientos Sub, les añade automáticamente el final correspondiente, es decir End Function

166

SENATI-Computación e Informática

ic ón con VBA

Con esto la función quedaría así: Public Function Arco(Angulo As Single, Radio As Single ) As Single End Function Por ahora no es gran cosa, ya que no hace nada. Permiteme que escriba el código completo de esta función y la explique paso a paso. Como en la entrega anterior, voy a declarar la constante Pi como pública en la cabecera del módulo, para que pueda ser utilizada por la aplicación. Si ya la tuviera declarada en otro módulo este paso no sería necesario. El código sería el siguiente: Option Compare Database Option Explicit Public Const Pi as Double = 3.14159265358979 Public Function Arco(Angulo As Single, Radio As Single) As Single Arco = Pi * Radio * Angulo / 180 End Function Aparte de la fórmula matemática de Trigonometría elemental, vemos lo siguiente. Asignamos al nombre de la función Arco el resultado de la fórmula de la izquierda. Esto hará que la función Arco devuelva el resultado de la operación matemática. Vamos a centrarnos en lo que aparece entre Function y el final de la línea. Vamos a probar la función. Para ello escribiremos en la ventana Inmediato. ? Arco(360,1) Supongo que ya no será sorpresa para ustedes la ayuda en línea que va prestando el propio VBA de Access:

Tras completar la expresión, y darle a [Enter] nos escribirá: 6,283185 que es la longitud de un arco de radio 1 y ángulo 360º, lo que equivale a la circunferencia completa. Vamos a hacer un experimento: ¿Qué pasa si cambiamos la declaración de tipo de esta función?

SENATI-Computación e Informática

167

Microsoft Office

Vamos a cambiar el Single de la declaración de la cabecera, por Double. Double es un número de coma flotante de más precisión que single (8 Bytes de Double frente a 4 de single). La cabecera quedará así: Public Function Arco(Angulo As Single, Radio As Single) As Double Para ello escribiremos? Arco(360,1) en la ventana Inmediato, y presionamos [Enter]. Efectivamente la precisión ha aumentado, ya que el valor escrito ha sido: 6,28318530717958 Por ello si cambiamos ahora la cabecera: Public Function Arco(Angulo As Double, Radio As Double) As Double Se supone que los cálculos serán más precisos. Efectivamente así es, pero en una aplicación crítica deberíamos jugar que el tipo de precisión adecuada, para hacer la aplicación lo más ligera posible. Si probamos a hacer el cambio vemos que en nuestra función, con los datos anteriores apenas cambia el resultado. Pero ¿qué pasaría si estuviéramos programando la órbita de una nave con destino a Marte? En este caso la precisión sería un elemento clave.

Actividad 5: Funciones en Formularios Vamos a hacer una pequeña y elemental calculadora que nos permita sumar dos cifras. Cerramos los módulos y creamos, ó abrimos un formulario en modo diseño. Este formulario no lo enlazamos con ninguna tabla ni consulta. Ahora vamos a deshabilitar el asistente para controles. En la barra de controles, pulsamos en la “Varita mágica” para deshabilitarla. Deberá quedar sin resaltar, como se indica en el gráfico Ponemos dos cuadros de texto en el formulario. Por defecto, Access les pondrá un nombre semejante a Texto2 y Texto2. Vamos a cambiar esos nombres. Abrimos la hoja de propiedades, les recuerdo Ficha Diseño > Cinta Herramientas, ó pulsando las teclas [Alt] + [Enter]. En la ficha [Otras] ponemos el cursor en la primera propiedad, que “casualmente” es la propiedad Nombre. Ahí es donde, pulsando en los correspondientes cuadros de texto, vamos a cambiar su nombre. Les ponemos, al primer Cuadro de texto el nombre de txtSumando_1, y al segundo txtSumando_2. Ahora le vamos a poner un botón, cambiando su nombre , algo así como Comando5, por cmdSumar, y su título ó texto del botón, por Sumar. Al programar es muy importante que los objetos, variables, constantes, procedimientos, etc. tengan nombres con cierto sentido.

168

SENATI-Computación e Informática

ic ón con VBA

Si no fuese así, si más adelante tuvieras que revisar tu código, o si lo tuviese que hacer otra persona, tendríais que invertir una gran cantidad de tiempo en averiguar qué es y qué hace cada cosa en el código. Más adelante hablaremos sobre normalización de código, pero fíjate que el nombre de los cuadros de texto está precedido por las letras txt y el del botón por cmd. Así si en un pedazo de código veo una palabra que empieza por cmd sé que se refiere a un botón, y si empieza por txt sé que se refiere a un cuadro de texto. Otro ejemplo: Los nombres de las etiquetas los suelo empezar por lbl. Estas son convenciones de normalización “más ó menos” estándares. A partir de este momento las iré aplicando al código y veréis como su uso se irá convirtiendo en algo cada vez más natural. A lo que íbamos. Tenemos en un formulario los siguientes elementos: txtSumando_1 txtSumando_2 cmdSumar

Cuadro de texto Cuadro de texto Botón de comando

Probablemente al poner los cuadros de texto se nos hayan colocado dos etiquetas. D e momento no vamos a cambiar su nombre, pero les vamos a poner como Título Operando 1 y Operando 2 Ahora vamos a poner una etiqueta nueva, con título Resultado, y de nombre lblResultado. Más de uno se habrá dado cuenta que lbl viene de Label (etiqueta en inglés), txt de Text y cmd de Command. A esta etiqueta le vamos a poner un texto un poco más grande y como color de texto el rojo. ¿Pero qué quieres que hagamos con todo esto? Tan simple como tener un formulario en el que escribir dos números en la s correspondientes casillas, y que al pulsar un botón nos muestre su suma. ¿Y cómo sabe Access cuando se ha pulsado el botón y qué es lo que tiene que hacer? Para eso utilizaremos el Evento Clic del botón cmdSumar. Ya he comentado que un Evento es un “mensaje” que manda Windows, cuando pasa algo, que puede ser captado por Access y a su vez reenviado a Windows con un código que se tiene que ejecutar. Seleccionamos el botón, y en la [Hoja de Propiedades] pulsamos en la pestaña Eventos. Seleccionamos el cuadro correspondiente a “Al hacer clic” y pulsamos en el pequeño botón con tres puntos que nos aparece.( Debe estar desactivado el botón Asistente para Controles )

SENATI-Computación e Informática

169

Microsoft Office

A continuación veremos una pequeña pantalla que nos permite seleccionar entre   

Generador de expresiones Generador de macros Generador de código

Lógicamente seleccionamos Generador de código, y pulsamos [Aceptar] ó doble clic en [Generador de código]. Inmediatamente se nos abre el editor de código con el siguiente código Option Compare Database Option Explicit Private Sub cmdSumar_Click() End Sub El cursor estará seguramente posicionado entre las dos líneas. ¿Qué es esto? Es el procedimiento que captura el evento Clic del botón cmdSumar. Ahora lo que quiero es que tras poner un valor en cada uno de los cuadros de texto, si pulsamos el botón, nos muestre el resultado de la suma en la etiqueta lblResultado. El contenido de un cuadro de texto lo maneja su propiedad Value, que se puede leer y escribir. El contenido de una etiqueta (su título) lo maneja su propiedad Caption, y también es de lectura y Escritura. Escribimos lo siguiente Private Sub cmdSumar_Click() Me.lblResultado.Caption = Me.txtSumando_1.Value + Me.txtSumando_2.Value End Sub Que traducido “al cristiano” quiere decir: Cuando se presione sobre el botón cmdSumar (evento clic) pon como título de la etiqueta lblResultado (propiedad caption) el resultado de sumar el contenido (propiedad Value) del cuadro de texto txtSumando_1y del cuadro de texto txtSumando_2. El control Cuadro de texto es un TextBox y la Etiqueta un control Label. Bueno, grabamos el código y el formulario y lo abrimos.

170

SENATI-Computación e Informática

ic ón con VBA

Nos quedará algo así como

Si ahora introducimos, por ejemplo el valor 2 en el primer cuadro de texto, el valor 3 en el segundo y presionamos el botón Sumar, nos llevamos una pequeña sorpresa:

¿Qué ha pasado?. ¿Por qué en vez de un 5 nos da 23? al fin y al cabo 2 más 3 son 5 Estas son algunas de las cosillas que desaniman a los principiantes… No es que Access nos esté tomando el pelo. Recordemos que estamos hablando del contenido de un [Cuadro de Texto], y que como tal todo lo que contiene lo interpreta como texto. Aunque hemos introducido un 2 para el control es como si introdujéramos el texto “2”. Vamos a probar a introducir en el primer Cuadro de texto Pepe, y en el segundo Gotera. Al presionar el botón nos da

Un par de párrafos más adelante veremos cómo solucionar este problema. Primero un par de matizaciones sobre el código. Tomemos el texto Me.lblResultado.Caption Vamos a desmenuzarlo. Me representa el formulario al que pertenece el código. Me.lblResultado lblResultado representa a la etiqueta lblResultadodel formulario actual. Me.lblResultado.Caption Captionrepresenta a la propiedad Título de la etiqueta. SENATI-Computación e Informática

171

Microsoft Office

La utilización de Me no es necesaria; pero facilita a la ayuda en línea el que te presente las diferentes opciones a escribir. Tomemos ahora el texto Me.txtSumando_1.Value Ya hemos visto que me representa al formulario. Me.txtSumando_1 txtSumando_1 representa al cuadro de texto txtSumando_1 Me.txtSumando_1.Value Value representa el contenido del cuadro de texto ó la propiedad Value. La propiedad Value de los cuadros de texto tiene dos peculiaridades: La primera es que es la propiedad por defecto del control. Eso quiere decir, que si se escribe en el código el nombre del cuadro de texto, sin especificar nada más, hará implícitamente referencia a la propiedad Value. Por ello son equivalente es igual de válidos los siguientes códigos: Me.lblResultado.Caption = Me.txtSumando_1.Value + Me.txtSumando_2.Value lblResultado.Caption = txtSumando_1 + Me.txtSumando_2 He quitado las referencias al formulario Me y la propiedad Value. Cambiamos el código anterior por éste: Private Sub cmdSumar_Click() lblResultado.Caption = txtSumando_1 + Me.txtSumando_2 End Sub Ahora vamos a ejecutar el formulario, pero antes de presionar el botón de sumar dejamos uno de los cuadros de texto sin nada escrito en él. ¡Un nuevo problema!...

172

SENATI-Computación e Informática

ic ón con VBA

Esto hace referencia a la segunda peculiaridad de los cuadros de texto: Si el cuadro de texto contiene algún valor, nos devolverá un texto con ese valor, pero si no contiene nada nos devolverá el valor Nulo (Null). Para poder funcionar así, la propiedad Value del cuadro de texto tiene que ser del tipo Variant. Sí ese tipo de dato capaz de tragarlo todo. Un valor nulo no es cero, ni una cadena de texto vacía. Un valor nulo en realidad se corresponde al resultado del código ASCII 0. Como uno de los cuadros de texto tenía el valor Nulo (Null), VBA no puede sumarlo al contenido del otro cuadro de texto. Podríamos decir que un nulo no se puede sumar con nada.

¿Pero qué tenemos que hacer para poder sumar los datos? Primero deberíamos convertir los valores contenidos en los cuadros de texto a valores numéricos. Para efectuar esa conversión existe una función de VBA llamada Val(Valor) Si escribimos en la ventana inmediato la palabra Val, ponemos en ella el cursor y presionamos [F1] nos aparece la ayuda de la función Val. Con la siguiente información: Devuelve los números contenidos en una cadena como un valor numérico del tipo adecuado. Sintaxis Val(cadena) El argumento obligatorio cadena es cualquier expresión de cadena válida. Vamos a hacer pruebas en la ventana Inmediato. Escribimos las sucesivas expresiones y presionamos [Enter] Expresión ? "2" + "3" ?2+3 ? Val("2") + Val("3") ? Val("12.234") ? Val(" 23 Caballos") ? Val(“Pepe”)

Resultado impreso 23 5 5 12,234 23 0

Declaracion de Variables Una variable es un elemento del código que apunta a una dirección de memoria en donde se almacena un dato. Haciendo referencia a la variable se puede devolver el dato al que apunta e incluso modificarlo.

SENATI-Computación e Informática

173

Microsoft Office

Las constantes son similares a las variables, sólo que su contenido se le asigna en el momento en el que se declaran, y después no es posible cambiarlo. Hay tres temas que debemos considerar en una variable El nombre de la variable El tipo de dato al que apunta El ámbito en el que es visible.

Construcción del nombre de una variable (o constante). Nombre El nombre de una variable está compuesto por caracteres ASCII. Para su construcción hay que ceñirse a las siguientes reglas: • No se pueden usar caracteres que tienen un uso especial en Access, como son el Punto “.”, los paréntesis “(“ “)”, la barra vertical “|”, o los caracteres que se pueden utilizar como operadores; entre ellos + - / * < >. • Una variable debe empezar por una letra ó por el signo de subrayado Estos nombres serían correctos, lo que no quiere decir que sean aconsejables. A123456

_Pepe

R2P2

• El nombre de una variable no puede tener espacios en blanco. Por ejemplo no sería válido el nombre Apellidos Nombre. En cambio sí sería válido Apellidos_Nombre ó ApellidosNombre. • Una variable puede terminar con un carácter de declaración de tipo %&!#@$ Estos caracteres sólo se pueden usar al final del nombre de la variable. Nota: Estos caracteres también se pueden usar para declarar el tipo de dato que devuelve una función. Por ejemplo esta cabecera de función sería válida: Public Function Nombre$() Que sería equivalente a: Public Function Nombre() As String • No se puede usar como nombre de variable una palabra reservada de VBA. Por ejemplo no se pueden usar String, integer, For, If como nombres de variable. • El nombre de una variable puede tener hasta 255 caracteres - aunque yo de ti no lo intentaría forastero -. • No se pueden declarar dos variables con el mismo nombre dentro del mismo procedimiento o en la cabecera de un mismo módulo. 174

SENATI-Computación e Informática

ic ón con VBA

Tipos de datos Además de las Variables hay otra serie de elementos que manejan datos, como son la s Constantes, Procedimientos Sub y procedimientos Function que son capaces de manejar datos de distintos tipos, e incluso las funciones que devuelven datos. Pero ¿qué tipos de datos podemos manejar? Y ¿qué características tienen? Hay varios tipos de datos. Entre ellos podemos definir    

Numéricos Booleanos Fecha / Hora De texto (cadenas) Variant De objeto Registros de datos definidos por el usuario

Datos numéricos Existen dos familias de datos numéricos: Datos numéricos de número entero Datos numéricos de coma flotante.

Números Enero Como datos enteros tenemos los siguientes tipos:

Por Sufijo entendemos un carácter de definición de tipo que se puede añadir a la Variable ó Constante, para definir el tipo al que pertenece. Por ejemplo: Dim Valor Long Declara implícitamente la variable ValorLong como Long. Esta declaración equivale a la siguiente Dim ValorLong as Long Si hubiéramos hecho Dim ValorLong a secas, la variable ValorLong se hubiera declarado como Variant.

Prefijo Por prefijo entenderemos el conjunto de letras que “es aconsejable” poner delante del nombre de una variable, para indicarle a la persona que escribe, ó lee, el código, el tipo de dato que contiene una variable. La ventaja de utilizar estos métodos se aprecia inmediatamente. Así, sólo con leer que una tiene como nombre lngDiasTrabajados podríamos deducir que es una variable de tipo Long que probablemente sirva para manejar los días trabajados. SENATI-Computación e Informática

175

Microsoft Office

Si en una línea de código aparece el nombre cmdSalir, podríamos deducir que es un botón de comando que probablemente sirva para salir de un formulario u otro sitio. Igualmente lblNombre es una etiqueta y txtApellido1 es un cuadro de texto. Ya iremos viendo estas cositas poco a poco. Repito que los prefijos, int, lng, txt, lbl, cmd, etc. no modelan el tipo de contenido de la variable, sino que sirven como información adicional para la persona que escribe ó lee el código.

Números de Coma Flotante Los números de coma flotante son unos tipos de datos que admiten valores no enteros. Por ejemplo estos son valores de coma flotante: 3.14159265358979 2.71828182845905

2856.1#

4.00!

Como datos de coma flotante tenemos los siguientes tipos:

Por Sufijo entendemos un carácter de definición de tipo que se puede añadir a la Variable Para el manejo de valores monetarios se suele utilizar el tipo Currency. Este tipo no da errores de redondeo y permite manejar hasta magnitudes de 15 dígitos exactos en su parte entera. En posteriores capítulos haremos mención a algunos errores de redondeo que pueden llegar a dar los tipos de coma flotante.

Tipo Decimal El tipo Decimal es un tipo muy especial. Permite trabajar con hasta 29 dígitos enteros exactos ó hasta con 28 dígitos exactos en su parte decimal. Es un tipo con muy poco uso en Access, ya que normalmente no se necesita ese tipo de precisión, y además resulta engorroso su uso.

Tipo Date El tipo Date es un tipo de dato adecuado para manejar datos de tipo Fecha / Hora. El valor 0 representa las 0 horas del 30 de diciembre de 1899. La parte entera representa el número de días que han pasado desde esa fecha. La parte decimal representa el tanto por 1 de día adicional que ha pasado. 176

SENATI-Computación e Informática

ic ón con VBA

Por ejemplo, ahora son las 18 horas 15 minutos 30 segundos del 20 de enero del 2005 Internamente este dato lo guarda como 38372,7607638889. ¿Qué quiere decir? Han pasado 38372 días desde las 0 horas del 30 de diciembre de 1899 Pero además ha transcurrido 0,7607638889 días, lo que equivale a 18 horas 15 minutos 30 segundos frente a 24 horas Si pasamos la hora actual a segundos nos da 3600 * 18 + 15 * 30 + 30 65730 segundos Un día completo tiene 3600 seg/hora * 24 horas = 86400 Si dividimos 65730 entre 86400 nos da aproximadamente 0,7607638889 Para ver cómo utilizar un tipo date, vamos a crear un procedimiento Sub en un módulo estándar que nos permita ver lo explicado en las líneas anteriores. En realidad un tipo Date es un tipo Double y como él utiliza 8 Bytes. Por cierto, el prefijo para indicar que es tipo Datees dat. Su código será el siguiente Public Sub PruebaTipoDate() Dim datFechaActual As Date Dim datSemanaProxima As Date Dim datAyer As Date Dim datMañana As Date datFechaActual = #1/20/2005 6:15:30 PM# datSemanaProxima = datFechaActual + 7 datAyer = datFechaActual - 1 datMañana = datFechaActual + 1 Debug.Print "Tipo Doble", CDbl(datFechaActual) Debug.Print "Ahora", datFechaActual Debug.Print "Próx. Semana", datSemanaProxima Debug.Print "Ayer", datAyer Debug.Print "Mañana", datMañana End Sub

Si desde la ventana inmediato escribimos PruebaTipoDate y presionamos [Enter] nos mostrará: Tipo Doble 38372,7607638889 Ahora 20/01/2005 18:15:30 Próx. Semana 27/01/2005 18:15:30 Ayer 19/01/2005 18:15:30 Mañana 21/01/2005 18:15:30

SENATI-Computación e Informática

177

Microsoft Office

Tipo Boolean (boleano) El tipo Boolean (boleano) es un tipo de dato adecuado para manejar datos de tipo Sí / No, True / False. Sorprendentemente el tipo Boolean ocupa 2 Bytes, supongo que por compatibilidad con otros tipos. Es como si estuviera definido como de tipo Integer, y como veremos, algo de esto hay. El prefijo para un boleano es bln. A una variable Boleana se le puede asignar un valor de varias formas

Por ejemplo esto sería correcto: Public Sub PruebaTipoBoleano() Dim blnDatoBoleano As Boolean blnDatoBoleano = True Debug.Print "Valor True " & blnDatoBoleano blnDatoBoleano = False Debug.Print "Valor False " & blnDatoBoleano blnDatoBoleano = -1 Debug.Print "Valor -1 " & blnDatoBoleano blnDatoBoleano = 0 Debug.Print "Valor 0 " & blnDatoBoleano blnDatoBoleano = 4 Debug.Print "Valor 4 " & blnDatoBoleano Debug.Print "Valor entero de Verdadero " & CInt(blnDatoBoleano) End Sub

Este código nos mostrará en la ventana Inmediato Valor True Verdadero Valor False Falso Valor -1 Verdadero Valor 0 Falso Valor 4 Verdadero Valor entero de Verdadero -1 Nota: La instrucción CInt(blnDatoBoleano) convierte a un valor Entero el contenido de la variable blnDatoBoleano. Para asignar a una variable booleana el valor falso le podemos asignar False ó 0. Para asignarle cierto lo podemos hacer pasándole directamente True ó cualquier valor numérico diferente de Cero, incluso aunque sea de coma flotante. Si convertimos el contenido de una variable Boleana que contenga True a un valor numérico, nos devolverá -1.

178

SENATI-Computación e Informática

ic ón con VBA

Tipo String (cadena) El tipo String está especializado en almacenar datos de tipo Cadena (Texto). El carácter para definir el tipo es el signo de Dólar $. Hay dos tipos String • String de longitud variable • String de longitud fija Para asignar una cadena de longitud variable, la declaración se hace de forma similar al resto de los tipos Dim strNombre As String Dim strNombre$ Public strNombre As String Private strNombre As String Para declarar una variable como de longitud fija se utiliza el asterisco (*) y a continuación el número de caracteres que va a contener Dim strCuentaCorriente As String * 20 Para declarar cadenas de longitud fija no se puede usar el carácter $. Por ejemplo, esto daría error Dim strCuentaCorriente$ * 20 Una cadena de longitud variable podría en teoría almacenar hasta 2^31 caracteres, es decir unos 2000 millones de caracteres. Lógicamente siempre que el PC tuviera suficiente memoria. Una cadena de longitud fija puede contener hasta 65536 caracteres (64 KBytes). Si por ejemplo hacemos: Dim strCliente As String * 40 strCliente = "Pepe Gotera" strCliente contendrá la cadena Pepe Gotera seguida de 29 espacios en blanco (para completar los 40 que debe contener la variable.

Tipo Variant El tipo Variant es un tipo de dato que puede contener prácticamente cualquier tipo de datos. El prefijo que se suele utilizar para identificar una variable Variantes var. Hay excepciones, por ejemplo no puede contener una cadena de longitud fija. Cuando declaramos una variable o escribimos la cabecera de una función, sin especificar el tipo que va a contener ó devolver, implícitamente la s estamos declarando como de tipo Variant. Si declaramos una constante, sin especificar su tipo, el tipo que tome lo hará en función del dato que le asignemos en la propia declaración.

SENATI-Computación e Informática

179

Microsoft Office

Por ejemplo si declaramos en la cabecera de un módulo estándar Global Const conEmpresa = "Manufacturas ACME s.l." Hace que la constante conEmpresa se configure como del tipo String. He usado aquí el modificador de alcance Global. Este modificador del Alcance de la variable sería, en este caso, equivalente a haber utilizado Public. Las declaraciones de constante siguientes serían equivalentes a la anterior Public Const conEmpresa = "ACME s.l." Public Const conEmpresa As String = "ACME s.l." Public Const conEmpresa$ = "ACME s.l." La forma de declarar una variable explícitamente como Variant es la siguiente. ModificadorDeAlcanceNombre As Variant Dim varMiVariable As Variant Ya hemos dicho que si se declara una variable sin especificar su tipo, implícitamente la declara como Variant. La última declaración sería equivalente a Dim varMiVariable

Declaraciones múltiples en una línea. VBA permite declarar múltiples variables en una misma línea de código. La forma correcta de hacerlo sigue esta estructura: Alcance Variable1 As Tipo, Variable2 As Tipo, Variable3 As Tipo Por ejemplo, esto sería correcto Dim lngUnidades As Long, strNombre As String Otros lenguajes de programación permiten hacer una declaración del siguiente estilo: Dim strNombre, strApellido1, strApellido2 As String Tras esto las tres variables serían del tipo String. En cambio en VBA, si hubiéramos declarado así las variables, strNombrey strApellido1serían del tipo Variant, y strApellido2 sería del tipo String.

Valores por defecto Cuando declaramos una variable, ésta se inicializa con un valor por defecto. Dependiendo del tipo de dato de la variable el valor que tome por defecto será diferente. Las variables de tipo numérico toman el valor 0 Las de tipo fecha también el valor 0, que se corresponde a las 0 horas del 30 de diciembre de 1899.

180

SENATI-Computación e Informática

ic ón con VBA

Las de tipo boleano el valor False, ó 0. Las de tipo cadena la cadena vacía "". Las de tipo variant, el valor Empty.

Ámbito ó alcance de una declaración Hemos visto varias instrucciones que afectan al alcance ó visibilidad de una Variable, Constante o Procedimiento. Estas instrucciones son: Dim Public Global Private Hay otras formas de declarar Variables como son las instrucciones: Static Friend

Dim Si la instrucción Dim se utiliza para declarar una variable en la cabecera de un módulo, esa variable sólo será “visible” por los procedimientos que estén dentro de ese módulo. De forma semejante, si la instrucción Dim se utiliza dentro de un procedimiento, esa variable sólo podrá ser vista por el código del interior del procedimiento.

Private La instrucción Private se suele utilizar para definir de forma explícita que una constante, variable o procedimiento sólo van a ser visibles desde dentro de un módulo. Se suele utilizar para la declaración de variables y constantes en las cabeceras de módulos, así como para definir el alcance de los procedimientos de ese módulo. Dentro de un procedimiento se usa Dimen vez de Private.

Public La instrucción Public se suele utilizar para definir que una constante, variable o procedimiento van a ser visibles desde cualquier parte de la aplicación. Se suele utilizar para la declaración de variables y constantes en las cabeceras de módulos, así como para definir el alcance de los procedimientos de ese módulo. Por ello no es factible declarar una variable como Publicdentro de un procedimiento. Sí se puede en cambio, declararla en la cabecera de cualquier módulo estándar o de clase. Nota: Una aclaración respecto a los elementos declarados en un módulo de clase. Si declaramos una variable, constante ó procedimiento como Public en un módulo de clase, por ejemplo en un formulario, para poder usarlo hay que hacerlo a través de una Instancia de ese módulo de clase.

SENATI-Computación e Informática

181

Microsoft Office

A las variables y constantes públicas de un módulo de clase, así como a los procedimientos Property, se les llama Propiedades de la clase. Al resto de los procedimientos de la clase que sean públicos se les llama Métodos de la clase. Cuando veamos las clases, veremos que una instancia es un ejemplar de una clase. La clase como tal es el propio código, pero una instancia es un objeto creado mediante la clase. Se que es un poco críptico, pero más adelante lo entenderéis sin problema. Por ejemplo una instancia de un formulario es el propio formulario, o si tenemos la clase Persona y creamos una persona llamada Pepe, la instancia de la clase es Pepe. Si hemos declarado una variable, por ejemplo Nombre como Public para poder usarla deberemos hacer referencia a ella mediante la instancia de la clase, que es Pepe Pepe.Nombre Lo mismo ocurriría si hemos declarado como public la función Edad, es decir el método Edad. Pepe.Edad Así mismo, si en el formulario Pedidos declaramos datFechaUltimoPedido comoPublic, para acceder a ese dato lo tenemos que hacer a través del propio formulario. Pedidos.datFechaUltimoPedido Desde el código del formulario, no es necesario hacer referencia al mismo formulario, aunque sí puede hacerse utilizando la palabra clave Me, que es una variable declarada implícitamente y que representa a la instancia de la clase u objeto creado mediante la clase. Desde el propio formulario sería lo mismo Me.datFechaUltimoPedido que datFechaUltimoPedido No tenéis por qué entender todo esto todavía. Lo iré comentando poco a poco y lo desarrollaré en la entrega en la que hablemos de las Clases.

Global La instrucción Global se utiliza de forma semejante a Public, dentro de módulos estándar.

La instrucción With Si observamos el código del procedimiento PruebaRegistro de la página anterior, vemos que, tanto para asignar valores a los atributos de la variable Vendedor, he utilizado la instrucción With, acompañada de su complemento End With.

182

SENATI-Computación e Informática

ic ón con VBA

Esto nos permite evitarnos tener que repetir de reiterativamente el nombre Vendedor en cada línea de asignación ó lectura. Entre With Vendedor y End With al escribir el punto se supone que estamos utilizando atributos del registro Vendedor. Este tipo de sintaxis ayudados por la instrucción With, se puede utilizar no sólo con Variables Registro, sino también con todo tipo de objetos, como veremos posteriormente.

Estructuras de Control. Las estructuras de control son segmentos de código que nos permiten tomar decisiones en base a unos datos dados, o repetir procesos (bucles) mientras sucedan determinada s condiciones en los parámetros controlados por el código. Ya hemos comentado algunas de ellas en las entregas anteriores. Estas estructuras vienen determinadas por una serie de instrucciones, entre las qu e destacaremos: Estructuras de Decisión    

If . . . . Then If . . . . Then . . . . Else IIF Select . . . . Case

Estructuras de Bucle   

For . . . . Next For Each . In . . . . Next Do . . . . Loop

Nota: Antes de seguir adelante, adoptaré el sistema habitual para las expresiones de la sintaxis de una sentencia. Las partes de código situadas entre corchetes []son opcionales. De las partes contenidas entre Llaves {}hay que seleccionar una de ellas.

Estructuras de Decisión. La Instrucción If Permite ejecutar un grupo de instrucciones de código, en función de que el valor de una expresión sea Cierta o Falsa True/ False. La forma más básica de esta instrucción es: If condición Then [instrucciones]

SENATI-Computación e Informática

183

Microsoft Office

Condición debe ser una expresión, numérica, relacional ó lógica que devuelva True ó False Por ejemplo: If Divisor0 then Cociente = Dividendo/Divisor Si el valor de la variable Divisor es diferente a Cero, entonces haz que la variable Cociente tome el valor de la división entre la variable Dividendoy la variable Divisor. Esta forma de la instrucción If sólo se puede poner en una única línea de código, aunqu e admite múltiples instrucciones separadas por los dos puntos ":". If Divisor0 then C = Dividendo/Divisor : Debug.print C Segunda forma If condición Then [instrucciones] End If El ejemplo anterior podría haberse escrito: If Divisor0 then Cociente = Dividendo/Divisor End If Esta forma permite la ejecución de varias líneas de sentencias entre Then y End If. Esta sintaxis es preferible a la primera, ya que genera un código más claro de interpretar. La instrucción If permite ejecutar otro grupo de sentencias, si el resultado de la evaluación de la expresión fuera falso. If condición Then [instrucciones para el caso de que condición sea True] Else [instrucciones para el caso de que condición sea False] End If Ejemplo: Public Sub PruebaIf01() Dim Dividendo As Single Dim Divisor As Single Dim Cociente As Single Dividendo = 4 Divisor = 2 If Divisor 0 Then Cociente = Dividendo / Divisor Debug.Print Cociente Else MsgBox "No puedo dividir entre cero", vbCritical, "División por cero"

184

vbOKOnly

+

SENATI-Computación e Informática

ic ón con VBA

End If End Sub En este caso, como Divisor 0 devuelve False, se ejecutará la línea que aparece entre Else y End If, con lo que mostrará el mensaje de error. Estas sentencias admiten aún un modo adicional, y es usar Else If. Es una nueva evaluación tras una anterior que da como resultado falso. Supongamos que queremos hacer una función que devolviera el Nombre de provincia en función de un código. Acepto por adelantado que habría otras formas más adecuadas, pero es sólo un ejemplo. Ejemplo: Public Function Provincia(ByVal Codigo As Long) As String If Codigo < 1 Or Codigo > 52 Then Provincia = "Código de provincia incorrecto" ElseIf Codigo = 1 Then Provincia = "Álava" ElseIf Codigo = 8 Then Provincia = "Barcelona" ElseIf Codigo = 20 Then Provincia = "Guipuzcoa" ElseIf Codigo = 28 Then Provincia = "Madrid" ElseIf Codigo = 31 Then Provincia = "Navarra" ElseIf Codigo = 31 Then Provincia = "Navarra" ElseIf Codigo = 26 Then Provincia = "La Rioja" ElseIf Codigo = 48 Then Provincia = "Vizcaya" ElseIf Codigo = 50 Then Provincia = "Zaragoza" Else Provincia = "Otra Provincia" End If End Function Con este código Provincia(31)devolvería “Navarra” Las instrucciones Ifse pueden anidar, (poner unas dentro de otras). If comparación1 Then [Instrucciones de 1] If comparación2 Then [Instrucciones de 2] End If End If

La Función IIf Es una función similar a la estructura If . . Then . . Else Devuelve uno de entre dos valores, en función del resultado de una expresión: Su sintaxis es IIf(expresión, ValorTrue, ValorFalse) SENATI-Computación e Informática

185

Microsoft Office

Se evalúa la expresión y si es True, devuelve ValorTrue; caso contrario devuelve ValorFalse. Por ejemplo Public Function EsPar(ByVal Numero As Long) As Boolean EsPar = IIf(Numero Mod 2 = 0, True, False) End Function La función IIF, en este caso, sería igual a hacer Public Function EsPar2(ByVal Numero As Long) As Boolean If Numero Mod 2 = 0 Then EsPar2 = True Else EsPar2 = False End If End Function Nota: El operador Mod devuelve el resto de dividir Numeroentre 2.

La Instrucción Select Case Con If . . Then es posible crear estructuras de decisión complejas como hemos visto en la función Provinciade un ejemplo anterior. El que sea posible ni impide que resulte un tanto “Farragoso”. Para este tipo de casos existe en VBA la instrucción Select Case que simplifica esas operaciones, creando un código más potente, ordenado y claro. Si vemos la ayuda de Acces podemos leer que la sintaxis de SelectCasees: Select Case expresión_prueba [Case lista_expresion-1 [instrucciones-1]] ... [Case lista_expresion-2 [instrucciones-2]] ... -------[Case lista_expresion-n [instrucciones-n]] ... [Case Else [instrucciones_else]] End Select expresión_prueba debe ser una variable, o expresión que devuelva una cadena ó un número. lista_expresion son una serie de valores, del tipo que da expresión_prueba. Si expresión_prueba coincide con alguno de los valores de lista_expresion, se ejecutarán las instrucciones que existen a continuación, hasta llegar al siguiente Case, ó End Select. A partir de este punto se saldría de la estructura y se seguiría con el siguiente código. Si no se cumpliera la condición de ninguno de los Case lista_expresion, y hubiera un Case Else, se ejecutarían las líneas de código contenido a partir de Case Else. Ejemplo de las expresiones que pueden estar contenidas en las lista_expresion:

186

SENATI-Computación e Informática

ic ón con VBA

Case 3 Case 3, 5, 6, 7 Case 1 To 8, 0, -5 Case Is < 8 Case Is > 3 Case Is >= lngDias Case "A", "B", "C", "Z" Voy a poner un ejemplo para clarificarlo: Supongamos que queremos crear una función que nos cualifique el tipo de los pagarés de los clientes en función del tiempo que queda hasta su cobro. La función recibirá como parámetro la fecha del vencimiento. Si la fecha es anterior al día de hoy, deberá devolver la cadena “Pago vencido”. Si es del día de hoy “Vence hoy”, si quedan entre 1 y 3 días “Cobro inmediato”, si menos de 31 días “Corto Plazo” si son menos de 181 días “Medio Plazo” y si es mayor “Largo Plazo” La función podría ser ésta: Public Function TipoVencimiento( _ Vencimiento As Date) As String Dim lngDias As Long ' Date devuelve la fecha de hoy lngDias = Vencimiento - Date Select Case lngDias Case Is < 0 ' Si lngDias es menor que cero TipoVencimiento = "Pago vencido" Case 0 ' Si es cero TipoVencimiento = "Vence hoy" Case 1, 2, 3 ' De 1 a 3 TipoVencimiento = "Cobro inmediato" Case 4 To 30 ' De 4 a 30 TipoVencimiento = "Corto Plazo" Case 31 To 180 ' De 31 a 180 TipoVencimiento = "Medio Plazo" Case Else ' Si ninguno de los anteriores TipoVencimiento = "Largo Plazo" End Select End Function Aquí mostramos algunas de las posibilidades de elaboración de la lista_expresion. Case Is < 0 Is se puede utilizar junto con operadores de comparación. Estos operadores son = < >=

Igual a Menor que Menor ó igual que Mayor que Mayor ó igual que Diferente que

Se pueden poner diferentes expresiones separadas por comas

SENATI-Computación e Informática

187

Microsoft Office

Esta línea sería válida: Case Is < 0, 4, 8, is > 10 Se ejecutarían las lineas correspondientes al Case para cualquier valor que sea menor que 0, mayor que 10 ó si su valor es 4 u 8. Este sistema también puede aplicarse a cadenas de texto. Supongamos que queremos clasificar a los alumnos de un colegio en 4 grupos, en función de su apellido. Aquéllos cuyo apellido empiece por una letra comprendida entre la A y la D pertenecerán al grupo 1, entre la E y la L al grupo 2, entre la M y la P al 3 y entre la Q y la Z al 4. La función sería Public Function Grupo(ByVal Apellido As String) As Long Apellido = Trim(UCase(Apellido)) Select Case Apellido Case Is < "E" : Grupo = 1 Case "E" To "LZZZZ" : Grupo = 2 Case "M" To "PZZZZ" : Grupo = 3 Case "Q" To "TZZZZ" : Grupo = 3 Case Is >= "U" : Grupo = 4 End Select End Function

Estructuras de Bucle. Las Instrucciones For - - - Next Supongamos que tenemos que construir una función que nos devuelva el Factorial de un número. Recuerdo que Factorial de n es igual a 1*2*3* . . . *(n-1)*n, para n entero y mayor que cero. Adicionalmente se define que Factorial de Cero tiene el valor 1. Cómo se haría esta función: Public Function Factorial(ByVal n As Integer) As Long Dim i As Integer Factorial = 1 For i = 1 To n Factorial = Factorial * i Next i End Function Efectivamente funciona, ya que Factorial devuelve resultados correctos para valores de nentre 0y 12. Pero esta función no sería operativa para un uso profesional ya que tiene una serie de fallos. Por ejemplo, si hacemos Factorial(-4) devuelve el valor 1, lo que no es correcto,

188

SENATI-Computación e Informática

ic ón con VBA

ya que no existe el factorial de un número negativo. Igualmente podemos pasarle valores superiores a 12, que nos darían un error de desbordamiento, ya que 13! Supera el alcance de los números Long. Probar haciendo en la ventana inmediato ? Factorial(13). Observar este código: Public Function Factorial(ByVal n As Integer) As Long Dim i As Integer Select Case n Case Is < 0 MsgBox "No existe el factorial de un número negativo", vbCritical + vbOKOnly, " Error en la función Factorial" Exit Function Case 0 Factorial = 1 Exit Function Case 1 To 12 Factorial = 1 For i = 1 To n Factorial = Factorial * i Next i Case Else MsgBox "Número demasiado grande", vbCritical + vbOKOnly, "Error en la función Factorial" Exit Function End Select End Function He puesto una serie de sentencias Case para filtrar los valores que darían resultados incorrectos, o producirían error, avisándole al usuario de que ha tratado de utilizar la función Factorialcon unos valores fuera de su rango válido. Así el mayor valor lo obtenemos de 12! = 479.001.600 El tener como rango válido del 0 a 12 ¿no resulta un poco corto ?. Dependiendo para qué, sí. Supongamos que estemos programando un sistema estadístico que hace uso de cálculos combinatorios grandes. Probablemente esta función no serviría, aunque se podrían usar trucos para saltarse sus limitaciones. El problema surge porque el resultado supera el rango de los números Long, pero en el Capítulo 5º, y también en el Apéndice 01, vemos que existen dos tipos de números que superan esa limitación. Uno es el de los Currencyy el otro el de los Decimal. Vamos a cambiar el código para trabajar con Currency: Public Function FactorialCurrency(ByVal n As Integer) As Currency Dim i As Integer Select Case n Case Is < 0 MsgBox "No existe el Factorial de un número negativo", vbCritical + vbOKOnly, " Error en la función FactorialCurrency"

SENATI-Computación e Informática

189

Microsoft Office

Exit Function Case 0 FactorialCurrency = 1 Exit Function Case 1 To 17 FactorialCurrency = 1 For i = 1 To n FactorialCurrency = FactorialCurrency * i Next i Case Else MsgBox "Número demasiado grande", vbCritical + vbOKOnly, "Error en la función FactorialCurrency" Exit Function End Select End Function Ahora nos permite trabajar desde 0 a 17. 17! = 355.687.428.096.000 Esta ya es una cifra importante. Pero supongamos que nos contrata el Fondo Monetario Internacional, para hacer unos estudios estadísticos a nivel mundial. Es posible la capacidad de calcular hasta el factorial de 17, se nos quede corta. Para ello echamos mano de un tipo numérico de rango aún más alto. El tipo Decimal. El tipo Decimal tiene la particularidad de que VBA no puede trabajar directamente con él. La variable que lo vaya a contener debe ser primero declarada como Variant, y luego convertida a Decimal. Public Function FactorialDecimal(ByVal n As Integer) As Variant Dim i As Integer Dim Resultado As Variant ' Aquí hacemos la conversión de Variant a Decimal Resultado = CDec(Resultado) Select Case n Case Is < 0 MsgBox "No existe el factorial de un número negativo", vbCritical + vbOKOnly, " Error en la función Resultado" Exit Function Case 0 FactorialDecimal = 1 Exit Function Case 1 To 27 Resultado = 1 For i = 1 To n Resultado = Resultado * CDec(i) Next i Case Else

190

SENATI-Computación e Informática

ic ón con VBA

MsgBox "Número demasiado grande", vbCritical + vbOKOnly, "Error en la función FactorialDecimal" Exit Function End Select FactorialDecimal = Resultado End Function La función FactorialDecimal, trabaja en el rango de 0!a 27!. 27! = 10888869450418352160768000000 Es decir con 29 cifras exactas. Una puntualización respecto al tipo Decimal. El tipo decimal no es el que permite un rango mayor de valores; es el que permite un rango de valores con más cifras exactas. Los bucles del tipo For - - Nextse pueden anidar (Poner unos dentro de otros). Por ejemplo, supongamos que tenemos que generar un procedimiento que nos imprima las tablas de multiplicar que van del 1 al 10. Public Sub TablasDeMultiplicar() Dim n As Integer, m As Integer For n = 1 To 10 Debug.Print "-----------" For m = 1 To 10 Debug.Print n & " x " & m & " = " & n * m Next m Next n End Sub Para cada valor que tomara n, ejecutaría el bucle completo de For m --- Next m. imprimiendo en la ventana Inmediato los resultados de las tablas 9 x 8 = 72 9 x 9 = 81 9 x 10 = 90 ----------10 x 1 = 10 10 x 2 = 20 10 x 3 = 30 10 x 4 = 40 10 x 5 = 50 10 x 6 = 60 10 x 7 = 70 10 x 8 = 80 10 x 9 = 90 10 x 10 = 100 En los ejemplos anteriores hemos utilizado la estructura más típica de VBA para la creación de Bucles.

SENATI-Computación e Informática

191

Microsoft Office

La instrucción For m --- Next m., repite el código contenido entre la línea que contiene la palabra Fory la línea que contiene a su correspondiente Next. Su sintaxis es For contador = principio To fin [Step incremento] [instrucciones] [Exit For] [instrucciones] Next [contador] Contador es una variable numérica que irá tomando sucesivos valores, con incrementos ó decrementos iguales al valor de incremento. Si no se pusiera el valor incremento, contadoriría creciendo en una unidad cada vuelta. El código se irá repitiendo hasta que contador tome el valor de fin, ó se encuentre con la instrucción Exit For. En el siguiente ejemplo, el bucle For Next se ejecutará hasta que lngSuma sea mayor que 100, momento en que saldrá del bucle o se imprima el número de impares especificado en el parámetro Numero. Si el parámetro Numero fuese cero ó menor, se sale directamente del procedimiento sin ejecutarse el bucle. Public Sub ImprimeImpares(Numero As Long) Dim i As Long Dim lngImpar As Long Dim lngSuma As Long If Numero < 1 Then Exit Sub End If For i = 1 To Numero lngImpar = 2 * i - 1 lngSuma = lngSuma + lngImpar If lngSuma > 100 Then Exit For End If Debug.Print i & " - " & lngImpar & " - " & lngSuma Next i End Sub La llamada al procedimiento se haría, por ejemplo para 4 impares ImprimeImpares 4 Después de la palabra Next, no es imprescindible escribir el nombre de la variable que sirve como contador. Por ejemplo este bucle es válido a pesar de no escribir Next i: For i = 1 To 10 Debug.Print i Next

Las Instrucciones Do - - - Loop Do [{While | Until} condición] [instrucciones] [Exit Do]

192

SENATI-Computación e Informática

ic ón con VBA

[instrucciones] Loop O con esta otra sintaxis: Do [instrucciones] [Exit Do] [instrucciones] Loop [{While | Until} condición] Veamos la primera forma: Después de Do nos permite seleccionar Whilecondición, ó Untilcondición. Si ponemos While, después de Do el bucle se ejecutaría mientras la condición sea cierta. Si escribimos Until, el bucle se ejecutaría hasta que la condición sea cierta. Si la condición no fuese cierta no se ejecutaría el bucle tanto si hemos puesto While, como si hubiéramos escrito Untildespués de Do. Por lo tanto podría ocurrir, tanto con Whilecomo con Untilen función del resultado de Condición, que no se llegara a ejecutar el bucle ni una sola vez. Si deseáramos que siempre se ejecutara al menos una vez el bucle, deberíamos usar While ó Until después de Loop. Supongamos que queremos escribir una función a la que pasándole un número entero positivo, nos indique si ese número es ó no primo. Supongo que no hará falta recordaros que un número primo es aquél que sólo es divisible por 1 ó por sí mismo. Este es el método que voy a emplear. – Sí. Ya se que no es el óptimo: Dividir el número entre valores enteros, empezando por el dos, y a continuación por los sucesivos valores impares, hasta que encontremos un valor que divida de forma exacta al número a probar (su resto = 0). Si el resto de la división da cero indica que el número es divisible por ese valor, por lo que el número no será primo y deberemos salir del bucle. Seguir con el ciclo mientras el valor por el que se va a dividir el número no sea mayor que la raíz cuadrada del número. Necesitáis saber que en VBA, el operador que devuelve el resto de una división es Mod. Si dividimos 17entre 3da de resto 2 17 Mod 3 2 Ya sé que este código es manifiestamente mejorable, pero funciona y me viene bien para el ejemplo con Do Loop. Funciona si el número que probamos es menor ó igual que 2.147.483.647 Este es el máximo número Long positivo. Este número también es primo. Public Function EsPrimo(ByVal Numero As Long) As Boolean Dim lngValor As Long Dim dblRaiz As Double Select Case Numero Case Is < 1 SENATI-Computación e Informática

193

Microsoft Office

MsgBox (Numero & " está fuera de rango") EsPrimo = False Exit Function Case 1, 2 EsPrimo = True Exit Function Case Else dblRaiz = Numero ^ 0.5 lngValor = 2 ' Comprobamos si Numero es divisible por lngValor If Numero Mod lngValor = 0 Then EsPrimo = False Exit Function End If lngValor = 3 EsPrimo = True Do While lngValor = 0 Then Para que esta expresión sea cierta, lo tienen que ser a l vez las dos expresiones unidas por And; es decir lngNumero tiene que ser menor que 2147483647 y simultáneamente tiene que ser mayor ó igual que 0.

198

SENATI-Computación e Informática

ic ón con VBA

Cuando varias expresiones estén unidas por el Operador Lógico And, para que la expresión total sea cierta, es necesario que lo sean cada una de esas expresiones. Con que haya una falsa, la expresión total será falsa. Por el contrario, cuando varias expresiones estén unidas por el Operador Lógico Or, para que la expresión total sea cierta, es suficiente con que lo sea una cualquiera de las expresiones que la forman. A continuación nos encontramos con otro Operador, es el operador negación Not. Do While Not blnPrimo Not hace que la expresión lógica que le sigue cambie su valor. Así si blnPrimo contiene el valor True Not blnPrimo devolverá el valor False. La expresió equivale a: Mientras blnPrimo no sea cierto Que es equivalente a Mientras blnPrimo sea falso. Con ello se ejecutará el código contenido entre la línea de Doy la línea del Loop. Cuando lngNumero sea primo, la función EsPrimo asignará True a blnPrimo, con lo que se saldrá del bucle, pondrá la cadena de texto del número txtNumero en el cuadro de texto y ejecutará el procedimiento cmdPrimo_Click, como si se hubiera presionado en el botón [cmdPrimo]. Si el valor de lngNumero no hubiera cumplido con el rango de valores, pone un 1 en el cuadro de texto txtNumero, y ejecuta el procedimiento cmdPrimo_Click. En el procedimiento que maneja la pulsación de la tecla [cmdPrimoAnterior] aunque tiene una estructura semejante, se introducen unos cambios que considero interesante remarcar. Private Sub cmdPrimoAnterior_Click() ' Ignorar el error On Error Resume Next Dim strNumero As String Dim lngNumero As Long strNumero = Trim(Nz(txtNumero, "")) If IsNumeric(strNumero) Then lngNumero = Val(strNumero) If lngNumero < 2147483648# And lngNumero > 1 Then lngNumero = lngNumero - 1 Do Until EsPrimo(lngNumero) lngNumero = lngNumero - 1 Loop txtNumero = CStr(lngNumero) cmdPrimo_Click Else txtNumero = "2147483647" cmdPrimo_Click

SENATI-Computación e Informática

199

Microsoft Office

End If Else txtNumero = 2147483647" cmdPrimo_Click End If End Sub En primer lugar utilizamos una estructura del tipo Do Until, en vez de Do While. Además, como condición no utiliza una variable como en el caso anterior, sino que lo compara directamente con el valor devuelto por la función EsPrimo, que devuelve True ó Falsesegún sea el caso: Do Until EsPrimo(lngNumero) Con esto nos evitamos utilizar una variable y una sentencia adicional. Además el código resulta algo más claro.. En este caso, si la variable no supera los filtros, pone el valor "2147483647" en el cuadro de texto.

La gestión de los errores en procedimientos A la hora de utilizar el código de un módulo, hay dos tiempos •

Tiempo de Diseño.



Tiempo de Ejecución.

El tiempo de diseño transcurre mientras estamos modificando el contenido del código de un módulo, sea del tipo que sea, o cuando estamos cambiando las propiedades de controles, formularios o informes, en la llamada Vista Diseño, ya sea directamente ó mediante ejecución de código. Esto a más de uno le sorprenderá: Access permite crear mediante código, formularios por ejemplo utilizando el método CreateForm, que devuelve una referencia a un nuevo formulario, también permite añadirle controles mediante el método CreateControl , e incluso asociarle un módulo, escribiendo dinámicamente todo su contenido. Para esto último tendríamos que crear una referencia al objeto Module del formulario, y para insertarle el código utilizar su método InsertText. De forma semejante existe el método CreateReport para la creación dinámica de informes. Si queremos usarlos posteriormente deberemos guardarlos, por ejemplo con el método Savedel objeto DoCmd.

200

SENATI-Computación e Informática

ic ón con VBA

El tiempo de ejecución transcurre cuando hemos creado una instancia de un objeto, formulario, informe, clase o hemos llamado a un procedimiento de un módulo estándar. En el lenguaje “normal” podríamos decir que estamos en tiempo de ejecución cuando estamos “ejecutando” los objetos o el código de Access.

Errores en Tiempo de Diseño En Tiempo de Diseño podemos cometer una serie de errores, a la hora de escribir el código. Muchos de estos errores serán detectados inmediatamente por el editor de Access. Cuando escribimos una línea de código, Access realiza un análisis del texto que estamos escribiendo. En este proceso se realiza fundamentalmente su análisis sintáctico. También comprueba si hay sentencias incompletas, por ejemplo If sin Then. Si encuentra una expresión errónea lanza un mensaje de Error de compilación e incluso aporta una cierta información que nos puede orientar sobre el origen del error.

La línea de código incorrecta queda marcada en color rojo. Cuando ejecutamos el código, la primera vez que lo hace, no sólo realiza un análisis sintáctico, además va comprobando que todas las constantes y variables, ya sean de tipos estándar, referencias de objetos ó tipos definidos por el usuario, estén perfectamente declaradas, y los tipos de objeto existan y sean correctos.

Si se detecta algún error se interrumpe la ejecución del código y se lanza un aviso, marcando la zona del código donde el error se ha producido. Esta depuración del código se va realizando conforme se efectúan llamadas a los diferentes procedimientos.

SENATI-Computación e Informática

201

Microsoft Office

Podría ocurrir que tuviéramos un procedimiento que sólo se usara en determinadas condiciones y que contuviera por ejemplo una variable mal declarada. Si al ejecutar el código no se llega a utilizar ese procedimiento, no se detectaría el error que contiene. Para evitar “sorpresas” posteriores, es aconsejable realizar una pre-compilación del código. Para realizarla podemos utilizar la opción de menú [Compilar NombreDelFicheroAccess] de la opción de menú [Depuración]. A esta opción de menú se puede llegar también mediante el botón [Compilar]

.

Esta pre-compilación revisa todo el código, e incluso posibles procedimientos que no serían utilizados durante la ejecución del programa. Esto nos da más garantía sobre la calidad del código y nos protege frente a ciertos tipos de error que de otra forma no podríamos detectar.

Errores en Tiempo de Ejecución Hay una serie de errores que se pueden producir durante la ejecución del código, que no son de sintaxis ni originados por código incompleto o declaraciones inadecuadas. Son, por ejemplo los errores provenientes de valores no previstos por el código pasados ya sea por el propio usuario extraídos de tablas, ficheros u otras fuentes de origen. Son los típicos errores de Tiempo de Ejecución. Supongamos que tenemos que dividir entre sí dos cantidades; si el denominador vale cero, nos dará un error de división entre cero. Podría ocurrir que no hayamos previsto que un cuadro de texto contuviera el valor Null. Esto nos podría generar error al intentar asignar este valor a una cadena de texto. También podría ocurrir que en una expresión por la que queremos asignar el resultado de una operación a una variable, ese resultado superara el rango admisible por el tipo de la variable, con lo que tendríamos un error de Desbordamiento. Un programa profesional debe adelantarse a todas estas posibilidades. Por ejemplo, si tenemos que dividir dos números, se debería comprobar que el denominador no contuviese el valor Cero. Si tuviéramos que obtener, un elemento de una matriz, ó colección, podríamos evitar un error de subíndice fuera de intervalo. Hay muchas circunstancias en las que se pueden producir errores en tiempo de ejecución. VBA nos provee de una herramienta para poder controlarlos una vez que se han producido. Supongamos que tenemos el siguiente procedimiento. Public Sub ErrorDivisionPorCero() Dim n As Byte n=0 Debug.Print 4 / n End Sub - Sí, ya se que es un código sin mucho sentido; lo pongo sólo como ejemplo didáctico. 202

SENATI-Computación e Informática

ic ón con VBA

Si se ejecutara este procedimiento, ya sea llamado desde la ventana Inmediato o desde cualquier punto de la aplicación se producirá el preceptivo error:

Inmediatamente se interrumpirá la aplicación.

Operadores A la hora de construir instrucciones en VBA, que contengan operaciones, no sólo manejamos constantes, variable y expresiones, sino que utilizamos unos elementos llamados Operadores, que aplicados a uno ó varios operandos, generan el resultado de la operación.

Tipos de Operadores Aritméticos

Se usan para efectuar cálculos matemáticos

De Comparación

Permiten efectuar comparaciones De Concatenación Combinan cadenas de caracteres Lógicos Realizan operaciones lógicas

Operadores aritméticos VBA maneja la mayor parte de los operadores aritméticos habituales en los lenguajes de programación. Estos operadores son Suma

+

Resta

-

Producto

*

División

/

Elevar a potencia

^

División entera

\

Módulo ó Resto

MOD

En general, el tipo devuelto por el resultado de una operación, es el del tipo del más preciso de los operadores, salvo que el resultado supere su rango; en ese caso devolverá el siguiente tipo de mayor precisión. Esta regla tiene abundantes excepciones.

SENATI-Computación e Informática

203

Microsoft Office

Para más información consulte la ayuda de Access en la que se relata toda la casuística pormenorizada para cada uno de los operadores. Si el resultado de una operación fuese un dato de coma flotante y se asignara a un tipo entero, se efectuaría un redondeo. Si se trata de asignar un resultado fuera del rango de valores de la variable que va a recibir el resultado de la operación, se generará un error de “Desbordamiento“ y se interrumpirá la ejecución del código, salvo que el error fuera capturado y tratado.

Operador Suma El operador suma (+), sirve para asignar el resultado de la suma de dos números, ó en el caso de cadenas, dar como resultado una cadena compuesta por las dos anteriores. La forma de usarlo es resultado = expresión1+expresión2 Si expresión1 ó expresión2 tuvieran el valor Null, el resultado sería también el valor Null. expresión1 y expresión2 son los operandos, pudiendo ser cualquier valor numérico ó expresiones que los generen. Al contrario de otros lenguajes, VBA permite utilizar como operadores, tipos numéricos distintos. Por ejemplo podemos sumar un tipo Byte con un tipo Long, ó con un tipo Date. Igualmente la variable resultado no tiene por qué ser del mismo tipo que los operandos. Una de las limitaciones es que el resultado de la operación no debe sobrepasar la capacidad del tipo correspondiente a la variable que va a recibir el resultado de la misma. Esto es aplicable al resto de los operadores. Por ejemplo Public Sub SumaConError() Dim bytResultado As Byte bytResultado = 10 + 23 Debug.Print bytResultado bytResultado = 150 + 150 Debug.Print bytResultado End Sub Nos imprimirá el resultado 33 y a continuación nos generará el error nº 6 “Desbordamiento“, ya que un tipo Byte sólo admite valores que van de 0 a 255. Nos daría ese mismo tipo de error si tratáramos de hacer bytResultado = 15 + (-16) Ya que a un Byteno se le pueden asignar valores negativos Lo mismo ocurriría en el siguiente código Dim intResultado As Integer intResultado = 30000 + 30000 ya que un tipo Integermaneja valores entre -32.768y 32.767.

204

SENATI-Computación e Informática

ic ón con VBA

Como hemos indicado en un punto anterior, si a una variable que maneja números enteros le asignamos el resultado de una suma de números de coma flotante, efectuará un redondeo del resultado al número entero más próximo. Public Sub PruebaSumaComaFlotante() Dim intResultado As Integer intResultado = 3.1416 + 2.5468 Debug.Print intResultado intResultado = -3.1416 + (-2.5468) Debug.Print intResultado End Sub Nos mostrará como resultado los valores 6 y -6. Cuando se utilizan como operandos dos valores de tipos distintos, VBA cambia el menos preciso al tipo del más preciso. Por ejemplo si vamos a sumar un Integer con un Long, VBA realiza un “moldeado de tipo” con el Integer, convirtiéndolo a Long antes de realizar la operación. Si uno de los operadores fuera del tipo Date, el resultado también lo será. Si desde la ventana Inmediato hacemos ? #3/14/5# + 1 nos mostrará 15/03/2005 (El comando ?es equivalente a Print) En este caso vemos que al sumar 1 a la fecha devuelve la fecha del día siguiente. Como ya hemos comentado el operador Suma permite sumar o concatenar cadenas. Esta facilidad puede en algún momento crearnos más problemas que ventajas sobre todo cuando manejamos cadenas que contienen posibles valores numéricos. Public Sub PruebaSumaCadenas() Dim strResultado As String strResultado = 3 + 4 Debug.Print strResultado strResultado = 3 + "4" Debug.Print strResultado strResultado = "3" + "4" Debug.Print strResultado End Sub Este código nos devolverá 7 7 34 Curiosamente 3 + "4"devuelve 7. Además si tratamos de hacer 101 + " dálmatas" Nos dará el “bonito error” nº 13; “No coinciden los tipos”. Por ello recomendamos usar el operador & como operador para sumar, ó unir cadenas, en vez del operador Suma +.

SENATI-Computación e Informática

205

Microsoft Office

101 & " dálmatas" 3 & "4" "34"

"101 dálmatas"

Hay otro sumando permitido por VBA que no deja de ser sorprendente. Es el valor Empty (vacío) que si lo usamos con un número, ó consigo mismo, se asimila al Cero. Y con una cadena a la cadena vacía "". Empty + "A" Empty + 3.1416 Empty + Empty

"A" 3.1416 0

Esta “promiscuidad” en el manejo y la asignación entre tipos diferentes de datos que permite Visual Basic para Aplicaciones, es algo que personalmente no me termina de convencer, pero como decía el castizo, - “es lo que hay…”. VBA no permite los operadores del tipo Pre ó Post Incremental como serían: Y = ++X

ó

Y = X++

Operador Resta El operador resta (-), sirve para asignar el resultado de la sustracción entre dos números. Tiene dos formas sintácticas resultado = expresión1 - expresión2 En la primera, la variable resultado recibe el valor resultante de restar expresión2 a expresión1. En la segunda se cambia el signo al valor numérico de expresión. Si expresión1 ó expresión2 tuvieran el valor Null, resultado recibirá también el valor Null. Empty lo considera como valor Cero. Como en el caso de la suma, si uno de los operadores fuera del tipo Date, el resultado también lo será. Si desde la ventana Inmediato hacemos: Print #3/14/5# - 100 nos mostrará 04/12/2004 Para obtener información sobre los distintos tipos devueltos, en función del de los tipos de los operadores, consulte la ayuda de VBA.

Operador Producto El operador producto (*), sirve para asignar el resultado del producto de dos números. La forma de usarlo es resultado = expresión1*expresión2 resultado es una variable de tipo numérico y tanto expresión1 como expresión2 pueden ser cualquier expresión que de como resultado un valor numérico.

206

SENATI-Computación e Informática

ic ón con VBA

El tipo numérico que se suministra a resultado dependerá de los tipos de expresión1 y expresión2. Si uno de los operandos es del tipo Single y el otro del tipo Long, resultado recibirá un tipo Double. Para más información consultar la ayuda de VBA. Si alguno de los operadores es Null, resultadotomará también el valor Null. Si alguno de los operandos es Empty, resultado será Cero. Ya que considerará que ese operando contiene el valor Cero.

Operador División El operador división (/),asigna el resultado de la división de dos números. La forma de usarlo es resultado = expresión1/expresión2 resultado es una variable de tipo numérico y tanto expresión1como expresión2 pueden ser cualquier expresión que de como resultado un valor numérico. Si expresión2 fuera el valor Cero, daría el error 11 de “División por cero”. El tipo numérico que recibe resultado normalmente será del tipo Double. Esta regla tiene varias excepciones Si los operandos son del tipo Byte, Integeró Single, resultadorecibirá un Single, a menos que supere el rango de Single en cuyo caso será del tipo Double. Si uno de los operandos fuera del tipo Decimal, resultado también lo será. Es aplicable lo dicho en los anteriores operadores matemáticos respecto a Null y Empty. Para más información consultar la ayuda de VBA.

Operador Elevar a potencia El operador para elevar a potencia (^),asigna el resultado de elevar la base a la potencia del exponente. La forma de usarlo es resultado = expresión1^exponente resultado es una variable de tipo numérico y tanto expresión1 como exponente pueden ser cualquier expresión que de como resultado un valor numérico. Si exponente fuera el valor Cero, daría como resultado 1 , incluso en el caso de que la base tuviera el valor Cero. ¿¿¿???. 45^0

1

0^0

1

(algo no muy correcto matemáticamente hablando)

Exponente puede ser un valor fraccionario. Así, si quisiéramos obtener la raíz cúbica de 343 podríamos hacer 343 ^ (1/3)

SENATI-Computación e Informática

7

207

Microsoft Office

Actuaríamos igual para la raíz cuadrada 16 ^ 0.5

4

Adicionalmente, para obtener la raíz cuadrada en VBA existe la función Sqr. Sqr(16)

4

Cuando estudiábamos matemáticas nos contaron que en el campo de los números reales, la raíz cuadrada de un número negativo no tiene solución. Por ello se crearon los números imaginarios. Si tratamos de hacer Sqr(-16)nos generará un error 5 en tiempo de ejecución, indicando que el valor -16 no es correcto para la función Sqr. Puede sorprender que esto no ocurra si calculamos la raíz cuadrada elevando a 0.5 -16 ^ 0.5

-4

En cambio si hacemos (-16)^0.5, sí dará el error. La razón la veremos más adelante en la prioridad de operadores. El cálculo del operador potencia se realiza antes que el del operador de cambio de signo. Tanto en la base como en el exponente admite números de coma flotante. Por ejemplo podríamos obtener algo tan exótico como el resultado de elevar el número e, base de los logaritmos Neperianos, al valor de Pi 2.7182818 ^ 3.1415926

23,1406906315563

Operador División entera El operador división entera (\), realiza dos procesos. Si no tuvieran valores enteros, efectuaría el redondeo del numerador y del denominador. A continuación realiza la división de los valores resultantes, devolviendo la parte entera del resultado. La forma de usarlo es resultado = expresión1\expresión2 resultado recibirá un valor entero Byte, Integer ó Long. 8\3 -8 \ 3 12 \ 3

2 -2 4

Es aplicable lo comentado con anterioridad respecto a Emptyy Null. Null \ 3 Empty \ 3

Null 0

Si al redondear expresión2 diera como resultado el valor Cero, se produciría el error 11 de “División por cero”. 4 \ 0.1 208

Error 11 SENATI-Computación e Informática

ic ón con VBA

4 \ 0.5 4 \ 0.51 4 \ Empty 4\0

Error 11 4 Error 11 Error 11

Hay que tener un especial cuidado con este operador, y no olvidar que previamente realiza un redondeo a cero decimales, tanto del numerador como del denominador. Este redondeo utiliza el método de redondeo vigente en el sistema bancario americano, que es ligeramente diferente al europeo. De este tema hablaremos cuando veamos la función Round.

Operador Módulo o Resto El operador módulo (Mod), Asigna el resto de una división entre dos números. Como en el caso de la división entera, previamente se realiza un redondeo a cero decimales, tanto del dividendo como del divisor, si éstos tuvieran un valor que no fuera entero. Su sintaxis es resultado = expresión1 Mod expresión2 Para el operador Mod, es aplicable lo comentado en el operador División entera sobre el redondeo del numerador y denominador. 8 Mod 7 8.6 Mod 7 8.9 Mod 7.51 Null Mod 7.51

1 2 1 Null

Operadores de Comparación En algunos procesos podemos necesitar establecer si un valor es menor, igual ó mayor que otro, por ejemplo para la toma de una decisión mediante una sentencia If . . . Then. En VBA tenemos 6 tipos de operadores para esta tarea. Estos operadores son < >= =

< > <

Menor que Menor ó igual que Mayor que Mayor ó igual que Igual a Distinto de

Vemos que para los operadores menor o igual, mayor o igual y distinto de hay dos posibles formas de escritura. La forma más usual de uso es la escrita en primer lugar. Su sintaxis es resultado = expresión1 Operador expresión2 resultado es una variable de tipo boleano y tanto expresión1 como expresión2 pueden ser cualquier expresión que de como resultado un valor numérico o de cadena.

SENATI-Computación e Informática

209

Microsoft Office

Si expresión1 o expresión2 contuvieran el valor Null devolvería Null. Ejemplos de resultados 8 4 And 4 >= 3

True

IsNumeric("1234") And Len("1234") IsNumeric("Pepe")

=4

True

And Len("1234") = 4

False

Las operaciones de Andcon números se realizan a nivel de Bits. 7 And 13

5

¿Cómo puede ser esto? 7, en binario es igual a 0111 13 es igual a 1101 El resultado será 0101 El binario 101equivale en notación decimal al número 5 SENATI-Computación e Informática

211

Microsoft Office

And devuelve el bit 1 sólo si los dos bits correspondientes de los operandos, valen 1. Este operador es útil para poder averiguar si un determinado bit de una expresión está activado (tiene el valor 1). Por ejemplo, si queremos averiguar directamente el valor del tercer bit de un número entero M, es suficiente ver el resultado de realizar M And 4. Si el resultado es 4 el tercer bit de M contiene el valor 1, si es 0el tercer bit contendrá el valor 0. En general si queremos averiguar el bit Nº N de una expresión M comprobaremos si el resultado de M And 2^(N-1)es igual a 2^(N-1). Hay determinados dispositivos en los que la configuración viene determinada por los bits de una determinada propiedad.

Operador Or El operador Or, realiza una Disyunción lógica entre dos operandos. Su sintaxis es resultado = expresión1 Or expresión2 Resultado puede ser cualquier variable numérica ó boleana. resultado tomará el valor True, si cualquiera de las dos expresiones es True. Las combinaciones de Falsecon Falseda False. Nullcon Falseó con Nullda Null Cuadro de resultados del operador Or Expresión 1ª

Expresión 2ª

Resultado

True True

True False

True True

False

True

True

False

False

False

A nivel de bits, en operaciones con números, Or dará 1 salvo en el caso de que ambos bits valgan 0. 5 Or 13

13 0101 1101 1101

El binario 1101es en notación decimal el número 13 Con el operador And, hemos visto que podemos averiguar qué bit está activado en una expresión. El operador Ornos permite definir el valor de un determinado bit de un valor. Supongamos que tenemos un dispositivo que contiene la propiedad Config de tipo Long, que controla el funcionamiento del mismo.

212

SENATI-Computación e Informática

ic ón con VBA

Por circunstancias de la programación queremos hacer que el 4º bit, contando por la derecha, de dicha propiedad, tome el valor 1. Para ello utilizaremos el operador Orde la siguiente manera: Dispositivo.Config = Dispositivo.Config Or 2^(3) En general para activar el bit número N de un valor M, haremos M = M or 2^(N-1)

Operador Not El operador Not, realiza una Negación lógica sobre una expresión. Su sintaxis es resultado = Not expresión Resultado puede ser cualquier variable numérica ó boleana. Tomará el valor True, si expresión es Falsey a la inversa. Si expresiónfuese Null, devolverá Null. Cuadro de resultados del operador Not Expresión

Resultado True

False

True

False

A nivel de bits también se puede utilizar el operador Not. Not 13 13

-14

0000000000001101

Not 13 1111111111110010 El binario 1111111111110010 es el número -14

Prioridad de los operadores La prioridad en los operadores sigue estos órdenes para cada tipo de operador Aritméticos

De comparación

Lógicos

Exponenciación (^)

Igualdad (=)

Not

Negación (–)

Desigualdad ()

And

Multiplicación y división (*, /)

Menor que ()

Xor

Módulo aritmético (Mod)

Menor o igual que (=)

Imp

Concatenación de cadenas (&)

Like Is

Las multiplicaciones y divisiones se evalúan entre sí de izquierda a derecha, siguiendo el orden en el que están escritas. Esto mismo ocurre con la suma y la resta. Los operadores aritméticos se evalúan antes que los de comparación. SENATI-Computación e Informática

213

Microsoft Office

Todo esto lleva a al conveniencia de la utilización de paréntesis, para tener un perfecto control del orden de interpretación. En una expresión lo primero que se evalúa son las subexpresiones contenidas dentro de paréntesis, si las hubiera. En el caso del ejemplo, dblD = intA ^ 12 / intC si quisiéramos que primero se efectuara la división de 12 entre intCdeberíamos haber escrito dblD = intA ^ (12 / intC) En el caso de la expresión: 4 Or 19 And 7 Or 13 se evalúa en este orden 1. 2. 3.

19 And 7 4 Or 3 7 Or 13

3 7 15

Si quisiéramos que evaluara primero 4 or 19, 7 or 13 y luego los respectivos resultados mediante And, deberíamos haber escrito (4 Or 19) And (7 Or 13) Que nos dará como resultado 7. La utilización de paréntesis aclara el código y ayuda a evitar errores en el diseño del mismo, muchas veces con resultados inesperados, y de difícil detección.

Editando el código de las macros de Access Código frente a macros Access posee un potente juego de macros que permiten un alto grado de automatización en una serie de tareas. Si vamos a la ayuda de Access veremos que una macro se define como un conjunto de acciones creadas para automatizar algunas de las tareas comunes. Veamos en la práctica cómo se manejan. Vamos a crear un formulario y en él pondremos una etiqueta grande con un texto en rojo, por ejemplo Formulario abierto. Guardamos el formulario con el nombre PruebaMacro. Abrimos la ventana macros, haciendo clic en la ficha Crear, Cinta de opciones Otros y en el botón [Macro].

Una vez dentro podremos ver la columna Acción, y si activáramos la opción Condiciones del menú Ver nos aparecerá la columna Condición. 214

SENATI-Computación e Informática

ic ón con VBA

En la primera fila de columna Acción seleccionamos la acción [AbrirFormulario]. Inmediatamente después de hacerlo, nos aparece en la parte inferior unos cuadros en los que podemos introducir los argumentos de la macro.

Si nos ponemos en el cuadro Nombre del formulario, vemos que nos aparece una flecha hacia abajo que nos permite seleccionar un formulario. Si la base de datos era nueva nos aparecerá únicamente el formulario PruebaMacro que acabamos de guardar. Seleccionaremos ese formulario.

Vamos a la fila siguiente de la columna Acción, y seleccionamos la acción [CuadroMsj], y en los cuadros de abajo ponemos: En Mensaje: Formulario abierto, y en Tipo: Información. A continuación presionamos en el botón guardar, asignándole como nombre Autoexec. Cerramos la ventana de macros, e incluso Access. Volvemos a abrir el archivo y veremos que ahora se abre el formulario PruebaMacro inmediatamente después de cargar el archivo. y nos muestra un cuadro de mensaje tipo a los que ya hemos visto con la función MsgBox. Hemos comprobado lo siguiente: si a una macro, le ponemos como nombre Autoexec, se ejecutarán sus acciones en el momento de abrir el fichero Access. Este es un comportamiento interesante al que en algún momento podremos sacar partido. ¿Y a cuento de qué viene ahora el hablar de las macros?. ¿No es ir hacia atrás? Las macros ha sido una herramienta muy utilizada por “usuarios avanzados de Access” que no tenían conocimientos de programación y que querían dotar a sus aplicativos de cierto grado de automatismo. Lo que quizás algunos de esos usuarios no sabían es que Access permite realizar una conversión directa de las macros a código VBA. Las funciones y procedimientos de VBA tienen más flexibilidad y posibilidades que las macros. Además

SENATI-Computación e Informática

215

Microsoft Office

las macros no pueden realizar tareas como el control de errores, o el acceso a un único registro con la misma simplicidad que con VBA. Vamos al panel de Exploracion y seleccionamos la macro Autoexec Luego hacemos clic en el Boton Office, para luego indicarle la opción Guardar como, luego Guardar objeto como

Tras esto nos aparece una nueva ventana en la que se nos propone cambiar el nombre de la Macro. En el segundo cuadro seleccionamos [Módulo] y presionamos el botón [Aceptar]. Aparecera otra ventana, no cambiamos esos valores y presionamos el botón [Convertir].

Si ahora nos vamos a la ventana de Módulos veremos que aparece un nuevo módulo llamado Macro convertida - Autoexec.

Despues de hacer doble clic sobre esa macros aparecerá el código correspondiente

216

SENATI-Computación e Informática

ic ón con VBA

El proceso de conversión de macros se puede también realizar siguiendo estos pasos 1. Seleccione la macro a convertir en el panel de exploracion. 2. Seleccionamos la ficha [Herramientas de base de datos] Cinta de opciones Macro y dentro de ella el botón [Convertir Macro a Visual Basic]

3. Nos aparece el cuadro Convertir macro del punto anterior. Se pueden convertir tanto las macros generales como las macros asociadas a formularios o informes. Si abrimos el módulo generado, podremos ver que contiene el siguiente código. Option Compare Database Function Autoexec() On Error GoTo Autoexec_Err DoCmd.OpenForm "Saludo", acNormal, "", "", , acNormal Autoexec_Exit: Exit Function Autoexec_Err: MsgBox Error$ Resume Autoexec_Exit End Function Vemos que la macro ha sido cambiada por un módulo que contiene la función Autoexec. Quiero suponer que en vez de un procedimiento sub, genera una función que no devuelve explícitamente ningún valor, para que pueda ser utilizada directamente desde la pestaña eventos de la ventana de propiedades de un formulario, informe o control. Esta función tiene dos partes que se corresponden con las dos acciones de la macro. La acción AbrirFormulario se sustituye por el método OpenForm del objeto DoCmd. La acción CuadroMsj se sustituye por la función MsgBoxque ya hemos visto. Las mismas acciones que hemos puesto en la macro Autoexec, podríamos haberlas puesto en un mismo archivo de Macro, como dos macros independientes. Para ello vamos a hacer lo siguiente: Desde la ventana de exploracion, ponemos el cursor del ratón encima de la macro Autoexec y presionamos el botón derecho del ratón Nos aparecerá un menú contextual, una de cuyas opciones es Cambiar nombre. Cambiamos el nombre de la macro Autoexec, por el de MacrosInicio.

SENATI-Computación e Informática

217

Microsoft Office

A continuación pulsamos el botón de Diseño (el de la escuadra, la regla y el lápiz ) y se nos abrirá la macro en vista diseño.

Vamos a activar, si no lo estuviera, una columna a la izquierda que contendrá el nombre de la macro. Recordemos que hay que hacer visible, en el editor de macros, la columna correspondiente al nombre de macro. Para ello, desde la ficha Diseño, Cinta de Opciones [Mostrar u Ocultar] activamos la opción [Nombres de macro].

Tras esto nos aparecerá una columna vacía a la izquierda. Por pura cuestión de orden vamos a separar las dos acciones, que se convertirán en macros independientes. Para ello ponemos el cursor a la izquierda de la celda donde aparece CuadroMsj, y pulsamos dos veces en la opción de la cinta Filas [InsertarFilas]. Ahora nos ponemos a la izquierda de la primera Acción (AbrirFormulario) y escribimos como nombre para esa macro Autoexec. En la celda que está a la izquierda de la acción CuadroMsj escribimos como nombre de la macro algo tan original como Mensaje. Con esto ya tenemos dos macros diferentes escritas en el mismo archivo de macros. En el caso anterior teníamos una única macro llamada Autoexec que ejecutaba 2 acciones diferentes.

218

SENATI-Computación e Informática

ic ón con VBA

Ahora, al arrancar el fichero de access se ejecutará la macro Autoexec, que nos abrirá el formulario, pero no se ejecutará la acción de la macro Mensaje. Puedes comprobarlo cerrando el fichero access y volviéndolo a abrir. Para solventar este problema, podemos llamar a la macro Mensaje desde la macro Autoexec. Lo podemos conseguir mediante la Acción EjecutarMacro. En la columna Acción, nos ponemos debajo de la celda en la que está escrita la acción AbrirFormulario y seleccionamos la acción EjecutarMacro. A continuación seleccionamos como parámetro la macro MacrosInicio.Mensaje. Guardamos todo y vemos que ahora sí que se muestra el cuadro de mensaje para indicarnos la apertura del formulario. ¿Cómo afectaría este cambio en las macros al código que se generaría con el conversor de macros a código VBA?. La respuesta la podemos obtener de forma inmediata. Guardamos la macro, si es que no lo habíamos hecho, y desde la ventana macro, seleccionamos nuestra flamante MacrosInicio y activamos la ficha [Herramientas de base de datos] Cinta de opciones Macro y dentro de ella el botón [Convertir Macro a Visual Basic] Se nos genera un nuevo módulo, esta vez con el nombre Macro convertidaMacrosInicio. El código que contiene ese módulo es el siguiente Option Compare Database Option Explicit '-----------------------------------------------------------' MacrosInicio_Autoexec ''-----------------------------------------------------------Function MacrosInicio_Autoexec() On Error GoTo MacrosInicio_Autoexec_Err DoCmd.OpenForm "PruebaMacro", acNormal, "", "", , acNormal DoCmd.RunMacro "MacrosInicio.Mensaje", , "" MacrosInicio_Autoexec_Exit: Exit Function MacrosInicio_Autoexec_Err: MsgBox Error$ Resume MacrosInicio_Autoexec_Exit End Function '-----------------------------------------------------------' MacrosInicio_Mensaje '-----------------------------------------------------------Function MacrosInicio_Mensaje() On Error GoTo MacrosInicio_Mensaje_Err Beep MsgBox "Formulario abierto", vbOKOnly, "" MacrosInicio_Mensaje_Exit: Exit Function MacrosInicio_Mensaje_Err: MsgBox Error$ Resume MacrosInicio_Mensaje_Exit End Function

SENATI-Computación e Informática

219

Microsoft Office

Así como la primera vez nos creó un módulo con una única función, al tener ahora dos macro en un mismo fichero de macros, nos crea un módulo con dos funciones.

¿Cuándo usar Macros y cuándo código VBA? Las macros permiten automatizar, de una forma simple, tareas como Abrir un formulario, cerrar un informe o desplazarnos entre los registros de una tabla. Si acudimos a la ayuda de Access, en el apartado con título semejante vemos que nos recomienda el uso de macros fundamentalmente para realizar asignaciones globales de teclas. Incluso para la realización de determinadas acciones al arrancar la base de datos, comenta la posibilidad de utilizar la opción Inicio del menú Herramientas. Para el resto de las acciones recomienda la utilización de VBA. La mayor parte de las acciones ejecutables mediante macros, pueden ser realizadas ventajosamente usando VBA mediante los métodos del objeto DoCmd, que las implementa. Como recordatorio indicaré que si por ejemplo quisiéramos que al abrir una base de datos se realice una determinada acción podemos usar una macro llamada Autoexec. Como también hemos comentado, ésta no es la única opción, ya que podríamos hacer que aparezca un formulario concreto al arrancar la aplicación, mediante la opción [Inicio] del menú [Herramientas] y efectuar las llamadas a los procedimientos que nos interesen desde el código de ese formulario.

El objeto DoCmd El objeto DoCmd es un objeto específico de Access, creado para sustituir a las acciones de las Macros. De hecho sustituye con ventaja a casi todas ellas. Hasta Access 97, no existía ese objeto, pero sí existía el procedimiento DoCmd. Por tanto el objeto DoCmdempezó a existir con Access 97. Los argumentos de la acción serán ahora los argumentos del método de DoCmd. En la acción AbrirFormulario, poníamos como Nombre del formulario PruebaMacro, como vista Formulario y como modo de la ventana Normal. Al método OpenForm, que abre un formulario, le pasamos como nombre del formulario (FormName) "PruebaMacro", como vista (View) acNormal, y como tipo de ventana (WindowMode)acNormal. Las constante acNormalestá definida como una constante enumerada miembro de Access.AcFormView. Su valor numérico es 0. Ya comentamos las Constantes Enumeradas en la entrega 12. Este tipo de constantes van a ir apareciendo con mucha frecuencia conforme vayamos avanzando en VBA. Como habrás podido ver hay un paralelismo total entre la acción de macro y el método correspondiente de DoCmd.

220

SENATI-Computación e Informática

ic ón con VBA

Pero no todas las Acciones de las macros están implementadas en los métodos de DoCmd. Por ejemplo, en la conversión de macros a código VBA hemos visto que CuadroMsj se sustituye por la función MsgBox. Otras acciones no implementadas en DoCmdson Acción RunApp RunCode SendKeys SetValue StopAllMacros StopMacro

Equivalencia en VBA Función Shell Llamada a la subrutina correspondiente Instrucción SendKeys Operador =de asignación Instrucciones Stopo End Instrucciones Exit Subo Exit Function

Podemos ver directamente los métodos implementados en la clase DoCmd, mediante la ventana del Examinador de objetos. Para activar esa ventana pulsaremos la tecla [F2] desde el editor de código. Para localizar la clase DoCmd seleccionamos la biblioteca de Access y escribimos el nombre de la clase que queremos buscar. Tras pulsar la tecla de búsqueda se nos posicionará en la clase DoCmd. En la columna de la derecha podremos ver sus métodos. Se puede comprobar que, al contrario de otras clases, no posee ni propiedades ni eventos.

SENATI-Computación e Informática

221

Uso de DoCmd en los Asistentes para controles Los Asistentes para controles de Access, por ejemplo en los formularios, hacen un amplio uso del objeto DoCmd. Si por ejemplo se añade un botón a un formulario, teniendo activado el asistente para controles, (botón señalado con la flecha roja) veremos que Access nos muestra un formulario en el que nos pide información acerca de la acción que queremos que ocurra cuando presionemos en el botón.

En nuestro caso vamos a crear un botón que haga que vayamos al registro siguiente respecto al registro actual. Primero debemos decidir qué categoría vamos a utilizar, por lo que seleccionaremos en la izquierda la [Exploración de registros]. En la ventana de la derecha (acciones) seleccionaremos [Ir al registro siguiente]. Presionamos dos veces las sucesivas teclas [Siguiente] y ponemos como nombre del botón cmdRegistroSiguiente, y presionamos la tecla [Finalizar]. Si hemos seguido estos pasos, nos mostrará en el formulario un botón con una flecha a la derecha. Si abrimos el módulo de clase del formulario veremos que ha escrito el siguiente código Private Sub cmdRegistroSiguiente_Click() On Error GoTo Err_cmdRegistroSiguiente_Click DoCmd.GoToRecord , , acNext Exit_cmdRegistroSiguiente_Click: Exit Sub Err_cmdRegistroSiguiente_Click: MsgBox Err.Description Resume Exit_cmdRegistroSiguiente_Click End Sub 222

SENATI-Computación e Informática

Vemos que nos ha generado un procedimiento de evento que define qué debe pasar cuando se presione el botón [cmdRegistroSiguiente]. En concreto vemos que usa el objeto DoCmd con el método GotoRecord, y el parámetro acNext. Esto hace que intente posicionarse en el registro siguiente. Incluso define un sistema para controlar posibles errores que se puedan generar. Sugiero al lector que intente realizar un formulario, conectado a una tabla o consulta y que contenga botones para efectuar las siguientes operaciones: 1. 2. 3. 4. 5. 6. 7.

Ir al primer registro Ir al registro anterior Ir al registro siguiente Ir al último registro Agregar nuevo registro Guardar registro Cerrar Formulario

Uso de controles ActiveX Agregando controles en el Formulario Formularios De todos los objetos de Access vamos a empezar a trabajar con los formularios. Un formulario es el elemento básico para la introducción de datos y su mantenimiento, por parte del usuario final de nuestra aplicación. También puede servir para mostrar avisos, al estilo de un Cuadro de mensaje, como formulario de inicio de una aplicación, como formulario del tipo “Acerca de…” o incluso como contenedor de otro subformulario u objetos ActiveX. Ya hemos comentado que el objeto Form, que representa a un formulario, es un elemento de la colección Forms. Vemos también que un objeto Formcontiene como atributo el objeto Module. El objeto Module representa el módulo de clase del formulario, en el que podemos, al igual que en una “clase normal” definir propiedades y métodos personalizados. Para efectuar las pruebas de código, vamos a crear un formulario “sencillo” y a trabajar con su código de clase. Para simplificar más las cosas no lo enlazaremos con ningún origen de datos. Eventos de un formulario Ahora vamos a poner un botón que nos servirá para cerrar el formulario, una vez abierto. Usaremos el [Asistente para Controles]. Compruebe que está activada la “Varita mágica” SENATI-Computación e Informática

223

Seleccionamos el Botón de Comando y lo dibujamos en la esquina inferior derecha del formulario. Tras esto se nos abre el asistente y nos pregunta qué queremos hacer con el botón: Seleccionamos en la lista izquierda Operaciones con Formularios, y en la derecha Cerrar formulario.

Como imagen seleccionamos Salir (la puerta con la flecha). Tras esto pasan dos cosas: El botón se nos muestra en el formulario, con el gráfico de la puerta y la flecha:

Pero, aparte de esta imagen, más o menos estética, ha ocurrido algo muy importante en el módulo de código asociado al formulario. Si teniendo seleccionado el botón, abrimos la Hoja de Propiedades, pulsando el botón [Hoja de Propiedades] de la Cinta Herramientas, seleccionamos la pestaña [Eventos] y en ella podemos ver que el evento Al hacer clic tiene asociado un procedimiento de evento en el código de clase asociado al formulario.

224

SENATI-Computación e Informática

Si hacemos clic en la palabra [Macro Incrustada], se nos abre un botón con puntos suspensivos a su derecha. Pulsando en ese botón se nos abriría el diseñador de Macros teniendo posicionado el cursor en la Accion correspondiente.

Para ver el código se debe pulsar en el botón [Ver Código] de la Cinta Herramientas:

En la ventana del Explorador de proyectos, vemos que de la carpeta Microsoft Office Objetos de clase, cuelga el objeto Form_Formulario1. Asociado a este objeto podemos ver el código del módulo de clase del Formulario, en el que ha aparecido el procedimiento

SENATI-Computación e Informática

225

Si hacemos clic en el cuadro combinado y elegimos Comando1 Veremos un procedimiento asociado al Boton de Comando Sub

Comando1_Click()

Este procedimiento se ejecutará cada vez que presionemos sobre el botón de nombre Comando1. Este botón es el que hemos colocado en el formulario. Nosotros tendremos que colocar el código asociado Private Sub Comando1_Click() On Error GoTo HayError DoCmd.Close Salir: Exit Sub HayError: MsgBox Err.Description Resume Salir End Sub La primera línea indica la etiqueta de la línea a la que debe saltar el código si se produjera un error; en este caso a la línea HayError: Una vez que salte a esa línea, el código hará que le muestre la descripción del error, tras lo que anulará el error y efectuará un salto a la etiqueta Salir:desde donde saldrá del procedimiento mediante Exit Sub. Podemos cambiar ese código. Una cosa que no me hace especialmente feliz es el nombre del botón. En general me gustan más nombres que sean descriptivos, por ejemplo cmdCerrar. por lo que voy a modificar el código para quede así: Private Sub CmdCerrar_Click() On Error GoTo HayError DoCmd.Close Exit Sub

226

SENATI-Computación e Informática

HayError: MsgBox Err.Description Resume Salir End Sub Lo primero que he hecho ha sido cambiar el nombre del procedimiento gestor del evento Click del botón. Esto es pasó porque quiero que el botón se llame cmdCerrar. cmd indica que es un botón y Cerrar indica el procedimiento que ejecuta, Cerrar el formulario. Nos volvemos al diseño del formulario cerrando la ventana del editor de código, por ejemplo pulsando en el aspa superior derecha de la ventana. Volvemos a abrir la ventana de propiedades, y lo primero que vamos a hacer es cambiar el nombre del botón, cosa que haremos pulsando en la pestaña [Otras] seleccionando la propiedad Nombre y escribiendo cmdCerrar.

A continuación asignamos el procedimiento cmdCerrar_Click()al evento Al hacer clic del botón, como hemos visto en un párrafo anterior.

SENATI-Computación e Informática

227

ic ón con VBA

Guardamos los cambios y abrimos el formulario.

No es nada espectacular, pero podemos comprobar que al apretar el botón, el formulario se cierra, que es lo que en principio queríamos. Durante la vida de un formulario ocurren una serie de eventos. Es interesante saber en qué orden se producen éstos, tanto al abrirse el formulario, como al cerrarse. Para ello vamos a seleccionar una serie de eventos del formulario y a escribir un pequeño código que indicará en qué orden se han producido estos eventos. Primero creamos, a nivel del módulo, una variable que se irá incrementando cuando se produzcan determinados eventos. Vamos a seleccionar los siguientes eventos del formulario: Activate

Al activar

Cuando el formulario pasa a ser ventana activa

Close Current Deactivate GotFocus Load LostFocus Open Resize Unload

Al cerrar Al activar registro Al desactivar Al recibir el foco Al cargar Al perder el foco Al abrir Al cambiar el tamaño Al descargar

Al cerrarse y retirarse de la pantalla Cuando se enfoca un registro como actual Cuando la ventana del formulario pierde el foco Cuando el formulario recibe el foco Al abrir un formulario y mostrar sus registros Cuando el formulario pierde el foco Al abrir pero antes de mostrar el primer registro Al abrir un formulario o cambiar de tamaño Al cerrar un formulario, antes de desaparecer

Vamos asociando cada uno de los eventos y escribimos su código El código sería tan simple como éste: Option Compare Database Option Explicit Dim intNumero As Integer Private Sub Form_Activate() End Sub

228

MuestraOrden "Activate"

Private Sub Form_Close() End Sub

MuestraOrden "Close"

Private Sub Form_Current() End Sub

MuestraOrden "Current"

SENATI-Computación e Informática

Private Sub Form_Deactivate() End Sub

MuestraOrden "Deactivate"

Private Sub Form_GotFocus() End Sub

MuestraOrden "GotFocus"

Private Sub Form_Load() End Sub

MuestraOrden "Load"

Private Sub Form_LostFocus() End Sub

MuestraOrden "LostFocus "

Private Sub Form_Open(Cancel As Integer) End Sub Private Sub Form_Resize() End Sub

MuestraOrden "Open"

MuestraOrden "Resize"

Private Sub Form_Unload(Cancel As Integer) End Sub

MuestraOrden "Unload"

Private Sub MuestraOrden(ByVal Evento As String) intNumero = intNumero + 1 Debug.Print CStr(intNumero) & " " & Evento End Sub Private Sub cmdCerrar_Click() On Error GoTo HayError DoCmd.Close Salir: Exit Sub HayError: MsgBox Err.Description Resume Salir End Sub ¿Qué hace este código? Cuando se produce cualquiera de los eventos incluidos en el mismo, éste llama al procedimiento MuestraOrden, pasándole como parámetro el nombre del evento. Este procedimiento incrementa la variable intNumero e imprime su valor, junto con el nombre del evento pasado, en la ventana Inmediato. Con este simple procedimiento podemos averiguar en qué orden se van produciendo los eventos. Grabamos, abrimos el formulario y lo cerramos presionando el botón de cierre del formulario cmdCerrar.

SENATI-Computación e Informática

229

Microsoft Data Access Objects (DAO) Representa una forma de contactar con el motor de la base de datos desde VBA. Es una biblioteca orientada a objetos que permite acceder al motor de la base de datos mediante un conjunto de clases de las cuales se pueden crear instancias u objetos. Con DAO se pueden escribir programas en VBA que realicen prácticamente cualquier tarea que un usuario o diseñador pueda hacer desde la consola, como por ejemplo crear tablas, ejecutar consultas, modificar el contenido de alguna celda de alguna tabla, etc…

Instalacion de una Referencia a DAO Para poder trabajar con DAO es necesario indicarle a Access la biblioteca donde se encuentran las clases ( y métodos ) adecuados, lo cual se realiza siguiendo los pasos descritos a continuación:

Abrir el editor de código de la base de datos Una vez en modo edición de código VBA, debe activarse la opción Herramientas – Referencias en el menú superior Cuando se pulsa esta opción, aparece una ventana que muestra todas las bibliotecas de software disponibles, ordenadas por orden alfabetico. La biblioteca deseada es “Microsoft DAO 3.6”. Para seleccionarla, basta con pulsar sobre el recuadro blanco situado a su izquierda.

Una vez instaladas las referencias a esta biblioteca, ya se puede desde Access trabajar con DAO. 230

SENATI-Computación e Informática

C Clases, Objetos y Colecciones Como ya se ha visto, VBA es un lenguaje orientado a objetos. Por tanto, consta de clases y objetos. Las clases son declaraciones de tipos de datos junto a los métodos qu e los procesan. Los objetos son instancias de una determinada clase. En VBA casi todos los componentes de la base de datos van a ser objetos de alguna clase. Por ejemplo, una tabla será un objeto de la clase Tabledef, una consulta será un objeto de la clase QueryDef, un campo será un objeto de la clase Field, etc… Cada objetotiene una serie de porpiedades o datos internos y una serie de métodos que pueden invocarse. Por ejemplo, una tabla u objeto de la clase TableDef tiene una propiedad denominada Name, la cual contiene el nombre de la tabla. Por otro lado, también tiene un método CreateField, el cual per mite añadir un campo a dicha tabla. En DAO existe también el concepto de colección. Una colección no es sino un conjunto de cero, uno o mas objetos. Habitualmente su nombre es plural, por lo que termina con “s”s o con “es”. Por ejemplo, Users es una colección de objetos de la clase User Existen varias formas de acceder a los distintos objetos de una colección: 

Colección!Objeto: Por ejemplo, Forms!frmFacturas representa el formulario frmFacturas de la colección Forms



Colección(“objeto”): por ejemplo, Forms(“ frmFacturas”) equivale al ejemplo anterior. En lugar de una tira de caracteres, se puede utilizar una variable.

 

Colección(índice): Por ejemplo, Forms(0) es el primer formulario abierto en la base de datos.

Recuerde que los nombres deben estar entre corchet es en caso de contener blancos. La mejor forma de procesar todos los objetos de una colección es mediante la sentencia For Each. El Codigo de Ejemplo siguiente imprime en la ventana inmediato los nombres de todas la tablas de una base de datos:

For Each t In dbCurr.TableDefs Debug.Print t.Name Next

A la hora de accede a un subcomponente de un component, en access existen dos caracteres especiales: el character “!” y el carácter “.” Con una aplicabilidad muy distinta: “!” Sirve para indicarsubobjetos de un objeto mayor. El ejemplo siguiente muestra la forma de acceder al cuadro de texto codcli del formulario de facturas : frmFacturas!codcli “.” Sirve para acceder a las propiedades y métodos de un objeto. El ejemplo siguiente muestra la forma de acceder a la propiedad Name de un objeto t de la clase TableDef : t.Name

SENATI-Computación e Informática

231

El ejemplo siguiente muestra la forma de llamar al método CreateField sobre un objeto t de la clase TableDef: t.CreateField(“teléfono”,dbText, 10 )

El siguiente ejemplo muestra un código VBA que emplea DAO para imprimir en la ventana Inmediato el nombre de la base de datos actual Dim dbcurr As Database Set dbCurr = DBEngine.Workspaces(0).Databases(0) Debug.Print dbCurr.Name

Microsoft Jet Replication Projects (JRO) Utilice JRO con bases de datos de Microsoft Access (.MDB) si necesita controlar mediante programación el intercambio de datos e información de diseño entre los miembros del conjunto de réplicas. Por ejemplo, puede usar JRO para escribir un procedimiento que sincronice automáticamente la réplica de un usuario con las demá s réplicas del conjunto cuando el usuario abra la base de datos. La base de datos debe estar cerrada para que pueda replicarse mediante programación.

Métodos Método CreateReplica Método GetObjectReplicability Método MakeReplicable Método SetObjectReplicability Método Synchronize

Propiedades Propiedad ActiveConnection Propiedad ConflictFunction Propiedad ConflictTables Propiedad DesignMasterID Propiedad ReplicaID Propiedad ReplicaType Propiedad RetentionPeriod Propiedad TableName Propiedad Visibility

Métodos y propiedades disponibles en una réplica parcial Método Append Método Delete Método PopulatePartial Propiedad FilterCriteria Propiedad FilterType Propiedad Priority 232

SENATI-Computación e Informática

El siguiente ejemplo muestra los filtros de una replica parcial existente. Para poder utilizar los objetos JRO con sus propiedades y sus métodos es preciso establecer la referencia a la biblioteca “Microsoft Jet and Replication Objects 2.1 Library”

Public Sub VerFiltros(RepParcial As String) Dim flt As JRO.Filter Dim rep As New JRO.Replica Dim I As Integer Rep.ActriveConnection = RepParcial „Anexa un filtro parcial a una Tabla „ Imprime todos los filtros For i = 1 To rep.Filters.Count -1 Set flt = rep.Filters.Count – 1 Debug.Print flt.TableName, flt.FilterCriteria, flt.FilterType Next i End Sub

Microsoft ActiveX Data Objects (ADO) ADO define una secuencia de acciones dentro de su modelo para poder accede a los origenes de datos. El modelo proporciona los medios necesarios para realizar dichas acciones mediante los métodos y propiedades de los objetos, y los eventos informan de si se van produciendo satisfactoriamente o no. Los pasos de esta secuencia son: Conectarse a un Origen de Datos, mediante un objeto Connection. Si se desea realizar una transacción se deberá establecer en este punto.

SENATI-Computación e Informática

233

 

Especificar un comando ( objeto Command ) para tener acceso al origen de datos, opcionalmente con parámetros variables ( objeto Parameter ). Si se desea una instrucción SQL se deberán indicar columnas, tablas y valores de la instrucción SQL como parámetros.



Ejecutar Comando



Si el comando hace que los datos se devuelvan en form de filas, almacenar las filas en un objeto Recordset que se pueda examinar, manipular o cambiar con facilidad.



Agregar, eliminar o cambiar filas y columnas que se desee, y actualizar el origen de datos con los cambios de las filas de la cache, en caso de ser necesario.



Como resultado de la conexión o de ejecutar un comando, se proporciona un medio general de detección de errores ( objeto Error )



Por ultimo, se ha de finalizar la conexión. En caso de utilizar una transacción, se deberá confirmar o cancelar.



Se pueden utilizar estos pasos en el modelo de programación, pero ADO permite realizar parte del modelo. Por ejemplo, se podrían almacenar los datos a partir de un archivo directamente en una cache de filas y después utilizar los recursos de ADO simplemente para examinar los datos. Cuando ciertas operaciones están a punto de suceder o han sucedido, se produc e una notificación o aviso denominado evento. Los eventos permiten gestionar la aplicación y actuar en consecuencia según sea la notificación. ADO no modeliza los eventos, pero permite tratarlos mediante llamadas a procedimientos del controlador de eventos. Un controlador de eventos es una rutina o método al se le llama antes o después de que se produzca el evento. Ello da lugar a un modelo de eventos definido por los eventos o avisos que se producen para la s operaciones síncronas ( una operación síncrona espera a que se produzca el aviso correspondiente para poder continuar ) o asíncronas.

Preguntas de Repaso 1. ¿Cómo definiría un bucle para iterar a través de una matriz de 10 enteros? 2. Si desea que el código de un bucle se ejecute al menos una vez ¿Qué bucle elegiría? 3. Como se podría asegurar que el código de una instrucción If funcione correctamente? 4. ¿Para que se utiliza la instrucción Exit For? 5. ¿Los comandos como DoCMD también pueden usarse en otras aplicaciones de Office? 6. ¿A que se refiere el botón de flechas que se muestra en un Menu?

234

SENATI-Computación e Informática

7. ¿Cuál es el mejor tipo de datos para representar datos con puntos decimales? 8. ¿Cuál es la diferencia entre los operadores de concatennacion + y & ¿ 9. ¿Cuál es la diferencia entre declarar e inicializar una variable?

Ejercicios Casos Practicos 01. Haz un programa de nombre Prog1, que funcione de la siguiente forma: -

El programa nos pide que escribamos dos números positivos menores de 57.

-

El programa nos da como resultado el producto de los dos números.

-

Si los números no son positivos o son mayores de 57, el programa nos lo dice y salimos del programa.

-

El programa nos pregunta al final si queremos volver a empezar.

02. Escribe un procedimiento de nombre Prog2, que nos vaya pidiendo números. Si escribimos el número 9999 se acaba; por último, el programa nos da como resultado el número de números introducidos, exceptuando el 9999. 03. Escribe un procedimiento de nombre Prog3, que haga lo mismo que el anterior, pero además nos dé la suma de todos los números introducidos, e xceptuando el 9999 04. Escribe un procedimiento de nombre Prog4, que haga lo mismo que el anterior, pero además nos dé el producto de los números introducidos, exceptuando el 9999. 05. Escribe un procedimiento de nombre Prog5, que escriba todos los múltiplos de 23 inferiores a 1000 y por último nos dé la suma de todos ellos. 06. Escribe un procedimiento de nombre Prog6, que sirva para hacer una tabla de valores de la función y=sen(7x-5) -

El programa nos pide los dos valores de “x” (valores máximo y mínimo)

-

El programa nos pide el incremento (variación) de la “x”.

07. Escribe un procedimiento de nombre Prog7, que sirva para calcular un cateto de un triángulo rectángulo a partir del otro cateto y la hipotenusa de la siguiente forma: -

El programa nos pide el valor de la hipotenusa

-

El programa nos pide el valor de un cateto.

-

Si el cateto es mayor que la hipotenusa, el programa nos da un mensaje de error y se acaba.

-

El programa nos da como resultado el valor del otro cateto y nos pregunta si queremos volver a empezar.

SENATI-Computación e Informática

235

08. Escribe un procedimiento de nombre Prog8, que escriba los 15 primeros múltiplos de 7, su suma y su producto. El programa ha de tener la posibilidad de volver a empezar. 09. Escribe un procedimiento de nombre Prog9, que sirva para calcular el área de un triángulo o el área de un rectángulo o el área de un círculo. El programa ha de tener la posibilidad de volver a empezar. Utiliza la estructura “Case”. 10. Escribe un procedimiento de nombre Prog10, que “dibuje” un rectángulo de asteriscos a partir de la base y la altura. 11. Escribe un procedimiento de nombre Prog11, que “dibuje” un cuadrado con el carácter que introducimos por teclado, a partir del lado. 12. Escribe un procedimiento de nombre Prog12, que nos pida un número y dé como resultado la tabla de multiplicar del número introducido. 13. Escribe un procedimiento de nombre Prog13, que nos dé las opciones: -

Calcular una suma (crea una “function” de nombre suma)

-

Calcular una raíz cuadrada (crea una “function” de nombre raizcua)

-

Calcular un logarimo neperiano (crea una “function” de nombre neperiano).

14. Escribe un procedimiento de nombre Prog14, que nos pida dos sumandos y nos dé la suma de sus cuadrados y su diferencia (utiliza las funciones: SumaCuadrado y RestaCuadrado) 15. Escribe un procedimiento de nombre Prog15 que funcione de la siguiente forma: -

El programa nos pide 10 valores.

-

El programa calcula la media aritmética (function).

-

El programa calcula las desviaciones respecto a la media.

-

El programa calcula la desviación media (llamada a la función anterior).

-

El programa calcula la varianza (llamada a la función anterior).

-

Por último el programa calcula la desviación típica.

16. Escribe un procedimiento de nombre Prog16, que calcule los 25 primeros términos de la sucesión de término general: (3n+1) / (2n-1) 17. Crea un formulario de nombre Formulario2 en la B. D. Programas con 5 botones, que permitan ejecutar los programas:

236

Prog8

Múltiplos de 7

Prog11

Dibuja cuadrado

Prog14

Suma y Resta de cuadrados

Prog15

Estadística

Prog16

Sucesión.

SENATI-Computación e Informática

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF