VBA Excel
241 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
📆 Автоматическое создание календаря в VBA Excel
Если вам нужно создать месячный календарь на листе Excel, можно использовать VBA для генерации таблицы с заголовком, днями недели и датами. 🚀

📌 Код VBA Excel для создания календаря:
Sub CreateCalendar()
Dim ws As Worksheet
Dim startDate As Date, endDate As Date
Dim firstDay As Integer, lastDay As Integer
Dim yearInput As Integer, monthInput As Integer
Dim i As Integer, rowOffset As Integer

' Запрос у пользователя месяца и года
yearInput = InputBox("Введите год:", "Год", Year(Date))
monthInput = InputBox("Введите номер месяца (1-12):", "Месяц", Month(Date))

' Проверка корректности ввода
If monthInput < 1 Or monthInput > 12 Then
MsgBox "Ошибка! Введите месяц от 1 до 12.", vbCritical, "Ошибка ввода"
Exit Sub
End If

' Определяем первый и последний день месяца
startDate = DateSerial(yearInput, monthInput, 1)
lastDay = Day(DateSerial(yearInput, monthInput + 1, 0))

' Создаем новый лист
Set ws = ThisWorkbook.Sheets.Add
ws.Name = Format(startDate, "mmmm yyyy")

' Заголовок
ws.Cells(1, 1).Value = Format(startDate, "mmmm yyyy")
ws.Cells(1, 1).Font.Bold = True
ws.Cells(1, 1).Font.Size = 14
Range("A1:G1").HorizontalAlignment = xlCenterAcrossSelection

' Заголовки дней недели
Dim daysArray As Variant
daysArray = Array("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс")
For i = 0 To 6
ws.Cells(3, i + 1).Value = daysArray(i)
ws.Cells(3, i + 1).Font.Bold = True
ws.Cells(3, i + 1).HorizontalAlignment = xlCenter
Next i

' Заполнение календаря
firstDay = Weekday(startDate, vbMonday) ' Определяем день недели 1-го числа
rowOffset = 4
i = 1

Do While i <= lastDay
ws.Cells(rowOffset, firstDay).Value = i
ws.Cells(rowOffset, firstDay).HorizontalAlignment = xlCenter
ws.Cells(rowOffset, firstDay).VerticalAlignment = xlCenter
ws.Cells(rowOffset, firstDay).Borders.LineStyle = xlContinuous

' Перемещение к следующему дню
If firstDay = 7 Then
rowOffset = rowOffset + 1
firstDay = 1
Else
firstDay = firstDay + 1
End If
i = i + 1
Loop

' Автоширина столбцов
ws.Columns.AutoFit

MsgBox "Календарь успешно создан!", vbInformation, "Готово!"
End Sub


📌 Как работает макрос?
🔹 Запрашивает у пользователя месяц и год.
🔹 Создает таблицу календаря.
🔹 Заполняет даты и форматирует ячейки.

#VBA #ExcelVBA #Календарь #Calendar
👍2🔥2