Reemplazar el control de calendario en las aplicaciones de Access 2010 (traducción automática)

Importante

Este artículo se ha traducido con traducción automática; vea la declinación de responsabilidades. Para su referencia, puede encontrar la versión en inglés de este artículo aquí.

Ayuda visual de Office

Resumen:  Información sobre el reemplazo del control de calendario obsoleto en las aplicaciones de Microsoft Access 2010.

Última modificación: miércoles, 16 de septiembre de 2015

Hace referencia a: Access 2007 | Access 2010 | Access Services | Office 2007 | Office 2010

**Se aplica a:**Microsoft Office 2010 | Microsoft Access 2010

Publicada:  Octubre de 2010

Proporcionado por:  Ken Getz, http://www.mcwtech.com/default.htmMCW Technologies, LLC

Introducción

Microsoft Access ha incluido un control de calendario desde que primero agregó soporte para los controles de ActiveX, en Access 2.0. El control calendar, MSCAL.OCX, no se incluye en Access 2010. Además, si se intenta abrir un formulario que incluye el control, recibirá el siguiente error: "su base de datos de Microsoft Office o el proyecto contiene una referencia que falta o está dañada el archivo ꞌMSCAL.OCXꞌ."

Codifíquelo

Para reemplazar el control de calendario en las aplicaciones de Access 2010, tiene varias opciones. Usted puede:

  • Utilice la característica de DatePicker integrada para cualquier control de cuadro de texto que está enlazado a un campo de fecha.

  • Utilice el control DatePicker de Windows, parte de los controles comunes de Windows.

  • Utilizar un subformulario que parece y funciona como un calendario.

  • Control de calendario de fecha/uso de un tercero.

Este Visual muestra todo excepto la última opción. Para comenzar, descargue la base de datos de ejemplo, CalendarDemo.accdb (una base de datos de Access 2010). Tenga en cuenta que la base de datos incluye una tabla denominada cumpleaños con tres campos (ID., Nombre_cliente y fecha de nacimiento) y de dos formas:

  • Cumpleaños, enlazado a la tabla de ejemplo denominada cumpleaños.

  • frmCalendar, un reemplazo de ejemplo para el control de calendario .

Si las aplicaciones actuales utilizan el MSCAL.OCX control de calendario, debe quitar cada instancia del control antes de poder utilizar los formularios que contienen actualmente el control. En este ejemplo se muestra que es la siguiente step─that, uso de alternativas para el control de acceso a calendario .

Utilice el selector de fechas integrado

Access 2007 y Access 2010 permiten adjuntar un selector de fecha para cualquier control de cuadro de texto que está enlazado a un campo de fecha. Para ver el formulario en acción, abra el cumpleaños de formulario (consulte la figura 1). El cuadro de texto Fecha de nacimiento está enlazado al campo Fecha de nacimiento en la tabla de cumpleaños y cuando el cuadro de texto tiene el foco, haga clic en el icono de calendario pequeño situado junto al campo para mostrar un calendario y seleccione una fecha. El icono de calendario sólo aparece cuando el cuadro de texto tiene el foco.

Figura 1. Selector de fecha integrados

Selector de fecha integrado

Para utilizar el selector de fecha integrados, debe confirmar que se ha establecido la propiedad ShowDatePicker para fechas, tal como se muestra en la figura 2. El control de cuadro de texto debe estar enlazado a un campo de fecha y debe quitar la propiedad InputMask para el control, si previamente ha creado una máscara de entrada.

Figura 2. ShowDatePicker (propiedad)

Propiedad ShowDatePicker

Utilice el Control DatePicker

Los controles comunes de Windows proporciona un control DatePicker ActiveX para su uso en todas las aplicaciones y las aplicaciones de Access pueden utilizar este control también. Uso de este control requiere mucho más esfuerzo con el selector de fecha integrados, pero proporciona más flexibilidad.

La aplicación de ejemplo incluye varias instancias del control DatePicker de Windows. Sin embargo, debe intentar agregar una instancia de sí mismo. Para utilizar el control DatePicker de Windows, abra el formulario de cumpleaños en la vista Diseño. En la cinta de opciones, haga clic en el botón de lista desplegable en la esquina inferior derecha del grupo de controles para mostrar todos los controles y seleccione Controles ActiveX en la lista de opciones (consulte la figura 3).

Figura 3. Opciones de controles de ActiveX

Opciones de controles ActiveX

En el cuadro de diálogo Insertar control activo , desplácese hacia abajo para buscar la fecha de Microsoft y 6.0 de Control de selector de tiempo (SP4) (el control en el equipo puede tener un SP posterior como SP6) y, a continuación, haga clic en Aceptar para insertar el control (consulte la figura 4). Tenga en cuenta que la lista de controles disponibles no puede coincidir con la figura.

Figura 4. Control Microsoft Date and Time Picker

Control Selector de fecha y hora

El control se selecciona, inserta una instancia del formulario actual. Puede cambiar el tamaño, mover y modificar el control exactamente como cualquier otro control de acceso (tal y como podría con el control de calendario original). Eliminar el control que previamente added─there ya es una instancia de la DatePicker controlar en el formulario (consulte la figura 5).

