Элемент управления пользовательской формы DTPicker (поле с календарем), предназначенный для выбора и ввода даты. Примеры кода VBA Excel с DTPicker.
UserForm.DTPicker – это элемент управления пользовательской формы, представляющий из себя отформатированное текстовое поле с раскрывающимся календарем, клик по выбранной дате в котором записывает ее в текстовое поле.
При вызове календаря пользовательская форма теряет фокус – это видно на изображении. При редактировании даты непосредственно в текстовом поле DTPicker, формат поля позволяет изменять элементы даты (день, месяц, год) по отдельности.
Чтобы перемещаться между элементами даты, необходимо, или выбирать элемент мышью, или нажимать любой знак разделителя («.», «,» или «/») на клавиатуре. А клик по знаку «+» или «-», соответственно, увеличит или уменьшит значение элемента даты на единицу.
Если в элемент «год» ввести однозначное число или двузначное число, не превышающее двузначный остаток текущего года, через пару секунд автоматически добавятся первые две цифры текущего столетия (20). Если вводимое двузначное число превысит двузначный остаток текущего года, автоматически добавятся первые две цифры прошлого столетия (19).
DTPicker – это сокращение от слова DateTimePicker, не являющегося в VBA Excel ключевым словом, как и DatePicker.
Добавление DTPicker на Toolbox
Изначально на панели инструментов Toolbox нет ссылки на элемент управления DTPicker, поэтому ее нужно добавить самостоятельно.
Чтобы добавить DTPicker на панель инструментов Toolbox, кликните по ней правой кнопкой мыши и выберите из контекстного меню ссылку «Additional Controls…»:
В открывшемся окне «Additional Controls» из списка дополнительных элементов управления выберите строку «Microsoft Date and Time Picker Control»:
Нажмите кнопку «OK» и значок элемента управления DTPicker появится на панели инструментов Toolbox:
Свойства поля с календарем
Свойство | Описание |
---|---|
CalendarBackColor | Заливка (фон) календаря без заголовка. |
CalendarForeColor | Цвет шрифта чисел выбранного в календаре месяца. |
CalendarTitleBackColor | Заливка заголовка календаря и фон выбранной даты. |
CalendarTitleForeColor | Цвет шрифта заголовка (месяц и год) и выбранного в календаре числа. |
CalendarTrailingForeColor | Цвет шрифта чисел предыдущего и следующего месяца. |
CheckBox | В значении True отображает встроенный в DTPicker элемент управления CheckBox. По умолчанию – False. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на DTPicker. |
CustomFormat | Пользовательский формат даты и времени. Работает, когда свойству Format присвоено значение dtpCustom (3). |
Day (Month, Year) | Задает или возвращает день (месяц, год). |
DayOfWeek | Задает или возвращает день недели от 1 до 7, отсчет начинается с воскресенья. |
Enabled | Возможность раскрытия календаря, ввода и редактирования даты/времени. True – все перечисленные опции включены, False – выключены (элемент управления становится серым). |
Font | Шрифт отображаемого значения в отформатированном поле элемента управления. |
Format | Формат отображаемого значения в поле элемента управления DTPicker, может принимать следующие значения: dtpCustom (3), dtpLongDate (0), dtpShortDate (1) (по умолчанию) и dtpTime (2). |
Height | Высота элемента управления DTPicker с нераскрытым календарем. |
Hour (Minute, Second) | Задает или возвращает часы (минуты, секунды). |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления. |
MaxDate | Максимальное значение даты, которое может быть выбрано в элементе управления (по умолчанию – 31.12.9999). |
MinDate | Минимальное значение даты, которое может быть выбрано в элементе управления (по умолчанию – 01.01.1601). |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой нажатием клавиш «Tab», «Enter». Отсчет начинается с нуля. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления. |
UpDown | Отображает счетчик вместо раскрывающегося календаря. True – отображается SpinButton, False – отображается календарь (по умолчанию). |
Value | Задает или возвращает значение (дата и/или время) элемента управления. |
Visible | Видимость поля с календарем. True – DTPicker отображается на пользовательской форме, False – DTPicker скрыт. |
Width | Ширина элемента управления DTPicker с нераскрытым календарем. |
DTPicker – это сокращение от слова DateTimePicker, не являющегося в VBA Excel ключевым словом, как и DatePicker.
Примеры кода VBA Excel с DTPicker
Программное создание DTPicker
Динамическое создание элемента управления DTPicker с помощью кода VBA Excel на пользовательской форме с любым именем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub UserForm_Initialize() Dim myDTPicker As DTPicker With Me .Height = 100 .Width = 200 ‘Следующая строка создает новый экземпляр DTPicker Set myDTPicker = .Controls.Add(«MSComCtl2.DTPicker», «dtp», True) End With With myDTPicker .Top = 24 .Left = 54 .Height = 18 .Width = 72 .Font.Size = 10 End With Set myDTPicker = Nothing End Sub |
Данный код должен быть размещен в модуле формы. Результат работы кода:
Применение свойства CustomFormat
Чтобы задать элементу управления DTPicker пользовательский формат отображения даты и времени, сначала необходимо присвоить свойству Format значение dtpCustom. Если этого не сделать, то, что бы мы не присвоили свойству CustomFormat, будет применен формат по умолчанию (dtpShortDate) или тот, который присвоен свойству Format.
В данном примере создается пользовательский формат для полей с календарем DTPicker1 и DTPicker2, размещенных на пользовательской форме, и отображаются в них текущие дата и время.
Private Sub UserForm_Initialize() With DTPicker1 .Format = dtpCustom .CustomFormat = «Год: yyyy; месяц: M; день: d» .Value = Now End With With DTPicker2 .Format = dtpCustom .CustomFormat = «Часы: H; минуты: m; секунды: s» .Value = Now End With End Sub |
Результат работы кода:
Таблица специальных символов и строк, задающих пользовательский формат даты и времени (регистр символов имеет значение):
Символы и строки | Описание |
---|---|
d | День месяца из одной или двух цифр. |
dd | День месяца из двух цифр. К числу из одной цифры впереди добавляется ноль. |
ddd | Сокращенное название дня недели из двух символов (Пн, Вт и т.д.). |
dddd | Полное название дня недели. |
h | Час из одной или двух цифр в 12-часовом формате. |
hh | Час из двух цифр в 12-часовом формате. К часу из одной цифры впереди добавляется ноль. |
H | Час из одной или двух цифр в 24-часовом формате. |
HH | Час из двух цифр в 24-часовом формате. К часу из одной цифры впереди добавляется ноль. |
m | Минута из одной или двух цифр. |
mm | Минута из двух цифр. К минуте из одной цифры впереди добавляется ноль. |
M | Месяц из одной или двух цифр. |
MM | Месяц из двух цифр. К месяцу из одной цифры впереди добавляется ноль. |
MMM | Сокращенное название месяца из трех символов. |
MMMM | Полное название месяца. |
s | Секунда из одной или двух цифр. |
ss | Секунда из двух цифр. К секунде из одной цифры впереди добавляется ноль. |
y | Год из одной или двух последних цифр. |
yy | Год из двух последних цифр. |
yyyy | Год из четырех цифр. |
Создание границ интервала дат
Простенький пример, как задать интервал дат с начала месяца до текущего дня с помощью двух элементов управления DTPicker:
Private Sub UserForm_Initialize() DTPicker1.Value = Now DTPicker1.Day = 1 DTPicker2.Value = Now End Sub |
Результат работы кода, запущенного 23.11.2020:
DTPicker – это сокращение от слова DateTimePicker, не являющегося в VBA Excel ключевым словом, как и DatePicker.
{quote}{login=Tatyana Ivanova}{date=22.11.2011 06:06}{thema=Как установить DTPicker на другом компьютере?}{post}При переносе файла с W7 на Windows Datacenter Server перестал находиться DTPicker. В Tools — References рядом с библиотекой MS Windows Common Control галка стоит, «missing» нет.
Что можно сделать? Что лучше для ввода даты использовать, чтобы при переносе проблем не было?{/post}{/quote}
Я делал так:
Установил Microsoft Date & Time Picker по следующей инструкции с сайта:
http://social.msdn.microsoft.com/Forums/en/exceldev/thread/c7ccebe5-5d7f-4fb2-ae16-1438e0e736a4
Other than having to give a user these type of instructions (assuming they’re correct):
How to install ‘Microsoft Date & Time Picker’ if it’s missing:
* Download MSCOMCT2.OCX
http://activex.microsoft.com/controls/vb6/MSCOMCT2.CAB
* Save downloaded file in relevant directory:
For Windows 95, 98, or ME:
c:windowssystem
For Windows NT or 2000:
c:WINNTsystem32
For Windows XP or 7:
c:windowssystem32
* Register the library file:
eg: Start > Run > regsvr32 windowssystem32MSCOMCT2.OCX
For Windows 95, 98, or ME:
regsvr32 windowssystemMSCOMCT2.OCX
For Windows NT or 2000:
regsvr32 WINNTsystem32MSCOMCT2.OCX
For Windows XP or 7:
regsvr32 windowssystem32MSCOMCT2.OCX
You should see a message saying «DllRegisterServer … succeeded»
Может поможет!
3 / 3 / 0 Регистрация: 28.12.2009 Сообщений: 41 |
|
1 |
|
28.12.2009, 23:21. Показов 36664. Ответов 12
Доброго времени суток!
0 |
134 / 79 / 6 Регистрация: 06.04.2009 Сообщений: 192 |
|
29.12.2009, 06:51 |
2 |
Проверьте, есть ли в каталоге WindowsSystem32 библиотека mscomct2.ocx. Если нет — поищите на другом компе с установленным офиссом, можно более крутым и скопируйте. После этого, в VBA — Tools — References установить птицу на Microsoft Windows Common Controls-2 6.0(SP4). После этого, в Additional control поставить птицу на MS Date & Time Picker. Всё!
0 |
3 / 3 / 0 Регистрация: 28.12.2009 Сообщений: 41 |
|
29.12.2009, 08:26 [ТС] |
3 |
После этого, в VBA — Tools — References установить птицу на Microsoft Windows Common Controls-2 6.0(SP4). Файл скопировал, но у меня нет в References пункта Microsoft Windows Common Controls-2 6.0(SP4). %(
0 |
0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
|
29.12.2009, 13:14 |
4 |
После переустановки системы и офиса при открытии формы в VBA ругается, что некоторые элементы не могут быть отображены и открывает форму без DTPicker’ов. В прошлый раз Вы устанавливали Access в составе Office — поэтому был и DTPicker, библиотека с которым устанавливается именно при полной установке Access. В этот раз, видимо, Вы решили обойтись без Access… В стандартной установке ни в 2003 ни в 2007 календаря нет, надо дополнительно в опциях установки Access ставить галку на элементе управления календарь Можете попробовать «альтернативный» календарь: http://excelvba.ru/Screenshots… -12-14.JPG Или такую его версию: http://excelvba.ru/Screenshots… -06-07.JPG Файл скопировал, но у меня нет в References пункта Microsoft Windows Common Controls-2 6.0(SP4). После копирования файла его необходимо зарегистрировать: Жмём Пуск — Выполнить
0 |
134 / 79 / 6 Регистрация: 06.04.2009 Сообщений: 192 |
|
29.12.2009, 15:20 |
5 |
В стандартной установке ни в 2003 ни в 2007 календаря нет, надо дополнительно в опциях установки Access ставить галку на элементе управления календарь Я никогда не ставлю Access, в связи с отсутствием необходимости в нём, библиотеку копирую, дальше по описанному сценарию. Необходимости регистрации тоже ни разу не было. Правда, я использую 2000 офис.
0 |
3 / 3 / 0 Регистрация: 28.12.2009 Сообщений: 41 |
|
29.12.2009, 17:37 [ТС] |
6 |
В прошлый раз Вы устанавливали Access в составе Office — поэтому был и DTPicker, библиотека с которым устанавливается именно при полной установке Access. В этот раз, видимо, Вы решили обойтись без Access… Можете попробовать «альтернативный» календарь: Или такую его версию: После копирования файла его необходимо зарегистрировать: Жмём Пуск — Выполнить Спасибо! Заработало! А что это за утилитка такая regsvr32? Расскажите или линк, плиз, киньте. Что это такое, для чего нужно и параметры командной строки. Заранее благодарен.
1 |
0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
|
30.12.2009, 07:10 |
7 |
Сообщение было отмечено как решение РешениеЛинк нужен? Пожалуйста … Средство Regsvr32 (Regsvr32.exe) предназначено для регистрации и отмены регистрации элементов управления OLE, например автоматически регистрируемых DLL- или OCX-файлов. regsvr32 Данная команда регистрирует в реестре файлы .dll как компоненты команды. Синтаксис regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname Параметры /u Отменяет регистрацию сервера. dllname Задает имя файла dll для последующей регистрации.
0 |
3 / 3 / 0 Регистрация: 28.12.2009 Сообщений: 41 |
|
30.12.2009, 09:25 [ТС] |
8 |
Спасибо!
0 |
134 / 79 / 6 Регистрация: 06.04.2009 Сообщений: 192 |
|
30.12.2009, 15:55 |
9 |
«альтернативный» календарь EducatedFool, Вы это сами создали? Это круто!!!
0 |
0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
|
31.12.2009, 07:04 |
10 |
EducatedFool, Вы это сами создали? Не, это не моя работа. Поначалу я пользовался DTPicker-ами, но при переносе файла на другой комп приходится таскать вместе с файлом бибилиотеку Common Controls (или какую-то другую, не помню уже), а потом ещё и регистрировать её. Раньше я так и делал (свой файл сопровождал инсталлятором), пока не встретил реализацию календаря от Avsha.
0 |
4 / 4 / 0 Регистрация: 23.11.2009 Сообщений: 53 |
|
05.10.2010, 15:33 |
11 |
После этого, в Additional control Ребят не подскажите где именно находиться Additional control
0 |
134 / 79 / 6 Регистрация: 06.04.2009 Сообщений: 192 |
|
06.10.2010, 21:23 |
12 |
Ребят не подскажите где именно находиться Additional control Запускаем редактор VBA, п. меню View->Toolbox, на вкладке Controls кликаем ПКМ — результат на лице…
1 |
3 / 3 / 0 Регистрация: 28.12.2009 Сообщений: 41 |
|
19.07.2011, 17:05 [ТС] |
13 |
А как «возродить» этот элемент в MSO 2007?
0 |
Do you need a DatePicker Calendar in your Excel spreadsheets? Follow this quick and simple tutorial to find out how. (If you prefer video, scroll down to the bottom of the page!)
Step 1. Enable Developer Mode in Excel
- File
- Options
- Customize Ribbon
- Ensure Developer checkbox is enabled
[sibwp_form id=100]
Step 2. Setup DateTime Control box
- Microsoft Date and Time Picker Control
- Click on random cell to place control box
- Edit or remember the name box of the DateTime Picker, in this case, we will leave it as DatePicker1
- Right click on DateTime Control box
- DTPicker Object
- Properties
- Enable CheckBox
Step 3. Copy the Visual Basic code
To assign column A as a DatePicker, copy the following code:
Code language: PHP (php)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Sheet1.DTPicker1 .Height = 20 .Width = 20 If Not Intersect(Target, Range("A:A")) Is Nothing Then .Visible = True .Top = Target.Top .Left = Target.Offset(0, 1).Left .LinkedCell = Target.Address Else .Visible = False End If End With End Sub
- Right click the DateTime Control box
- View Code
- Replace all of the existing code with the code from above
- Close the Visual Basic editor
- Deselect Design Mode
- Click on any cell to remove DateTime Control box
- Click on any cell in Column A to add a Date
Congratulations!
Important: Make sure that when you save the spreadsheet, you “Save As: Macro enabled workbook”
How to have multiple columns with DatePickers
The above steps only work for single columns, or columns that are right next to each other. If you wanted the DatePicker column to be in column B instead, then you would change the line
Code language: JavaScript (javascript)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
to
Code language: JavaScript (javascript)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Or if you wanted it from Column E to Column G, then you would change that line to
Code language: JavaScript (javascript)
If Not Intersect(Target, Range("E:G")) Is Nothing Then
However, if you need a DatePicker in two or more non-adjacent columns, then you will need a separate DatePicker (each with a separate name in the Name Box) for each non-adjacenet group. For example, let’s say we need column A, B, E, F, and H to all be DatePickers. We would need to perform the above steps 3 separate times for 3 separate DatePickers.
- 1 for columns A, B
- 1 for columns E, F
- 1 for column H
The steps will be very similar, but the code will be:
Code language: PHP (php)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Sheet1.DTPicker1 .Height = 20 .Width = 20 If Not Intersect(Target, Range("A:B")) Is Nothing Then .Visible = True .Top = Target.Top .Left = Target.Offset(0, 1).Left .LinkedCell = Target.Address Else .Visible = False End If End With With Sheet1.DTPicker2 .Height = 20 .Width = 20 If Not Intersect(Target, Range("E:F")) Is Nothing Then .Visible = True .Top = Target.Top .Left = Target.Offset(0, 1).Left .LinkedCell = Target.Address Else .Visible = False End If End With With Sheet1.DTPicker3 .Height = 20 .Width = 20 If Not Intersect(Target, Range("H:H")) Is Nothing Then .Visible = True .Top = Target.Top .Left = Target.Offset(0, 1).Left .LinkedCell = Target.Address Else .Visible = False End If End With End Sub
Important legal notice: This post contains affiliate links. We are compensated for many of our product recommendations. Pragmatic Ways is a participant in the Amazon Associates affiliate program, as well as other affiliate programs. While we are always careful to only recommend the products we use and recommend, we want to be open and transparent about our relationship with companies we recommend.
Adam Allard
Hi, I’m Adam Allard. I’m a Full Stack Software Engineer for Northrop Grumman creating web applications for the DoD. At this time I’m primarily working with Java and Angular based applications, although I have some years of experience in various languages and frameworks from previous jobs where I dabbled with Python & Django, C# & Xamarin, PHP, and Bootstrap. My hobbies include time with my family, wondering when the Green Bay Packers will win their next Super Bowl, drinking over-priced beer, and of course learning and teaching.
Recent Posts
Unit Conversions
The tables below are all the unit conversion factors used in the Unit Converter App tutorial, where we walked through together building out a JavaFX and SceneBuilder interface.
Click here to…
How to add JavaFX to Eclipse (the easy way)
Step 1. Download JavaFX
Go to https://gluonhq.com/products/javafx/ and download the appropriate SDK for your operating system. Make sure you download the SDK and make sure you choose the correct…
@chamiralakmal
Doesn’t the calendar control also work?
The control element «Microsoft MonthView Control 6.0 (SP4) can also not be found under other controls. The nice thing about the Date and Time Picker is that you can provide a date input field with little effort, which always delivers a date as the result.
Display the form in the VB editor;
under Extras / Additional Controls … check the entry ‘Microsoft Date and Time Picker Control’;
Drag the new ‘DTPicker’ icon from the toolbox into the form.
Insert a date picker
https://support.microsoft.com/en-us/office/insert-a-date-picker-afa0aea0-d4e3-4424-8e0a-c08f65928f84…
Which Excel version of 365 do you have? … and which operating system? … if it doesn’t work
and you would like to give us feedback (which I would be happy, especially if it works please specify.
Thank you for your patience and time.
Nikolino
I know I don’t know anything (Socrates)
* Kindly Mark and Vote this reply if it helps please, as it will be beneficial to more Community members reading here.