Как создать календарь на листе Excel с помощью скрипта VBA

Поделись сейчас:

Excel имеет широкий спектр применения. В этой статье мы покажем вам, как создать календарь на листе с помощью макроса.

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

Вы можете ввести некоторые задачи в этот календарь. И функция такая же, как меморандум. С помощью Excel эти задачи будут более четкими. Теперь выполните шаги в следующей части и посмотрите, как это работает.

Создать календарь

  1. Нажмите кнопку «Alt + F11» на клавиатуре, чтобы открыть рабочий лист.
  2. А затем вставьте новый модуль в редактор Visual Basic.
  3. Теперь скопируйте следующие коды в новый модуль:
Sub Create_Monthly_Calender()
    Dim firstweekday As Integer, EndDay As Integer, _
    FirstWeekColumnIndex As Integer, AssignmentDate As Integer, _
    FirstCountNumber As Integer, SecondCountNumber As Integer, _
    LastDay As Range, objRange As Range, RowIndexofLastday As Integer, FirstCountforTargetRange As Integer, SecondCountforTargetRange As Integer

    firstday = InputBox("Input the year, month and the first day with this format: year/month/day")
    If firstday = "" Then Exit Sub


    Range("A1:G1").Merge
    Range("A1") = Year(firstday) & "." & Month(firstday)
    Range("A2") = "Sunday"
    Range("A2").AutoFill Destination:=Range("A2:G2"), Type:=xlFillDefault
    firstweekday = Application.WorksheetFunction.Weekday(firstday)
    Cells(3, firstweekday) = 1

    Select Case Month(firstday)
        Case 1, 3, 5, 7, 8, 10, 12
            EndDay = 31
        Case 4, 6, 9, 11
            EndDay = 30
        Case 2
            If (Year(firstday) Mod 4) = 0 And (Year(firstday) Mod 100) <> 0 Or ((Year(firstday) Mod 400) = 0) Then
                EndDay = 29
            Else
                EndDay = 28
            End If
    End Select

    For FirstWeekColumnIndex = 1 To (7 - firstweekday)
        Cells(3, firstweekday).Offset(0, FirstWeekColumnIndex) = Cells(3, firstweekday).Offset(0, FirstWeekColumnIndex - 1) + 1
    Next FirstWeekColumnIndex

    AssignmentDate = Range("G3") + 1
    For FirstCountNumber = 2 To 10 Step 2
        For SecondCountNumber = 0 To 6
            Cells(3, firstweekday).Offset(FirstCountNumber, 1 - firstweekday + SecondCountNumber) = AssignmentDate
            AssignmentDate = AssignmentDate + 1
            If Cells(3, firstweekday).Offset(FirstCountNumber, 1 - firstweekday + SecondCountNumber) = EndDay Then
                Exit For
            End If
        Next SecondCountNumber
        If Cells(3, firstweekday).Offset(FirstCountNumber, 1 - firstweekday + SecondCountNumber) = EndDay Then
            Exit For
        End If
    Next FirstCountNumber

    ’set format for the range
    With Range("A1")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Font.Size = 16
        .Font.Bold = True
        .Interior.Color = RGB(196, 202, 201)
    End With

    With Range("A2:G2")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Font.Bold = True
    End With

    For Each LastDay In ActiveSheet.UsedRange
        If LastDay = EndDay Then
            RowIndexofLastday = LastDay.Row
        End If
    Next

    For FirstCountforTargetRange = RowIndexofLastday To 3 Step -2
            With Range("A" & FirstCountforTargetRange, "G" & FirstCountforTargetRange)
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .RowHeight = 20
            End With
    Next FirstCountforTargetRange

        For SecondCountforTargetRange = RowIndexofLastday + 1 To 4 Step -2
            With Range("A" & SecondCountforTargetRange, "G" & SecondCountforTargetRange)
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Font.Bold = True
                .RowHeight = 50
                .ColumnWidth = 12
            End With
    Next SecondCountforTargetRange

    Set objRange = Range("A1", "G" & (RowIndexofLastday + 1))
    With objRange.Borders
        .Color = vbBlack
        .Weight = xlThin
        .LineStyle = xlContinuous
    End With

    ActiveWindow.DisplayGridlines = False
    Cells(3, firstweekday).Offset(1, 0).Select
End Sub

Таким образом, это очень одинокий макрос. Но вы можете использовать его напрямую. И вам не нужно его модифицировать.

  1. Затем нажмите кнопку «F5» на клавиатуре.
  2. Во всплывающем окне введите дату первого дня в формате «Год/Месяц/День». «День» может быть любым днем ​​в этом месяце, здесь мы введем «1».Дата ввода
  3. А затем нажмите кнопку «ОК». Далее вы вернетесь в редактор. Чтобы проверить результат, вы можете вернуться к рабочему листу.

Календарь уже появился на листе. И курсор будет стоять на пустой ячейке первого дня.Результат

С другой стороны, если вас не устраивает формат ячеек, вы также можете изменить коды по своему усмотрению. С этим календарем вы обязательно повысите эффективность своей работы.

Excel не менее подвержен сбоям

Если вы часто используете Excel, вам не составит труда обнаружить, что Excel всегда будет повреждаться. Мost времени, выйдите из Excel, а затем restarт это может решить проблему. Однако иногда вы столкнетесь с серьезным повреждением Excel. И в этот момент вы можете использовать наш мощный инструмент для исправить ошибку данных Excel xlsx. Используя этот инструмент, almost все ошибки легко устраняются.

Об авторе:

Анна Ма — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая восстановить файл Word docx и программные продукты для ремонта Outlook. Для получения дополнительной информации посетите www.datanumen.com

Поделись сейчас:

Комментарии закрыты.