Элемент управления Календарем (Майкрософт) 10.0 и более поздних версий использует неверное значение свойства FirstDay.

Исходный номер базы знаний: 826761

Примечание.

Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb). Требуются базовые навыки работы с кодом, макросами и взаимодействия.

Симптомы

В Microsoft Access для первого дня элемента управления календарем отображается неправильный день. Эта проблема возникает, когда вы вставляете элемент управления Календарем (Майкрософт) 10.0 или более поздней версии в форму или отчет, а затем задаете FirstDay свойство элемента управления календарем с помощью встроенных констант Microsoft Visual Basic для приложений (VBA).

Например, для свойства элемента управления календарем задается FirstDay значение vbMonday или vbTuesday. Если для свойства Элемента управления календарем задано FirstDay значение vbTuesday, в календаре среда используется в качестве первого дня недели.

Примечание.

При использовании более ранних версий элемента управления календарем свойство можно задать FirstDay правильно.

Причина

Эта проблема возникает из-за того, что внутренние константы для дней, определенных в Microsoft Visual Basic, такие как vbSunday и vbMonday, не связаны с правильным значением дня.

Обходной путь

Чтобы обойти эту проблему, выполните следующие действия:

  1. Определите связь между днями, внутренними константами VBA и числовыми значениями, связанными с правильными значениями дня и внутренними константами VBA. Для этого выполните следующие действия:

    1. Запустите Access.

    2. Откройте пример базы данных Northwind.

    3. В окне База данных щелкните Формы в разделе Объекты.

      Примечание.

      В Access 2007 откройте вкладку Создать , а затем выберите Конструктор формы в группе Формы .

    4. В правой области дважды щелкните Создать форму в режиме конструктора.

      Примечание.

      В Access 2007 пропустите этот шаг.

    5. В меню Вставка выберите Элемент ActiveX.

    Примечание.

    В Access 2007 откройте вкладку Конструктор, а затем в группе Элементы управления щелкните Вставить элемент ActiveX.

    1. В диалоговом окне Вставка элемента ActiveX Control выберите Элемент управления Календарем 10.0 или более поздней версии в списке Выбор элемента ActiveX , а затем нажмите кнопку ОК.

    2. Добавьте кнопку команды в форму с заданными свойствами следующим образом:

      Свойство Значение
      Name testFD
      Caption Изменить первый день
    3. В меню Файл выберите пункт Сохранить.

      Примечание.

      В Access 2007 нажмите кнопку Microsoft Office и нажмите кнопку Сохранить.

    4. В диалоговом окне Сохранить как введите Form1 в поле Имя формы и нажмите кнопку ОК , чтобы сохранить форму Form1.

    5. В меню Вид выберите код.

      Примечание.

      В Access 2007 перейдите на вкладку Конструктор , а затем выберите Пункт Просмотр кода в группе Сервис .

    6. В Редактор Visual Basic введите или вставьте следующий код:

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. Откройте Form1 в представлении формы.

    8. Нажмите кнопку Изменить первый день .

      Примечание.

      Если для первого столбца элемента управления календарем не задано значение вторник, обратите внимание на день в первом столбце.

    9. В Редактор Visual Basic в меню Вид щелкните Окно интерпретации.

    10. В окне Интерпретация введите ?vbTuesday и нажмите клавишу ВВОД.

      Обратите внимание на числовое значение.

    11. Повторите шаг j через шаг o, заменив vbTuesday другими встроенными константами VBA, такими как vbMondayи vbWednesday.

      Обратите внимание, что в следующей таблице показана связь между днями, внутренними константами VBA и числовыми значениями, связанными с правильными значениями дня и внутренними константами VBA.

      День недели Встроенная константа VBA Связанное числовое значение
      Понедельник vbSunday 1
      Вторник vbMonday 2
      Среда vbTuesday 3
      Четверг vbWednesday 4
      Пятница vbThursday 5
      Суббота vbFriday 6
      Воскресенье vbSaturday 7
  2. Создайте глобальное настраиваемое перечисление, которое правильно сопоставлено с днями недели. Для этого выполните следующие действия:

    1. В окне База данных в разделе Объекты щелкните Модуль.

      Примечание.

      В Access 2007 откройте вкладку Создать , щелкните стрелку в разделе Макрос в группе Другие , а затем — Модуль.

    2. В меню Вставка выберите пункт Модуль.

      Примечание.

      В Access 2007 пропустите этот шаг.

    3. Введите или вставьте следующий код в Редактор Visual Basic:

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

      Примечание.

      Создайте перечисление, как описано в столбце "День недели" и в соответствующем столбце "Связанное числовое значение" таблицы, которая находится на шаге 1r.

    4. Присвойте Day_Association модуля имя и сохраните его.

    5. Закройте редактор Visual Basic.

  3. Замените встроенные константы VBA в приложении константами, которые находятся в пользовательском перечислении, описанном на шаге 2.

    Например, если исходный код имеет значение

    Calendar0.FirstDay = vbTuesday
    

    измените код, чтобы использовать пользовательское перечисление следующим образом:

    Calendar0.FirstDay = nwTuesday
    
  4. Запустите приложение.

