Progress-servis55.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba календарь

Excel vba календарь

Выпадающий календарь для ввода дат

Наша задача — добавить в книгу Excel пользовательскую форму (окно) с автоматическим календарем. Вот такое:

Окошко будет появляться при нажатии сочетания клавиш и после выбора в нем нужной даты — она попадает в текущую ячейку листа. Просто и красиво!

Откройте редактор Visual Basic через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor).

Создайте в нем новую пустую пользовательску форму, выбрав в меню 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

Осталось закрыть редактор Visual Basic и, вернувшись в Excel, назначить созданному макросу ShowCalendar любое подходящее сочетание клавиш (меню Сервис — Макрос — Макросы — кнопка Параметры ).

Если у Вас установлена не полная версия Office, то элемента управления Календарь может не оказаться в списке Additional Controls . Тогда скачайте этот файл (MSCal.ocx.zip) , поместите его в папку C:Windowssystem32 и зарегистрируйте новый элемент управления через меню Пуск — Выполнить , далее набрать Regsvr32 c:windowssystem32mscal.ocx и нажать ОК .

(За дополнение спасибо Vadim )

Если Вы хотите, чтобы календарь автоматически появлялся на экране, когда пользователь выделяет определенные ячейки (диапазон) на листе, то щелкните правой кнопкой мыши по ярлычку этого листа и выберите Исходный текст (View Source). В открывшееся окно редактора Visual Basic скопируйте следующий код:

Читать еще:  Excel случайное число в диапазоне

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 календарь будет автоматически отображаться на экране.

Всплывающий календарь

Если вам часто приходится вводить даты в ячейки листа, то делать это вручную неудобно. Для ввода именно сегодняшней даты можно воспользоваться функцией СЕГОДНЯ (TODAY), сочетанием клавиш Ctrl+; или макросом, но если нужны разные даты из прошлого или будущего, то вбивать их руками долго.

К сожалению, в стандартном арсенале средств Excel нет встроенного выпадающего календаря (в отличие от Word), да еще и в последних версиях, начиная с Excel 2007, Microsoft зачем-то убрала из стандартного комплекта поставки библиотеку mscalc.osx, которая позволяла быстро создать пользовательскую форму с календарем.

Естественно, это «узкое место» не осталось без внимания опытных пользователей и экспертов Excel MVP, которые оперативно создали несколько интерактивных календарей на макросах для удобного ввода дат. Вот подборка неплохих, на мой взгляд, бесплатных вариантов:

