Microsoft Calendar Control 10.0 and later versions use an incorrect value for the FirstDay property (826761)



The information in this article applies to:

  • Microsoft Office Access 2003
  • Microsoft Access 2002

This article applies to a Microsoft Access database (.mdb) and a Microsoft Access project (.adp).

Moderate: Requires basic macro, coding, and interoperability skills.

SYMPTOMS

In a Microsoft Access form or report, you insert Microsoft Calendar Control 10.0 or a later version and then you try to set the FirstDay property of the Calendar Control by using the numeric constants. For example, you use vbMonday for the days, as the "Help Topics: Calendar Control Reference" Help file (Mscal.hlp) suggests. An incorrect day is set for the first day of the Calendar Control.

However, if you use the earlier versions of Calendar Control, the FirstDay property is set correctly.

CAUSE

This problem occurs because the numeric constants for the days that are defined in Microsoft Visual Basic, such as vbSunday and vbMonday, are not associated with the correct day value.

WORKAROUND

To work around this problem, follow these steps:
  1. Determine the association between the days and the Microsoft Visual Basic for Applications (VBA) intrinsic numeric constants. To do this, follow these steps:
    1. Start Access.
    2. Open the Northwind.mdb sample database.
    3. In the Database window, click Forms under Objects.
    4. In the right pane, double-click Create form in Design view.
    5. On the Insert menu, click ActiveX Control.
    6. In the Insert ActiveX Control dialog box, click to select Calendar Control 10.0 or a later version from the Select an ActiveX Control list box.
    7. Click OK.
    8. Add a command button to the form that has the properties set as follows:
      PropertyValue
      NametestFD
      CaptionChange First Day
    9. On the File menu, click Save.
    10. In the Save As dialog box, type Form1 in the Form Name box, and then click OK to save the Form1 form.
    11. On the View menu, click Code.
    12. In the Visual Basic Editor, type or paste the following code:
      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    13. Open Form1 in the Form view.
    14. Click the Change First Day button.
    15. If the first column of the Calendar Control is not set to Tuesday, take note of the day in the first column.
    16. In the Visual Basic Editor, click Immediate Window on the View menu.
    17. In the Immediate window, type ?vbTuesday, and then press ENTER.

      Notice the numeric value.
    18. Repeat step k through step p by replacing vbTuesday with other numeric constants, such as vbMonday and vbWednesday. Create a table as follows:
      Week DayVBA Intrinsic ConstantNumeric Value Associated
      MondayvbSunday1
      TuesdayvbMonday2
      WednesdayvbTuesday3
      ThursdayvbWednesday4
      FridayvbThursday5
      SaturdayvbFriday6
      SundayvbSaturday7
  2. Create a global custom enumeration that is correctly mapped to the week days. To do this, follow these steps:
    1. In the Database window, click Module under Objects.
    2. On the Insert menu, click Module.
    3. Type or paste the following code in the Visual Basic Editor:
      Option Explicit
              
      Public Enum nwFirstDay
          nwMonday = 1
          nwTuesday = 2
          nwWednesday = 3
          nwThursday = 4
          nwFriday = 5
          nwSaturday = 6
          nwSunday = 7
      End Enum
      
      Note Create the enumeration as described in the "Week Day" column and in the corresponding "Numeric Value Associated" column of the table that is in step 1r.
    4. Type Day_Association in the Module Name box, and then save the module.
    5. Close the Visual Basic Editor.
  3. Replace the VBA intrinsic constants in your application with the constants that are in the custom enumeration that is described in step 2.

    For example, if your original code is
    Calendar0.FirstDay = vbTuesday
    modify your code to use custom enumeration as follows:
    Calendar0.FirstDay = nwTuesday
  4. Run the application.

MORE INFORMATION

The VBA intrinsic constants do not depend on the system locale information. For example, on a computer that has the localized operating system in the German language, the first day of the week is Monday. The numeric value associated with Monday on the computer is always 0.

Because Calendar Control 10.0 or a later version is a worldwide Microsoft ActiveX control, you cannot control the numeric values that are associated with the VBA intrinsic constants based on your computer specifications. Therefore, the problem that is mentioned in the "Symptoms" section of this article occurs.

Steps to Reproduce the Behavior

  1. Start Access.
  2. Open the Northwind.mdb sample database.
  3. In the Database window, click Forms under Objects.
  4. In the right pane, double-click Create form in Design view.
  5. On the Insert menu, click ActiveX Control.
  6. In the Insert ActiveX Control dialog box, click to select Calendar Control 10.0 or a later version from the Select an ActiveX Control list box.
  7. Click OK.
  8. Add a command button to the form that has the properties set as follows:
    PropertyValue
    NametestFD
    CaptionChange First Day
  9. On the View menu, click Code.
  10. In the Visual Basic Editor, type or paste the following code:
    Option Compare Database
    
    Private Sub testFD_Click()
        Calendar0.FirstDay = vbTuesday
    End Sub
    
  11. On the File menu, click Save.
  12. In the Save As dialog box, type Form1 in the Form Name box, and then click OK to save the Form1 form.
  13. Open Form1 in the Form view.
  14. Click the Change First Day button.

    Although you set the FirstDay property to vbTuesday, the calendar selects Wednesday to be the first day of the week.

REFERENCES

For more information about Calendar Control and the Calendar Control properties, open Mscal.hlp and then search for the appropriate topic. Mscal.hlp is located in the following folders:

Microsoft Access 2002

Installation Drive:\Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Installation Drive:\Program Files\Microsoft Office\Office11

Note Installation Drive is a placeholder for the name of your installation drive.

Modification Type:MinorLast Reviewed:6/3/2004
Keywords:kbDateTime kbfunctions KbVBA kbCtrl kbProperties kbhelp kbprb KB826761 kbAudDeveloper