12.10.2009

Календар, що завжди під рукою

Відповідь на запитання

Календар, що завжди під рукою

 

Шановна редакціє! У програмі «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 . Успішної роботи!