Windows Date Picker
Автор: Ron de Bruin
Цена: бесплатно
Ссылка

  • Устанавливается как надстройка (есть версии для старых Excel 200-2003 и для новых Excel 2007-2010 и, отдельно, для Excel 2013.
  • Вызывается через контекстное меню ячейки (правой кнопкой мыши по ячейке — Date Picker).
  • Позволяет вставлять дату в нескольких форматах, вплоть до номера недели (по разным стандартам).
  • Автоматически подстраивается под российский стандарт недели (с понедельника).

Excel Date Picker
Автор: Jim Cone
Цена: бесплатно
Ссылка

  • Макрос (не надстройка!) с открытым кодом VBA — можно посмотреть как всё устроено и модернизировать «под себя». Но надо копировать код в каждый используемый файл и вызывать нажатием на кнопку или сочетанием клавиш, т.е. универсальность хромает.
  • Удобная система прокрутки лет и месяцев.
  • Российскую неделю (с понедельника) знает.
  • Каких-либо настроек нет.
Mini Calendar and Date Picker
Автор: VERTEX
Цена: бесплатно.
Ссылка в Office Apps Store

  • Работает только в Excel 2013, добавляется через магазин приложений Office App Store на вкладке Вставка — Приложения для Office (Insert — Office Apps Store).
  • Вставляется на лист как постоянный графический объект и добавляет выбранную дату в любую выделенную предварительно ячейку.
  • Умеет менять стандарты недели, отображать номера недель, вводить не только дату, но и время.
  • Есть возможность задавать темы оформления.
  • Нет кнопки перехода к текущему дню.
Date Picker
Автор: Sam Radakovitz, руководитель команды программистов Excel в Microsoft
Цена: бесплатно
Сайт автора умер, ссылки не работают, но можно скачать заботливо сохраненную мной когда-то копию здесь.

  • Устанавливается как надстройка.
  • Вызывается через правую кнопку мыши по ячейке — Pick from calendar или с помощью удобного всплывающего значка календарика справа от ячейки с датой.
  • Красивый дизайн, отображение количества дней до выбранной даты от текущей.
  • Использует USA-стандарт недели (отображает неделю с воскресенья).
  • Настроек нет.
  • в Excel 2003 и старше — меню Сервис — Надстройки — Обзор (Tools — Add-ins — Browse)
  • в Excel 2007 и новее — Файл — Параметры — Надстройки — Перейти — Обзор (File — Options — Add-ins — Go To — Browse)

How to add Calendar, Date-Picker?

I need to add a Calendar Date Picker in Excel 2013.

I found that the MonthView and the DT Picker are no longer in the ActiveX menu and the links for a CAB file that supposedly contains these does not work. There are instruction documents, but they rely on a control that doesn’t exist.

I have an Excel Addin that does what I want, but I want to do this with VBA rather than install the Addin on every machine that will use this.

4 Answers 4

Once you have registered the mscomct2.ocx control (YOU WILL NEED TO REGISTER THIS FILE ON ALL COMPUTERS THAT WILL USE THIS WORKBOOK!), you can either add one of below controls in the Worksheet or in a UserForm:

  • Date and Time Picker (DTPicker), left/top of screenshots
  • MonthView, right/bottom of screenshots

WORKSHEET (ActiveX)

  1. In Developer tab, Controls group, click Insert, then bottom right button for More Controls.
  2. Scroll down and select Microsoft Date and Time Picker Control 6.0 (SP6) or Microsoft MonthView Control 6.0 (SP6) then click OK.
    |
  3. When you are out of Design Mode, clicking on the DTPicker control is like this, while the MonthView takes more space:
    |

UserForm

  1. In the Toolbox for the UserForm selected, right click on empty space of the Controls tab, click Additional Controls
  2. Scroll down and tick Microsoft Date and Time Picker Control 6.0 (SP6) or Microsoft MonthView Control 6.0 (SP6):
    |
  3. Now the controls are in your Controls tab to add on UserForms
  4. Default size of the controls on UserForm:

In either way, you will need to implement the actions when you click on these controls.

Excel vba календарь

На этом шаге мы рассмотрим основные свойства и методы этого элемента управления .

Среди дополнительных элементов управления очень полезным является элемент управления Calendar (Календарь) (рисунок 1).

Рис.1. Календарь на форме

Этот объект представляет средство для организации удобного интерфейса по вводу дат. Этот элемент управления располагается на форме с помощью кнопки Календарь (Calendar) .

Перечислим основные свойства элемента управления Calendar .

Таблица 1. Основные свойства Calendar
СвойствоНазначение
DayВозвращает выбранный день
DayFont, DayFontColorУстанавливают шрифт и цвет шрифта для названий дней недели
DayLenghtДопустимые значения:

  • Длинный (Long) (отображаются полные названия дней);
  • Средний (Medium) (в русской версии — отображаются две буквы из названий дней, в английской -три буквы);
  • Короткий (Short) (отображается только по первой букве из названия дня).

FirstDayПервый день недели. Допустимые значения от Воскресенье (Sunday) до Суббота (Saturday)
MonthВозвращает выбранный месяц
MonthLenghtДопустимые значения: Длинный (Long) (отображаются полные названия месяца) и Короткий (Short) (отображаются только первые три буквы из названия месяца)
ShowDaysДопустимые значения: True (отображаются названия дней недели) и False (в противном случае)
ShowDataselectedДопустимые значения: True (отображается выбранная дата в верхней части календаря) и False (в противном случае)
ValueВозвращает выбранную дату
YearВозвращает выбранный год

Перечислим основные методы элемента управления Calendar .

Таблица 2. Основные методы Calendar
МетодНазначение
NextDay, NextWeek, NextMonth и NextYearУстанавливает следующий день, неделю, месяц и год
PreviousDay, PreviousWeek, PreviousMonth и PreviousYearУстанавливает предыдущий день, неделю, месяц и год
TodayУстанавливает текущую дату в календаре

В качестве примера использования календаря приведем следующую процедуру, которая считывает из календаря выбранную дату и вводит ее в ячейку рабочего листа:

Результат работы процедуры приведен на рисунке 2.

Рис.2. Отображение выбранной даты в ячейке

На следующем шаге мы рассмотрим определение последовательности выбора элементов управления .

Ссылка на основную публикацию
Adblock
detector