Календарь, который всегда под рукой
Уважаемая редакция! В программе «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 . Удачной работы!