Microsoft Calendar Control 10.0 y versiones posteriores usan un valor incorrecto para la propiedad FirstDay

Número de KB original: 826761

Nota:

Este artículo se aplica a un archivo de base de datos de Microsoft Access .mdb o .accdb. Requiere conocimientos básicos de macros, codificación e interoperabilidad.

Síntomas

En Microsoft Access, se muestra un día incorrecto para el primer día del Control de calendario. Este problema se produce cuando se inserta un control de calendario de Microsoft 10.0 o una versión posterior en un formulario o en un informe y, a continuación, se establece la FirstDay propiedad del control de calendario mediante constantes intrínsecas de Microsoft Visual Basic para Aplicaciones (VBA).

Por ejemplo, establezca la FirstDay propiedad del control Calendar en vbMonday o en vbTuesday. Al establecer la FirstDay propiedad del Control de calendario en vbTuesday, el calendario usa miércoles como primer día de la semana.

Nota:

Al usar las versiones anteriores de Control de calendario, puede establecer la FirstDay propiedad correctamente.

Causa

Este problema se produce porque las constantes intrínsecas de los días que se definen en Microsoft Visual Basic, como vbSunday y vbMonday, no están asociadas al valor de día correcto.

Solución alternativa

Para resolver este problema, siga los siguientes pasos:

  1. Determine la asociación entre los días, las constantes intrínsecas de VBA y los valores numéricos asociados a los valores de día correctos y las constantes intrínsecas de VBA. Para ello, siga estos pasos:

    1. Iniciar acceso.

    2. Abra la base de datos de ejemplo Northwind.

    3. En la ventana Base de datos, haga clic en Formularios en Objetos.

      Nota:

      En Access 2007, haga clic en la pestaña Crear y, a continuación, haga clic en Diseño de formularios en el grupo Formularios .

    4. En el panel derecho, haga doble clic en Crear formulario en la vista Diseño.

      Nota:

      En Access 2007, omita este paso.

    5. En el menú Insertar , haga clic en Control ActiveX.

    Nota:

    En Access 2007, haga clic en la pestaña Diseño y, a continuación, haga clic en Insertar control ActiveX en el grupo Controles .

    1. En el cuadro de diálogo Insertar control ActiveX , haga clic para seleccionar Control de calendario 10.0 o una versión posterior en el cuadro de lista Seleccionar un control ActiveX y, a continuación, haga clic en Aceptar.

    2. Agregue un botón de comando al formulario que tenga las propiedades establecidas de la siguiente manera:

      Propiedad Valor
      Name testFD
      Caption Cambiar primer día
    3. En el menú Archivo, haga clic en Guardar.

      Nota:

      En Access 2007, haga clic en el botón Microsoft Office y, a continuación, haga clic en Guardar.

    4. En el cuadro de diálogo Guardar como , escriba Form1 en el cuadro Nombre del formulario y, a continuación, haga clic en Aceptar para guardar el formulario Form1.

    5. En el menú Ver, haga clic en Código.

      Nota:

      En Access 2007, haga clic en la pestaña Diseño y, a continuación, haga clic en Ver código en el grupo Herramientas .

    6. En la Editor de Visual Basic, escriba o pegue el código siguiente:

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Abra Form1 en la vista Formulario.

    8. Haga clic en el botón Cambiar primer día .

      Nota:

      Si la primera columna del Control de calendario no está establecida en Martes, anote el día de la primera columna.

    9. En el Editor de Visual Basic, haga clic en Ventana inmediata en el menú Ver.

    10. En la ventana Inmediato, escriba ?vbTuesday y presione ENTRAR.

      Observe el valor numérico.

    11. Repita el paso j al paso o reemplazando vbTuesday por otras constantes intrínsecas de VBA, como vbMondayy vbWednesday.

      Observe que tendrá la siguiente tabla para mostrar la asociación entre los días, las constantes intrínsecas de VBA y los valores numéricos asociados a los valores de día correctos y a las constantes intrínsecas de VBA.

      Día de la semana Constante intrínseca de VBA Valor numérico asociado
      lunes vbSunday 1
      martes vbMonday 2
      miércoles vbTuesday 3
      jueves vbWednesday 4
      viernes vbThursday 5
      Sábado vbFriday 6
      Domingo vbSaturday 7
  2. Cree una enumeración personalizada global que esté asignada correctamente a los días de la semana. Para ello, siga estos pasos:

    1. En la ventana Base de datos, haga clic en Módulo en Objetos.

      Nota:

      En Access 2007, haga clic en la pestaña Crear , haga clic en la flecha situada debajo de Macro en el grupo Otros y, a continuación, haga clic en Módulo.

    2. En el menú Insertar, haga clic en Módulo.

      Nota:

      En Access 2007, omita este paso.

    3. Escriba o pegue el código siguiente en la Editor de Visual Basic:

      Option Explicit
      
      Public Enum nwFirstDay
         nwMonday = 1
         nwTuesday = 2
         nwWednesday = 3
         nwThursday = 4
         nwFriday = 5
         nwSaturday = 6
         nwSunday = 7
      End Enum
      

      Nota:

      Cree la enumeración como se describe en la columna "Week Day" y en la columna "Numeric Value Associated" correspondiente de la tabla que se encuentra en el paso 1r.

    4. Asigne al módulo el nombre Day_Association y guárdelo.

    5. Cierre el editor de Visual Basic.

  3. Reemplace las constantes intrínsecas de VBA en la aplicación por las constantes que se encuentran en la enumeración personalizada que se describe en el paso 2.

    Por ejemplo, si el código original es

    Calendar0.FirstDay = vbTuesday
    

    modifique el código para usar la enumeración personalizada de la siguiente manera:

    Calendar0.FirstDay = nwTuesday
    
  4. Ejecute la aplicación.