Дополнительные сведения

Внутренние константы VBA не зависят от локальной информации системы. Например, на компьютере с локализованной операционной системой на немецком языке первый день недели — понедельник. Числовое значение, связанное с понедельником на компьютере, всегда равно 0.

Так как элемент управления Calendar 10.0 или более поздней версии является мировым элементом Управления Microsoft ActiveX, вы не можете управлять числовыми значениями, связанными с встроенными константами VBA на основе спецификаций компьютера. Поэтому возникает проблема, описанная в разделе "Симптомы" этой статьи.

Действия по воспроизведению проблемы

  1. Запустите Access.

  2. Откройте пример базы данных Northwind.

  3. В окне База данных щелкните Формы в разделе Объекты.

    Примечание.

    В Access 2007 откройте вкладку Создать , а затем выберите Конструктор формы в группе Формы .

  4. В правой области дважды щелкните Создать форму в режиме конструктора.

    Примечание.

    В Access 2007 пропустите этот шаг.

  5. В меню Вставка выберите Элемент ActiveX.

    Примечание.

    В Access 2007 откройте вкладку Конструктор, а затем в группе Элементы управления щелкните Вставить элемент ActiveX.

  6. В диалоговом окне Вставка элемента ActiveX Control выберите Элемент управления Календарем 10.0 или более поздней версии в списке Выбор элемента ActiveX , а затем нажмите кнопку ОК.

  7. Добавьте кнопку команды в форму с заданными свойствами следующим образом:

    Свойство Значение
    Name testFD
    Caption Изменить первый день
  8. В меню Вид выберите код.

    Примечание.

    В Access 2007 перейдите на вкладку Конструктор , а затем выберите Пункт Просмотр кода в группе Сервис .

  9. В Редактор Visual Basic введите или вставьте следующий код:

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. В меню Файл выберите пункт Сохранить.

    Примечание.

    В Access 2007 нажмите кнопку Microsoft Office и нажмите кнопку Сохранить как.

  11. В диалоговом окне Сохранить как введите Form1 в поле Имя формы и нажмите кнопку ОК , чтобы сохранить форму Form1.

  12. Откройте Form1 в представлении формы.

  13. Нажмите кнопку Изменить первый день .

    Хотя для свойства элемента управления календарем задано FirstDay значение vbTuesday, в календаре среда выбирается первый день недели.

Ссылки

Дополнительные сведения о элементе управления календарем и свойствах элемента управления календарем откройте Mscal.hlp, а затем выполните поиск по соответствующему разделу. Mscal.hlp находится в следующих папках:

Microsoft Access 2002

Установочный диск: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

Установочный диск: \Program Files\Microsoft Office\Office11

Примечание.

Диск установки — это заполнитель для имени установочного диска.