Можно ли в Word сделать маленький календарик, который можно было бы вызывать по кнопке на панели инструментов? Наподобие такого, как в Excel или как в 1С?
Можно. В зарубежном интернете есть отличная статья Мартина Грина на эту тему (на тему календаря, а не 1С, конечно же): A Pop-up Calendar for Word.
Мартин разрешил мне воспользоваться его опытом и опубликовать эту статью на моем сайте. Но переводить всю статью не имеет смысла: она большая и подробная; я лишь изложу ее основные моменты. В итоге, мы должны получить примерно вот такой календарь:
Для тех, кто не хочет самостоятельно создавать календарь, в конце заметки я дам ссылку на шаблон с созданным по этой заметке календарем. Вам останется лишь загрузить его на свой компьютер.
Те же пользователи, кто работает с основном с таблицами Excel, могут найти аналогичную статью на сайте PlanetaExcel.ru.
Итак, приступим.
Во-первых, создайте пустой документ Word и сохраните его как шаблон под именем WordPopupCalendar.dot. Безусловно, можно создать календарь и в глобальном шаблоне Normal.dot, чтобы он был всегда доступен, но в этот раз мы создадим новый шаблон. В дальнейшем, это позволит вам передавать ваш шаблон с календарем своим друзьям и коллегам, а доступность календаря мы обеспечим размещением шаблона в папке автозагрузок редактора Word.
Далее, откройте редактор Visual Basic с помощью сочетания клавиш «Alt»+«F11». Появится пустое окно редактора. Нажмите клавишу «F7», чтобы перейти к окну кода.
Теперь мы должны создать сам календарь в виде появляющегося окошка. Для этого в меню Insert выберите команду UserForm. Откроется пустая форма диалогового окна с панелью инструментов Toolbox:
Щелкните по заголовку панели Toolbox. Скорее всего, на панели отсутствует иконка для создания календаря. В этом случае следует выбрать в меню Tools команду Additional Controls. Откроется диалоговое окно, в котором найдите и установите флажок у элемента Элемент управления Календарь 11.0, как на рисунке ниже:
Если у вас англоязычная версия редактора Word, то этот элемент будет называться Calendar Control 11.0 (номер зависит от версии редактора).
Щелкните указателем мыши на появившемся на панели Toolbox элементе Calendar и нарисуйте на форме квадрат, чтобы календарь занял всю форму. Впрочем, можете и уменьшить его размеры. Как вам будет угодно. Получится примерно так:
Теперь можно настроить свойства календаря, в частности, его внешний вид. Как вы можете видеть, календарь использует краткую форму вывода даты, что не очень красиво и удобно. Изменим это. В панели свойств (Properties - Calendar1) щелкните на правой ячейке строки (Custom):
Откроется диалоговое окно Property Pages. Измените в нем значения на те, которые показаны на скриншоте ниже, и нажмите кнопку Применить, а затем закройте окно:
Щелкните на заголовке формы, а затем в панели ее свойств измените значение строки (Name) "UserForm1" на значение "frmCalendar", а значение строки Caption "UserForm1" на значение "Календарь - Выберите дату". Заголовок нашей формы изменится.
Собственно, сам календарь уже готов. Но он практически бесполезен. Поэтому добавим календарю функцию выбора даты и вставки ее в документ.
Для начала установим возможность закрывать форму календаря по нажатию клавиши «Esc», как альтернативу кнопке в правом верхнем углу окна. Иногда это удобнее. Поместим прямо на календарь кнопку, выбрав ее с панели Toolbox (кнопка называется CommandButton). Кнопка сама по себе будет скрыта от пользователя, но на этапе разработки мы видим ее контуры.
В панели свойств кнопки (она должна быть в данный момент выделена у вас) измените значение строки (Name) "CommandButton1" на значение "cmdClose", а значение строки Cancel "false" на значение "True"
Дважды щелкните по контуру вашей кнопки (или нажмите клавишу «F7»), чтобы перейти в окно кода и между строками кода введите: Unload Me. Итоговый код должен выглядеть так:
Private Sub cmdClose_Click()
Unload Me
End Sub
Все, теперь форма будет закрываться, если пользователь нажмет клавишу «Esc».
Теперь напишем код для вставки выбранной даты в документ. Для этого в раскрывающемся списке панели свойств выберите строку Calendar1 Calendar:
Календарь будет выделен на форме (появится рамка). Дважды щелкните по ней мышью, чтобы перейти в окно кода к созданной процедуре. Введите между двумя существующими операторами следующий код:
Private Sub Calendar1_Click()
Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy") & " г. "
Selection.MoveRight Unit:=wdCharacter, Count:=1
Unload Me
End Sub
Этот код вствляет выбранную дату из календаря в место, где находится курсор ввода в документе, а затем курсор ввода перемещается на 1 символ вправо (для ввода пользователем следующего текста) и форма закрывается.
Чтобы при открытии календаря всегда отображалась текущая дата, ниже кода макроса Private Sub Calendar1_Click() вставьте следующий код:
Private Sub UserForm_Initialize()
Calendar1.Today
End Sub
Для того, чтобы календарь был доступен всегда, когда открывается документ (основанный на этом шаблоне), необходимо добавить в наш проект новый модуль и ввести соответствущий код. Для этого в меню Insert выберите команду Module. Новое (пустое) окно будет открыто в редакторе VB. Введите следующий код:
Sub OpenCalendar()
frmCalendar.Show
End Sub
Обязательно сохраните все изменения в макросе, нажав на кнопку Save на панели инструментов редактора Visual Basic.
Календарь готов и его можно протестировать. Для этого перейдите в окно редактора Word и нажмите сочетание клавиш «Alt»+«F8». Откроется диалоговое окно Макрос. Найдите в списке макросов созданный вами макрос OpenCalendar и нажмите кнопку Выполнить. Откроется наш календарь. Выберите в нем любую дату и щелкните по ней. Дата будет вставлена в документ, а форма календаря закроется.
Если вы работаете с редактором Word 2007, то все действия по созданию календаря будут аналогичными. Разница может быть лишь в размещении кнопки макроса на панель быстрого доступа либо добавления команды в контекстное меню (см.статью Как добавить свои команды в контекстное меню в Word 2007).
Как я и обещал, вы можете скачать шаблон "Календарь Word" (форма загрузки). Распакуйте шаблон и поместите его в папку автозагрузки Word, которая примерно находится по следующему адресу на вашем компьютере: C:\Documents and Settings\Application Data\Microsoft\Word\STARTUP\.
После открытия документа (создания документа) будет доступна новая панель инструментов с кнопкой вызова календаря.
Андрей, странно, так как там кода-то практически нет. Используется стандартный инструмент календаря. Полагаю, что проблема именно в локальной версии редактора, то как он получает системные данные (могу ошибаться).
Может быть кто-то из украинских пользователей подскажет решение, так как на русском все нормально?
Комментариев: 10
Уважаемый Антон,при попытке запустить календарь на украинском языке возникает две проблемы:
1. Название месяця - с заглавной буквы.
2. Название месяца в именительном падеже.
Т.е. вместо "16 жовтня" получаем "16 Жовтень". Как решить эту проблему? Очень хотелось бы пользоватся этой полезной функцией. Спасибо.
Андрей, странно, так как там кода-то практически нет. Используется стандартный инструмент календаря. Полагаю, что проблема именно в локальной версии редактора, то как он получает системные данные (могу ошибаться).
Может быть кто-то из украинских пользователей подскажет решение, так как на русском все нормально?
Пользователям ворд 2007 велосипед изобретать не нужно, там такая кнопка для панели быстрого запуска уже есть.
Почему нужно было написать некое " Рі. "?
У меня так и выводится "18 февраля 2010 Pi". Заменил "Пи" на "г."
Похоже, опечатка. Там, кстати, в коде ниже уже "г." приведен.
Работает на 2007-ом. Не определился ещё для себя насколько полезная, но уж точно интересная штука. Спасибо!
а можно ли использовать календарь не зарегистрировав ocx в системе?
Включите вкладку «Разработчик». Перейдите по ней: на панели элементов управления кнопка «выбор даты». Всё просто
Почему у меня нету Calendar Control, что делать??
Также нет Calendar Control