Автоматическое заполнение интервала дат при открытии диалогового окна для выбора периода, а также при нажатии кнопок: «Сегодня», «Вчера», «Этот месяц», «Прошлый месяц», «Прошлый год» с помощью VBA Excel. Скачать файл с примером.
Диалоговое окно для выбора периода
Автоматическое заполнение интервала дат в VBA Excel рассмотрим на примере диалогового окна, прообраз которого использовался на практике для выбора периода формирования отчета о сданной выручке в разрезе торговых точек. Правда, кнопка выбора интервала дат была только для прошлого месяца, а открывалась форма с предзаполненными датами текущего месяца, остальные периоды устанавливались вручную, но ими почти не приходилось пользоваться.
Пример диалогового окна для выбора периода
Для вызова пользовательской формы используется вставленная на рабочий лист кнопка из панели «Элементы ActiveX». Расположить ее лучше на закрепленной верхней строке листа, чтобы кнопка не уезжала за пределы экрана при прокрутке.
Итак, перечислим названия объектов (элементов управления), которые будут задействованы в приведенных примерах кода:
- пользовательская форма (диалоговое окно выбора периода) — UserForm1;
- текстовое поле для ввода начальной даты — TextBox1;
- текстовое поле для ввода конечной даты — TextBox2;
- кнопка «Сегодня» — CommandButton1;
- кнопка «Вчера» — CommandButton2;
- кнопка «Текущий месяц» — CommandButton3;
- кнопка «Прошлый месяц»* — CommandButton4;
- кнопка «Прошлый год»** — CommandButton5;
- кнопка для вызова диалогового окна, расположенная на рабочем листе — Button1***.
*Выражение «Прошлый месяц» используется в значении «Предыдущий месяц».
**Выражение «Прошлый год» используется в значении «Предыдущий год».
***По-умолчанию кнопка на рабочем листе была создана с именем CommandButton1, но была изменена, чтобы отличалась по названию от кнопки «Сегодня».
Открытие диалогового окна с заполненным периодом
Код вызова пользовательской формы находится в модуле листа, которому принадлежит кнопка Button1. При ее нажатии происходит заполнение формы прошедшим интервалом текущего месяца (с первого числа месяца по текущую дату включительно) и отображение диалогового окна на экране.
1 2 3 4 5 6 7 |
Private Sub Button1_Click() With UserForm1 .TextBox1.Text = DateSerial(Year(Date), Month(Date), 1) .TextBox2.Text = Date .Show End With End Sub |
Присваивая значения выражений элементам TextBox, Excel по-умолчанию преобразует дату в текст, форматируя в соответствии с системными настройками, но можно применить и принудительное форматирование:
1 2 3 4 5 6 |
'в соответствии с системными настройками .TextBox1.Text = Format(DateSerial(Year(Date), Month(Date), 1), "Short Date") .TextBox2.Text = Format(Date, "Short Date") 'по заданному формату .TextBox1.Text = Format(DateSerial(Year(Date), Month(Date), 1), "dd.mm.yyyy") .TextBox2.Text = Format(Date, "dd.mm.yyyy") |
Кнопки для смены интервала дат
Теперь рассмотрим смену периода с помощью размещенных на пользовательской форме кнопок. Код расположен в модуле пользовательской формы.
Кнопка «Сегодня»
1 2 3 4 |
Private Sub CommandButton1_Click() TextBox1.Text = Date TextBox2.Text = Date End Sub |
Поля начальной и конечной дат заполняются значениями текущей даты.
Кнопка «Вчера»
1 2 3 4 |
Private Sub CommandButton2_Click() TextBox1.Text = Date - 1 TextBox2.Text = Date - 1 End Sub |
Поля начальной и конечной дат заполняются значениями прошедшей (вчерашней) даты.
Кнопка «Текущий месяц»
1 2 3 4 |
Private Sub CommandButton3_Click() TextBox1.Text = DateSerial(Year(Date), Month(Date), 1) TextBox2.Text = Date End Sub |
Поле начальной даты заполняется значением первого дня текущего месяца, а поле конечной — значением текущей даты.
Кнопка «Прошлый месяц»
1 2 3 4 |
Private Sub CommandButton4_Click() TextBox1.Text = DateSerial(Year(Date), Month(Date) - 1, 1) TextBox2.Text = DateSerial(Year(Date), Month(Date), 0) End Sub |
Поле начальной даты заполняется значением первого дня предыдущего месяца, а поле конечной — значением последнего дня предыдущего месяца.
Кнопка «Прошлый год»
1 2 3 4 |
Private Sub CommandButton5_Click() TextBox1.Text = DateSerial(Year(Date) - 1, 1, 1) TextBox2.Text = DateSerial(Year(Date) - 1, 12, 31) End Sub |
Поле начальной даты заполняется значением первого дня предыдущего года, а поле конечной — значением последнего дня предыдущего года.
Вы можете скачать файл с примером и протестировать на нем заполнение диалоговой формы различными интервалами дат. Форма закрывается нажатием на крестик, кнопки «OK» и «Отмена» неактивны. По аналогии с кнопкой «Прошлый год» можете добавить кнопку «Текущий год».
Здравствуйте ! подскажите а возможно ли применить это все к диапазону в столбце с датами
Здравствуйте, Дмитрий! Я правильно понял, что вы спрашиваете, можно ли выделить диапазон в столбце с датами и открыть форму с начальной и конечной датой этого диапазона?
Обсуждение закрыто.