Випадає календар для введення дат

Наше завдання - додати в книгу Excel призначену для користувача форму (вікно) з автоматичним календарем. Ось таке:

Віконце буде з'являтися при натисканні клавіш і після вибору в ньому потрібної дати - вона потрапляє в поточну комірку аркуша. Просто і красиво!

Створіть в ньому нову порожню призначені для користувача форму, вибравши в меню Insert - User form.

Автоматично повинна з'явитися панель Toolbox.

Якщо не з'явилася - тисніть в меню View - Toolbox.

На цій панелі представлені різні керуючі елементи вікон: кнопки, списки, лічильники і т.д. Але нам потрібен елемент (календар), якого поки на панелі не видно. Щоб додати його, клацніть по сірому фону панелі правою кнопкою миші і виберіть Additional Controls. З'явиться ось таке вікно:

У ньому треба знайти і відзначити Елемент управління Календар 11.0 (Calendar Control 11.0). Версії можуть відрізнятися (11.0, 10.0 і т.д.) в залежності від версії Microsoft Office, це несуттєво. Після натискання на ОК на панелі з'явиться нова кнопка - Calendar.

Клацніть по ній, а потім намалюйте календар на поле форми, утримуючи ліву кнопку миші:

При бажанні подправьте розміри форми і календаря і введіть текст заголовка вікна в панелі властивостей зліва.

Тепер перейдіть в режим введення програмного коду створеної форми (меню View - Code) і скопіюйте туди цей текст:

Private Sub Calendar1_Click ()
ActiveCell = Calendar1.Value
ActiveCell.NumberFormat = "dd / mm / yy"
End Sub

Private Sub UserForm_Activate ()
Me.Calendar1.Value = Date
End Sub

Тепер треба змусити Excel показувати нам створену форму, коли ми цього захочемо. Для цього вставте новий модуль (Insert - Module) і скопіюйте туди цей текст:

Sub ShowCalendar ()
UserForm1.Show
End Sub

Якщо у Вас встановлена ​​не повна версія Office, то елементу управління Календар може не виявитися в списку Additional Controls. Тоді скачайте цей файл. помістіть його в папку C: \ Windows \ system32 і зареєструйте новий елемент управління через меню Пуск - Виконати. далі набрати Regsvr32 c: \ windows \ system32 \ mscal.ocx і натиснути ОК.

(За доповнення спасибі Vadim)

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
If Target.Cells.Count> 1 Then Exit Sub
If Not Application.Intersect (Range ( "A1: A20"), Target) Is Nothing Then
UserForm1.Show
End If
End Sub

Тепер при виділенні будь-якого елементу з діапазону А1: А20 календар буде автоматично відображатися на екрані.

НОВИНИ ФОРУМУ
Лицарі теорії ефіру

Схожі статті