Календар, що завжди під рукою
Шановна редакціє! У програмі «1С:Бухгалтерія» можна вводити дати безпосередньо з календаря. Це дуже зручно, особливо коли працюєш на ноутбуку, де немає цифрової клавіатури. Хотілося б отримати таку ж можливість і в Excel. Підкажіть, як це зробити? Може, є якась функція? Дякую.
А. Солод, м. Харків
Відповідає
Микола КАРПЕНКО, канд. техн. наук, доцент кафедри прикладної математики та інформаційних технологій Харківської національної академії міського господарства
В Excel є будь-яка функція, що називається VBA (Visual Basic for Application). Visual Basic — це повноцінна, потужна мова програмування. Вона дозволяє реалізувати ті завдання, яких немає в «стандартному» наборі засобів пакета Excel. Зокрема, за допомогою VBA можна вирішити й вашу проблему. На жаль (або на щастя), іншого способу не існує. Принаймні мені він невідомий. Зауважу, що нічого страшного в цьому немає. Глибоке знання VBA нам не знадобиться. Достатньо зробити так, як це описано у статті, і все має вийти.
Отже, ми хочемо, щоб за певною командою чи комбінацією гарячих клавіш на робочому листі з’являвся календар. У ньому ми вказуємо дату, після чого ця дата потрапляє до поточної комірки. Перевага такої функції в тому, що дату вводити не потрібно, та й календар завжди під рукою. Що для бухгалтера, до речі, важливо! Приступимо:
1) відкриваємо файл або створюємо нову робочу книгу («
Ctrl+N»);2) входимо до меню «
Сервис → Макрос → Безопасность…». У вікні, що з’явилося, вибираємо варіант «Низкая». Без такої настройки макроси не працюватимуть;3) через меню «
Сервис → Макрос → Редактор Visual Basic…» відкриваємо редактор Visual Basic. Замість меню можна скористатися комбінацією «Alt+F11». На жаль, але тут доведеться перейти на англійську мову — меню редактора VBA не русифіковано;4) викликаємо меню «
Insert → UserForm». У робочій області Visual Basic з’явиться вікно форми з ім’ям «UserForm1» (рис. 1). Спочатку ця форма порожня. Разом з формою автоматично активується панель інструментів «ToolBox», зображена на рис. 1. Якщо вікно «ToolBox» не з’явилося, включіть його через меню «View → ToolBox»;У вікні «
ToolBox» є шістнадцять управляючих елементів: кнопки, списки, лічильники тощо. Нам потрібен елемент «Календарь», якого на панелі «ToolBox» поки що немає. Потрібно його додати;5) клацаємо правою кнопкою миші по вільній області на панелі «
ToolBox». З контекстного меню вибираємо «Additional Controls». З’явиться вікно, як показано на рис. 2;6) у ньому знаходимо елемент «
Календарь 12.0» (у деяких версія Excel він називається «Элемент управления Календарь»). Клацанням кнопки миші включаємо його (ставимо хрестик);7) у вікні «Additional Controls» натискуємо на «ОК». На панелі «ToolBox» з’явиться нова кнопка «Calendar» (рис. 1);
8) клацаємо по цій кнопці. Утримуючи натисненою ліву кнопку миші, малюємо календар на полі форми;
9) викликаємо меню «View → Code» (або натискуємо на «F7»), щоб перейти до створення тіла макроса;
10) з’явиться вікно для введення програми, до якого вводимо такий текст:
Private Sub Calendar1_Click()
ActiveCell = Calendar1.Value
ActiveCell.NumberFormat = "dd/mm/yy"
UserForm1.Hide
End Sub
Private Sub UserForm_Activate()
Me.Calendar1.Value = Date
End Sub
Важливо!
Перший та останній рядки цього тексту можна не вводити. Visual Basic запровадить їх у вікно з кодом програми автоматично. Вам залишається надрукувати буквально шість рядків.11) викликаємо меню «Insert → Module». З’явиться вікно для введення тексту програми;
12) до нього вводимо три рядки:
Sub ПоказКалендарь()
UserForm1.Show
End Sub
;13) закриваємо вікно редактора Visual Basic;
14) у вікні Excel викликаємо меню «Сервис → Макрос → Макросы» (або натискуємо на «Alt+F8»). З’явиться вікно, як показано на рис. 3;
15) у ньому вибираємо рядок з ім’ям «
ПоказКалендарь» та натискуємо на кнопку «Параметры»;16) у вікні «
Параметры макроса» вказуємо комбінацію клавіш для виклику нашої програми. У прикладі на рис. 3 це комбінація «Ctrl+К». Усе готово.Важливо!
При виборі поєднання гарячих клавіш стежте за мовою набору. У вікні на рис. 3 у комбінації «Ctrl+К» я ввів літеру «К» на російському регістрі. Тому для виклику календаря клавіатуру теж потрібно буде перемкнути на російську мову.Тепер можна побачити результат наших зусиль:
1) натискуємо на комбінацію «
Ctrl+К». На робочому листі з’явиться календар (рис. 4);2) клацанням миші вибираємо дату. Вона з’явиться в поточній комірці, а календар автоматично закриється.
Для тих, хто бажає додатково поекспериментувати з VBA, можу запропонувати поліпшений варіант макроса. Ось програма для форми:
Private Sub UserForm_Activate()
If Not IsEmpty(ActiveCell.Value) And IsDate(ActiveCell.Value) Then
Me.Calendar1.Value = ActiveCell.Value
Else
Me.Calendar1.Value = Date
End If
Me.Caption = "Сегодня — " & Date
End Sub
Private Sub Calendar1_Click()
ActiveCell = Me.Calendar1.Value
ActiveCell.NumberFormat = "dd/mm/yy"
UserForm1.Hide
End Sub
Private Sub Calendar1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
If KeyCode = 27 Then Unload Me
End Sub
.У цій версії програми календар можна закривати клавішею «
Esc». Якщо в поточній комірці записано дату, календар автоматично встановиться на цю дату. У заголовку вікна з календарем можна буде побачити поточну дату.І останнє. Щоб кожного разу не створювати наново програму виклику календаря, збережіть документ із макросом у вигляді шаблона «
Файл → Сохранить как…», зазначте тип файлу «Шаблон», ім’я та місце зберігання документа. Найзручніше зробити це в папці стандартних шаблонів Excel. Зазвичай це « x:\Documents and Settings\user\Application Data\Microsoft\Templates\». Тут «x» — диск, де знаходиться папка з шаблонами (звичайно це диск «С»). Рядок «user» — це ім’я, яке ви вказуєте при вході до системи Windows (ваш логін).Тепер ви зможете створювати документи на основі цього шаблону. Тобто заходите до меню «
Файл → Создать…», розкриваєте «Шаблоны на моем компьютере», знаходите шаблон з календарем та завантажуєте його до Excel. У створеній робочій книзі календар буде доступний.
Чекаю ваші запитання, зауваження та пропозиції на
bk@id.factor.ua, nictomkar@rambler.ru/ або на форумі редакції www.bk.factor.ua/forum . Успішної роботи!