Tenga en cuenta lo siguiente acerca de este control:

  • Se estableció la propiedad OrigenDelControl (ControlSource) para el control de selector de fechas para la fecha de nacimiento, por lo que parece y funciona como cualquier otro control─when de acceso a cambiar la fecha en el selector de fechas, Access guarda automáticamente el valor en el campo Fecha de nacimiento de la fila actual del formulario.

  • Se estableció la propiedad de la casilla de verificación del control en Sí. Esta propiedad determina si el control debe mostrar una casilla de verificación que indica que contiene un valor no nulo. Para permitir que los usuarios agregar una nueva fila a la tabla subyacente del formulario, establezca esta propiedad en Sí, o bien el control no puede indicar el valor null de la nueva fila para el campo Fecha de nacimiento.

  • Tiene un gran control sobre la interfaz de usuario del control. Puede mostrar u ocultar hacia arriba y abajo flechas; puede cambiar la fuente (establecida en Calibri en el ejemplo, para que coincida con los otros controles) y otras características visuales.

Figura 5. Formulario de ejemplo que contiene un control DatePicker

Formulario de ejemplo que contiene un control DatePicker

Pruebe el control: abra el formulario de cumpleaños y, a continuación, haga clic en la flecha desplegable del control (consulte la figura 6). Seleccione una fecha, mover a la fila siguiente y atrás, y verá que has cambiado correctamente la fecha de nacimiento de la persona actual. Mover a la nueva fila y observe que la casilla de verificación en el control no está seleccionada (que indica que el valor es null). Cuando haya terminado, cierre el formulario.

Figura 6. Control DatePicker

Control DatePicker

Utilizar un formulario de calendario personalizado

Además de las técnicas anteriores, que desee un calendario que aparece siempre, exactamente igual que el control de calendario antiguo. Una forma de lograrlo es utilizar un subformulario que incluye todo el comportamiento de un calendario. Al menos uno de estos se creó para usted y la aplicación de ejemplo incluye el formulario que se denomina frmCalendar. El formulario es self-contained─you sólo importar el formulario en su propia aplicación y, a continuación, se pueden incrustar en cualquier otro formulario como subformulario. Abrir frmCalendar en el diseño de ver (consulte la figura 7) y verá que es un pequeño formulario con un botones y otro código de controls─the en el formulario hace todo el trabajo de actualización y administración de la forma. En la cinta de opciones, en el grupo Herramientas , seleccione Ver código. Revise el código. No cambie el código. Cuando haya terminado, cierre el editor de Visual Basic y, a continuación, frmCalendar.

Figura 7. FrmCalendar de ejemplo en la vista Diseño

FrmCalendar de ejemplo en la vista Diseño

Para probar el formulario de calendario, en la cinta de opciones, seleccione Creary, a continuación, en Diseño de formularios. Desde el panel de exploración, arrastre una copia de frmCalendar al formulario nuevo. Esta acción crea un nuevo subformulario, tal como se muestra en la figura 8. De forma predeterminada, el nombre del subformulario es calendario. Puede cambiar el nombre, pero dejarla tal cual por ahora.

Figura 8. Instancia de frmCalendar en un formulario nuevo

Instancia de frmCalendar en un formulario nuevo

La forma de calendario no es útil si sólo se puede seleccionar dates─you también debe tener que poder determinar cuándo cambia la fecha seleccionada. El formulario de ejemplo provoca un evento de DateChanged, que se pasa al controlador de eventos de un parámetro que contiene la nueva fecha seleccionada. Reaccionar a este evento requiere trabajo adicional, ya que el subformulario no es un control. En realidad, requiere sólo dos líneas de código adicionales: los pasos siguientes muestran cómo enlazar el controlador de eventos.

Con el nuevo formulario que creó anteriormente abierto en la vista Diseño , agregue un control TextBox al formulario, junto al calendario. Nombre de la propiedad selectedDate control de cuadro de texto nueva. En la cinta de opciones, seleccione Ver código. En el módulo de formulario, agregue la declaración siguiente.

Private WithEvents calendarForm as Form_frmCalendar

Esta declaración define una variable que puede hacer referencia a la clase de formulario de calendario (con nombre Form_frmCalendar, default─every formulario proporciona una clase cuyo nombre es Formulario_ < nombre de formulario >). Con la palabra clave WithEvents permite reaccionar a los eventos que hace referencia la variable de objeto que provoca. En este caso, el objeto provoca el evento de DateChanged y agregará un controlador de eventos para el evento.

En la lista desplegable Objeto situado en la esquina superior izquierda de la ventana del editor de Visual Basic, seleccione el Formulario. Esta acción crea el controlador de eventos de Form_Load. Modificar el controlador de eventos de forma que refleje el siguiente ejemplo de código.

Private Sub Form_Load()
    Set calendarForm = Calendar.Form
End Sub

Este código establece la variable que creó anteriormente para que se refiere a la propiedad de formulario del subformulario que creó en el formulario. Es decir, permite interactuar mediante programación con el formulario de calendario.

