Så här skapar du en kalender i ditt Excel-arbetsblad med VBA-skript

Excel har ett brett användningsområde. I den här artikeln visar vi dig hur du skapar en kalender i ett kalkylblad med hjälp av ett makro.

Förutom att lagra och analysera data i din Excel kan du också använda den för att slutföra andra uppgifter. Du kan till exempel samla in information med hjälp av Excel eller anteckna din planering i kalkylbladet. Idag har vi hittat en ny användning. Du kan skapa en kalender i ett kalkylblad. Du kan se effekten i bilden nedan.Kalender

Du kan skriva in några uppgifter i den här kalendern. Och funktionen är densamma som ett memorandum. Genom att använda Excel blir dessa uppgifter tydligare. Följ nu stegen i följande del och se hur det fungerar.

Skapa en kalender

  1. Tryck på knappen "Alt + F11" på tangentbordet för att öppna kalkylbladet.
  2. Och sätt sedan in en ny modul i Visual Basic-redigeraren.
  3. Nu kopierar du följande koder till den nya modulen:
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

Således är ett mycket ensamt makro. Men du kan använda den direkt. Och du behöver inte ändra det.

  1. Tryck sedan på knappen “F5” på tangentbordet.
  2. Ange datumet för den första dagen i popup-fönstret med formatet ”År / månad / dag”. "Dag" kan vara vilken dag som helst i denna månad, här kommer vi att mata in "1".Ingångsdatum
  3. Klicka sedan på knappen “OK”. Därefter kommer du tillbaka till redaktören. För att kontrollera resultatet kan du komma tillbaka till kalkylbladet.

Kalendern har redan dykt upp i kalkylbladet. Markören kommer att placeras vid den tomma cellen den första dagen.Resultat

Å andra sidan, om du inte är nöjd med cellformatet kan du också ändra koderna enligt dina önskemål. Med den här kalendern är du säker på att förbättra din arbetseffektivitet.

Excel är inte mindre benägen att misslyckas

Om du använder Excel ofta kommer det inte att vara svårt för dig att upptäcka att Excel alltid kommer att skadas. Most av tiden, avsluta Excel och sedan restardet kan lösa problemet. Ibland kommer du dock att möta allvarlig Excel-korruption. Och just nu kan du använda vårt kraftfulla verktyg för att reparera Excel xlsx datafel. Genom att använda detta verktyg kan almost alla fel kan enkelt lösas.

Författarintroduktion:

Anna Ma är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparera Word docx-fil och Outlook-programvara för reparationsprogramvara. För mer information besök www.datanumen.com

Kommentarer är stängda.