Элемент управления Календарем (Майкрософт) 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, не связаны с правильным значением дня.
Обходной путь
Чтобы обойти эту проблему, выполните следующие действия:
Определите связь между днями, внутренними константами VBA и числовыми значениями, связанными с правильными значениями дня и внутренними константами VBA. Для этого выполните следующие действия:
Запустите Access.
Откройте пример базы данных Northwind.
В окне База данных щелкните Формы в разделе Объекты.
Примечание.
В Access 2007 откройте вкладку Создать , а затем выберите Конструктор формы в группе Формы .
В правой области дважды щелкните Создать форму в режиме конструктора.
Примечание.
В Access 2007 пропустите этот шаг.
В меню Вставка выберите Элемент ActiveX.
Примечание.
В Access 2007 откройте вкладку Конструктор, а затем в группе Элементы управления щелкните Вставить элемент ActiveX.
В диалоговом окне Вставка элемента ActiveX Control выберите Элемент управления Календарем 10.0 или более поздней версии в списке Выбор элемента ActiveX , а затем нажмите кнопку ОК.
Добавьте кнопку команды в форму с заданными свойствами следующим образом:
Свойство Значение Name
testFD Caption
Изменить первый день В меню Файл выберите пункт Сохранить.
Примечание.
В Access 2007 нажмите кнопку Microsoft Office и нажмите кнопку Сохранить.
В диалоговом окне Сохранить как введите Form1 в поле Имя формы и нажмите кнопку ОК , чтобы сохранить форму Form1.
В меню Вид выберите код.
Примечание.
В Access 2007 перейдите на вкладку Конструктор , а затем выберите Пункт Просмотр кода в группе Сервис .
В Редактор Visual Basic введите или вставьте следующий код:
Option Compare Database Private Sub testFD_Click() Calendar0.FirstDay = vbTuesday End Sub
Откройте Form1 в представлении формы.
Нажмите кнопку Изменить первый день .
Примечание.
Если для первого столбца элемента управления календарем не задано значение вторник, обратите внимание на день в первом столбце.
В Редактор Visual Basic в меню Вид щелкните Окно интерпретации.
В окне Интерпретация введите ?vbTuesday и нажмите клавишу ВВОД.
Обратите внимание на числовое значение.
Повторите шаг j через шаг o, заменив vbTuesday другими встроенными константами VBA, такими как vbMondayи vbWednesday.
Обратите внимание, что в следующей таблице показана связь между днями, внутренними константами VBA и числовыми значениями, связанными с правильными значениями дня и внутренними константами VBA.
День недели Встроенная константа VBA Связанное числовое значение Понедельник vbSunday 1 Вторник vbMonday 2 Среда vbTuesday 3 Четверг vbWednesday 4 Пятница vbThursday 5 Суббота vbFriday 6 Воскресенье vbSaturday 7
Создайте глобальное настраиваемое перечисление, которое правильно сопоставлено с днями недели. Для этого выполните следующие действия:
В окне База данных в разделе Объекты щелкните Модуль.
Примечание.
В Access 2007 откройте вкладку Создать , щелкните стрелку в разделе Макрос в группе Другие , а затем — Модуль.
В меню Вставка выберите пункт Модуль.
Примечание.
В Access 2007 пропустите этот шаг.
Введите или вставьте следующий код в Редактор Visual Basic:
Option Explicit Public Enum nwFirstDay nwMonday = 1 nwTuesday = 2 nwWednesday = 3 nwThursday = 4 nwFriday = 5 nwSaturday = 6 nwSunday = 7 End Enum
Примечание.
Создайте перечисление, как описано в столбце "День недели" и в соответствующем столбце "Связанное числовое значение" таблицы, которая находится на шаге 1r.
Присвойте Day_Association модуля имя и сохраните его.
Закройте редактор Visual Basic.
Замените встроенные константы VBA в приложении константами, которые находятся в пользовательском перечислении, описанном на шаге 2.
Например, если исходный код имеет значение
Calendar0.FirstDay = vbTuesday
измените код, чтобы использовать пользовательское перечисление следующим образом:
Calendar0.FirstDay = nwTuesday
Запустите приложение.
Дополнительные сведения
Внутренние константы VBA не зависят от локальной информации системы. Например, на компьютере с локализованной операционной системой на немецком языке первый день недели — понедельник. Числовое значение, связанное с понедельником на компьютере, всегда равно 0.
Так как элемент управления Calendar 10.0 или более поздней версии является мировым элементом Управления Microsoft ActiveX, вы не можете управлять числовыми значениями, связанными с встроенными константами VBA на основе спецификаций компьютера. Поэтому возникает проблема, описанная в разделе "Симптомы" этой статьи.
Действия по воспроизведению проблемы
Запустите Access.
Откройте пример базы данных Northwind.
В окне База данных щелкните Формы в разделе Объекты.
Примечание.
В Access 2007 откройте вкладку Создать , а затем выберите Конструктор формы в группе Формы .
В правой области дважды щелкните Создать форму в режиме конструктора.
Примечание.
В Access 2007 пропустите этот шаг.
В меню Вставка выберите Элемент ActiveX.
Примечание.
В Access 2007 откройте вкладку Конструктор, а затем в группе Элементы управления щелкните Вставить элемент ActiveX.
В диалоговом окне Вставка элемента ActiveX Control выберите Элемент управления Календарем 10.0 или более поздней версии в списке Выбор элемента ActiveX , а затем нажмите кнопку ОК.
Добавьте кнопку команды в форму с заданными свойствами следующим образом:
Свойство Значение Name
testFD Caption
Изменить первый день В меню Вид выберите код.
Примечание.
В Access 2007 перейдите на вкладку Конструктор , а затем выберите Пункт Просмотр кода в группе Сервис .
В Редактор Visual Basic введите или вставьте следующий код:
Option Compare Database Private Sub testFD_Click() Calendar0.FirstDay = vbTuesday End Sub
В меню Файл выберите пункт Сохранить.
Примечание.
В Access 2007 нажмите кнопку Microsoft Office и нажмите кнопку Сохранить как.
В диалоговом окне Сохранить как введите Form1 в поле Имя формы и нажмите кнопку ОК , чтобы сохранить форму Form1.
Откройте Form1 в представлении формы.
Нажмите кнопку Изменить первый день .
Хотя для свойства элемента управления календарем задано
FirstDay
значение vbTuesday, в календаре среда выбирается первый день недели.
Ссылки
Дополнительные сведения о элементе управления календарем и свойствах элемента управления календарем откройте Mscal.hlp, а затем выполните поиск по соответствующему разделу. Mscal.hlp находится в следующих папках:
Microsoft Access 2002
Установочный диск: \Program Files\Microsoft Office\Office10
Microsoft Office Access 2003
Установочный диск: \Program Files\Microsoft Office\Office11
Примечание.
Диск установки — это заполнитель для имени установочного диска.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по