Más información

Las constantes intrínsecas de VBA no dependen de la información local del sistema. Por ejemplo, en un equipo que tiene el sistema operativo localizado en alemán, el primer día de la semana es el lunes. El valor numérico asociado al lunes en el equipo siempre es 0.

Dado que Calendar Control 10.0 o una versión posterior es un control Microsoft ActiveX mundial, no puede controlar los valores numéricos asociados a las constantes intrínsecas de VBA en función de las especificaciones del equipo. Por lo tanto, se produce el problema que se menciona en la sección "Síntomas" de este artículo.

Pasos para reproducir el problema

  1. Iniciar acceso.

  2. Abra la base de datos de ejemplo Northwind.

  3. En la ventana Base de datos, haga clic en Formularios en Objetos.

    Nota:

    En Access 2007, haga clic en la pestaña Crear y, a continuación, haga clic en Diseño de formularios en el grupo Formularios .

  4. En el panel derecho, haga doble clic en Crear formulario en la vista Diseño.

    Nota:

    En Access 2007, omita este paso.

  5. En el menú Insertar , haga clic en Control ActiveX.

    Nota:

    En Access 2007, haga clic en la pestaña Diseño y, a continuación, haga clic en Insertar control ActiveX en el grupo Controles .

  6. En el cuadro de diálogo Insertar control ActiveX , haga clic para seleccionar Control de calendario 10.0 o una versión posterior en el cuadro de lista Seleccionar un control ActiveX y, a continuación, haga clic en Aceptar.

  7. Agregue un botón de comando al formulario que tenga las propiedades establecidas de la siguiente manera:

    Propiedad Valor
    Name testFD
    Caption Cambiar primer día
  8. En el menú Ver, haga clic en Código.

    Nota:

    En Access 2007, haga clic en la pestaña Diseño y, a continuación, haga clic en Ver código en el grupo Herramientas .

  9. En la Editor de Visual Basic, escriba o pegue el código siguiente:

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. En el menú Archivo, haga clic en Guardar.

    Nota:

    En Access 2007, haga clic en el botón Microsoft Office y, a continuación, haga clic en Guardar como.

  11. En el cuadro de diálogo Guardar como , escriba Form1 en el cuadro Nombre del formulario y, a continuación, haga clic en Aceptar para guardar el formulario Form1.

  12. Abra Form1 en la vista Formulario.

  13. Haga clic en el botón Cambiar primer día .

    Aunque establece la FirstDay propiedad del Control de calendario en vbTuesday, el calendario selecciona miércoles para que sea el primer día de la semana.

Referencias

Para obtener más información sobre el control de calendario y las propiedades del control de calendario, abra Mscal.hlp y, a continuación, busque el tema adecuado. Mscal.hlp se encuentra en las carpetas siguientes:

Microsoft Access 2002

Unidad de instalación: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Unidad de instalación: \Program Files\Microsoft Office\Office11

Nota:

Unidad de instalación es un marcador de posición para el nombre de la unidad de instalación.