Create a Worksheet Calendar

< Back to Search results

 Category: [Excel]  Demo Available 

Create a Worksheet Calendar


Excel VBA Code to Create a Worksheet Calendar

Got any Excel/VBA Questions? Free Excel Help

The Excel VBA code below will create a calendar on a new Worksheet. The current day will always be highlighted dynamically each day. The year of the calendar will always be the current year. The dates used are true excel dates and can be used in any date calculations.

You may have to adjust some of the formatting elements to fit your screen size and resolution.

Sub CreateCalendar()

Dim lMonth As Long

Dim strMonth As String

Dim rStart As Range

Dim strAddress As String

Dim rCell As Range

Dim lDays As Long

Dim dDate As Date


    'Add new sheet and format


    ActiveWindow.DisplayGridlines = False

        With Cells

            .ColumnWidth = 6#

            .Font.Size = 8

        End With

    'Create the Month headings

    For lMonth = 1 To 4

            Select Case lMonth

                    Case 1

                        strMonth = "January"

                        Set rStart = Range("A1")

                    Case 2

                        strMonth = "April"

                        Set rStart = Range("A8")

                    Case 3

                        strMonth = "July"

                        Set rStart = Range("A15")

                    Case 4

                        strMonth = "October"

                        Set rStart = Range("A22")

            End Select


            'Merge, AutoFill and align months

            With rStart 
            	.Value = strMonth

                .HorizontalAlignment = xlCenter

                .Interior.ColorIndex = 6

                .Font.Bold = True

                    With .Range("A1:G1")


                        .BorderAround LineStyle:=xlContinuous

                    End With

                .Range("A1:G1").AutoFill Destination:=.Range("A1:U1")

            End With

    Next lMonth


     'Pass ranges for months

     For lMonth = 1 To 12

        strAddress = Choose(lMonth, "A2:G7", "H2:N7", "O2:U7", _
                   			"A9:G14", "H9:N14", "O9:U14", _
                    		"A16:G21", "H16:N21", "O16:U21", _
                            "A23:G28", "H23:N28", "O23:U28")

        lDays = 0

        Range(strAddress).BorderAround LineStyle:=xlContinuous

        'Add dates to month range and format

        For Each rCell In Range(strAddress)

            lDays = lDays + 1

            dDate = DateSerial(Year(Date), lMonth, lDays)

                If Month(dDate) = lMonth Then ' It's a valid date

                    With rCell

                        .Value = dDate

                        .NumberFormat = "ddd dd"

                    End With

                End If

        Next rCell

    Next lMonth


    'add con formatting

     With Range("A1:U28")

           .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=TODAY()"

           .FormatConditions(1).Font.ColorIndex = 2

           .FormatConditions(1).Interior.ColorIndex = 1

    End With

End Sub


See also:

Functions To Determine Excel Calculation Status & Mode
Change Text to Upper Case or Proper Case
Color or Format a Formula Referenced Cells - Precedents
Copy Multiple Column & Row Records Into Single Row Records
Examples & Usage Of Excel Conditional Formatting In VBA


Free Training Course: Lesson 1 - Excel Fundamentals


See also: Index to Excel VBA Code; Index to Excel Freebies; Lesson 1 - Excel Fundamentals; Index to how to… providing a range of solutions


Click here to visit our Free 24/7 Excel/VBA Help Forum where there are thousands of posts you can get information from, or you can join the Forum and post your own questions.


stars (0 Reviews)