Por último, en la lista desplegable Objeto , seleccione calendarForm (la variable declara utilizando la palabra clave WithEvents anterior). Esta acción crea el controlador de eventos de calendarForm_DateChanged. Modificar el controlador de eventos de forma que refleje el siguiente ejemplo de código.

Private Sub calendarForm_DateChanged(newDate As Date)
    selectedDate = newDate
End Sub

Este código toma el parámetro que se pasa al controlador de eventos mediante el formulario de calendario y copia el valor en el cuadro de texto selectedDate en el formulario.

Guardar los cambios, el formulario Form1, de nombres y volver a Access 2010. Abra el formulario y seleccione una fecha en el calendario. Debe ver la fecha seleccionada aparecen en el control de cuadro de texto (Véase la figura 9). Cuando haya terminado, cierre el formulario.

Figura 9. Fecha del calendario

Fecha de calendario

Aunque no se puede enlazar el formulario de calendario a un campo de tabla, como se hacía con el control de calendario , puede escribir código para emular el comportamiento. El formulario de ejemplo, cumpleaños, incluye código sencillo para conectar el enlace de. Abra el formulario en la vista Diseño y seleccione Ver código. Tenga en cuenta que el código en el módulo de formulario es similar al código que ya se ha visto, excepto para una adición: el controlador de eventos de Current del formulario como se muestra en el siguiente ejemplo de código.

Private Sub Form_Current()
    On Error Resume Next
    calendarForm.Value = Me.Birthdate
End Sub

Este código comprueba que al mover de una fila a otra en el formulario, el formulario de calendario muestra el campo Fecha nacimiento en la fila actual. La adición de la instrucción On Error Resume Next permite que el código evitar los errores especiales que de lo contrario serían necesarios para la nueva fila, en el que el campo Fecha de nacimiento es null.

Además, el controlador de eventos DateChanged establece el valor del campo Fecha de nacimiento del formulario, en lugar de utilizar el valor de un control TextBox en el formulario.

Private Sub calendarForm_DateChanged(newDate As Date)
    Me.Birthdate = newDate
End Sub

Este cambio en el código anterior hace que los cambios en el formulario de calendario a propagarse de vuelta al campo FechaNacimiento subyacente inmediatamente, por lo que cualquier otro control enlazado al campo actualizaciones tan pronto como realice el cambio.

Cierre la ventana del editor de Visual Basic y abra el formulario de cumpleaños. Mover de una fila a otra y compruebe que el formulario de calendario se actualiza para coincidir con el campo Fecha de nacimiento actual. Cambiar la fecha de nacimiento en forma de calendario y compruebe que los otros controles enlazados a la actualización del campo de fecha de nacimiento también. Cuando haya terminado, cierre el formulario.

Léalo

Habida cuenta de las opciones que se muestra a continuación, debe ser capaz de reemplazar el control de calendario con el selector de fecha integrados, el control de selector de fechas o un subformulario de calendario. Ninguno de estos funciona exactamente igual que el control de calendario original. Sin embargo, debería ser posible reemplazar el control con una de estas opciones.

Tenga en cuenta las siguientes ventajas e inconvenientes de cada opción:

  • Selector de fecha integrado

    • Sencillo de utilizar (requiere únicamente establecer la propiedad de ShowDatePicker).

    • No hay personalización disponible.

    • Sólo funciona con controles de cuadro de texto enlazado a un campo de fecha en una tabla.

  • Selector de fechas Control

    • Razonablemente fácil de usar.

    • Permite la personalización más que el selector de fecha integrados.

    • También puede utilizarse para seleccionar horas.

    • Se puede enlazar a un origen de datos.

    • Depende de la DLL de controles personalizados de Microsoft, que presenta problemas graves de control de versiones. Los usuarios finales no pueden tener la misma versión del archivo DLL instalada tal y como lo hace, y esto requiere la actualización de su DLL a la versión más reciente.

    • Sólo aparece como una lista desplegable y no puede aparecer como un calendario abierto.

  • Calendario (formulario)

    • Aparece sólo como un calendario abierto (un pro y una estafa).

    • Puede personalizar por completo, pero requiere un trabajo en el diseñador y en el código.

    • Fácil para use─merely arrastre un formulario y escribir el código.

    • Enlazar eventos requiere código adicional.

    • Enlace no está disponible sin necesidad de escribir código.

Consultar

Ver el vídeo

Ver el vídeo | Longitud: 00: 12: 24

Hacer clic para obtener el código

Tomar el código

Explórelo

Acerca del autor
Ken getz es consultor senior de MCW Technologies. Es coautor de ASP.NET Developers Jumpstart (Addison-Wesley, 2002), manual del programador de Access (Sybex, 2001) y el manual del programador de VBA, 2ª edición (Sybex, 2001).

Nota

Declinación de responsabilidades de traducción automática: Este artículo se ha traducido con un sistema informático sin intervención humana. Microsoft ofrece estas traducciones automáticas para que los hablantes de otros idiomas distintos del inglés puedan disfrutar del contenido sobre los productos, los servicios y las tecnologías de Microsoft. Puesto que este artículo se ha traducido con traducción automática, es posible que contenga errores de vocabulario, sintaxis o gramática.