Een kalender maken in uw Excel-werkblad met VBA-script

Excel heeft een breed scala aan toepassingen. In dit artikel laten we u zien hoe u een kalender in een werkblad kunt maken met behulp van een macro.

Behalve voor het opslaan en analyseren van gegevens in uw Excel, kunt u het ook gebruiken om andere taken uit te voeren. U kunt bijvoorbeeld informatie verzamelen door gebruik te maken van Excel, of u kunt uw planning noteren in het werkblad. Vandaag hebben we een nieuw gebruik gevonden. U kunt een kalender maken in een werkblad. Het effect zie je in onderstaande afbeelding.Agenda

U kunt enkele taken in deze kalender invoeren. En de functie is hetzelfde als een memorandum. Door gebruik te maken van de Excel worden die taken overzichtelijker. Volg nu de stappen in het volgende deel en kijk hoe het werkt.

Maak een kalender

  1. Druk op de knop "Alt + F11" op het toetsenbord om het werkblad te openen.
  2. En voeg vervolgens een nieuwe module in de Visual Basic-editor in.
  3. Kopieer nu de volgende codes naar de nieuwe module:
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

Het is dus een zeer eenzame macro. Maar je kunt het direct gebruiken. En je hoeft het niet aan te passen.

  1. Druk vervolgens op de knop "F5" op het toetsenbord.
  2. Voer in het pop-upvenster de datum van de eerste dag in met het formaat "Jaar/Maand/Dag". De "Dag" kan elke dag in deze maand zijn, hier zullen we "1" invoeren.Datum invoeren
  3. En klik vervolgens op de knop "OK". Vervolgens kom je terug bij de editor. Om het resultaat te controleren, kunt u teruggaan naar het werkblad.

De kalender is al in het werkblad verschenen. En de cursor wordt op de lege cel van de eerste dag geplaatst.Resultaat

Aan de andere kant, als u niet tevreden bent met het formaat van de cellen, kunt u de codes ook aanpassen aan uw voorkeur. Met deze kalender verbetert u zeker uw werkefficiëntie.

Excel is niet minder vatbaar voor mislukkingen

Als u Excel regelmatig gebruikt, zult u ongetwijfeld merken dat Excel-bestanden regelmatig corrupt raken. Meestal lost het afsluiten en opnieuw opstarten van Excel dit probleem op. Soms kunt u echter te maken krijgen met ernstige corruptie van Excel-bestanden. In dat geval kunt u onze krachtige tool gebruiken om... reparatie Excel xlsx-gegevensfoutMet behulp van deze tool kunnen vrijwel alle fouten eenvoudig worden opgelost.

Auteur Introductie:

Anna Ma is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder repareer Word docx-bestand en Outlook-reparatiesoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.