Перейти к содержимому

VBA Excel. Автоматическое заполнение интервала дат (периода)

Автоматическое заполнение интервала дат при открытии диалогового окна для выбора периода, а также при нажатии кнопок: «Сегодня», «Вчера», «Этот месяц», «Прошлый месяц», «Прошлый год» с помощью VBA Excel. Скачать файл с примером.

  1. Диалоговое окно для выбора периода
  2. Кнопки для смены интервала дат

Диалоговое окно для выбора периода

Автоматическое заполнение интервала дат в VBA Excel рассмотрим на примере диалогового окна, прообраз которого использовался на практике для выбора периода формирования отчета о сданной выручке в разрезе торговых точек. Правда, кнопка выбора интервала дат была только для прошлого месяца, а открывалась форма с предзаполненными датами текущего месяца, остальные периоды устанавливались вручную, но ими почти не приходилось пользоваться.

Пример диалогового окна для выбора периода

Диалоговое окно выбора периода
Диалоговое окно для выбора периода

Для вызова пользовательской формы используется вставленная на рабочий лист кнопка из панели «Элементы ActiveX». Расположить ее лучше на закрепленной верхней строке листа, чтобы кнопка не уезжала за пределы экрана при прокрутке.

Итак, перечислим названия объектов (элементов управления), которые будут задействованы в приведенных примерах кода:

  • пользовательская форма (диалоговое окно выбора периода) - UserForm1;
  • текстовое поле для ввода начальной даты - TextBox1;
  • текстовое поле для ввода конечной даты - TextBox2;
  • кнопка «Сегодня» - CommandButton1;
  • кнопка «Вчера» - CommandButton2;
  • кнопка «Текущий месяц» - CommandButton3;
  • кнопка «Прошлый месяц»* - CommandButton4;
  • кнопка «Прошлый год»** - CommandButton5;
  • кнопка для вызова диалогового окна, расположенная на рабочем листе - Button1***.

*Выражение «Прошлый месяц» используется в значении «Предыдущий месяц».
**Выражение «Прошлый год» используется в значении «Предыдущий год».
***По-умолчанию кнопка на рабочем листе была создана с именем CommandButton1, но была изменена, чтобы отличалась по названию от кнопки «Сегодня».

Открытие диалогового окна с заполненным периодом

Код вызова пользовательской формы находится в модуле листа, которому принадлежит кнопка Button1. При ее нажатии происходит заполнение формы прошедшим интервалом текущего месяца (с первого числа месяца по текущую дату включительно) и отображение диалогового окна на экране.

Private Sub Button1_Click()
  With UserForm1
    .TextBox1.Text = DateSerial(Year(Date), Month(Date), 1)
    .TextBox2.Text = Date
    .Show
  End With
End Sub

Присваивая значения выражений элементам TextBox, Excel по-умолчанию преобразует дату в текст, форматируя в соответствии с системными настройками, но можно применить и принудительное форматирование:

'в соответствии с системными настройками
.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")

Кнопки для смены интервала дат

Теперь рассмотрим смену периода с помощью размещенных на пользовательской форме кнопок. Код расположен в модуле пользовательской формы.

Кнопка «Сегодня»

Private Sub CommandButton1_Click()
TextBox1.Text = Date
TextBox2.Text = Date
End Sub

Поля начальной и конечной дат заполняются значениями текущей даты.

Кнопка «Вчера»

Private Sub CommandButton2_Click()
TextBox1.Text = Date - 1
TextBox2.Text = Date - 1
End Sub

Поля начальной и конечной дат заполняются значениями прошедшей (вчерашней) даты.

Кнопка «Текущий месяц»

Private Sub CommandButton3_Click()
TextBox1.Text = DateSerial(Year(Date), Month(Date), 1)
TextBox2.Text = Date
End Sub

Поле начальной даты заполняется значением первого дня текущего месяца, а поле конечной - значением текущей даты.

Кнопка «Прошлый месяц»

Private Sub CommandButton4_Click()
TextBox1.Text = DateSerial(Year(Date), Month(Date) - 1, 1)
TextBox2.Text = DateSerial(Year(Date), Month(Date), 0)
End Sub

Поле начальной даты заполняется значением первого дня предыдущего месяца, а поле конечной - значением последнего дня предыдущего месяца.

Кнопка «Прошлый год»

Private Sub CommandButton5_Click()
TextBox1.Text = DateSerial(Year(Date) - 1, 1, 1)
TextBox2.Text = DateSerial(Year(Date) - 1, 12, 31)
End Sub

Поле начальной даты заполняется значением первого дня предыдущего года, а поле конечной - значением последнего дня предыдущего года.

Вы можете скачать файл с примером и протестировать на нем заполнение диалоговой формы различными интервалами дат. Форма закрывается нажатием на крестик, кнопки «OK» и «Отмена» неактивны. По аналогии с кнопкой «Прошлый год» можете добавить кнопку «Текущий год».

VBA Excel. Автоматическое заполнение интервала дат (периода): 2 комментария

  1. Дмитрий

    Здравствуйте ! подскажите а возможно ли применить это все к диапазону в столбце с датами

  2. Евгений (автор статьи)

    Здравствуйте, Дмитрий! Я правильно понял, что вы спрашиваете, можно ли выделить диапазон в столбце с датами и открыть форму с начальной и конечной датой этого диапазона?

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. Комментарии, поступившие с 20.11.18 по 25.11.18, пройдут модерацию 26-27.11.18