+ Reply to Thread
Results 1 to 1 of 1

Calendar Macro

Hybrid View

  1. #1
    Registered User
    Join Date
    10-27-2015
    Location
    Galaxy, Macau
    MS-Off Ver
    2010
    Posts
    1

    Calendar Macro

    Hi Guys,

    I just want to ask how can I improve below code so that every time I create a new calendar there will be certain notes on certain days of the month? For example:

    1st working day - "Review files to be documented"
    2nd working day - "Submit documents for furnishing"

    I also want to have a checking functionality. For example if task 1 for 1st working day is done this should be colored green.

    Capture.JPG

    Below is the code for the module:
    Sub CalendarMaker()
    
           ' Unprotect sheet if had previous calendar to prevent error.
           ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _
              Scenarios:=False
           ' Prevent screen flashing while drawing calendar.
           Application.ScreenUpdating = False
           ' Set up error trapping.
           On Error GoTo MyErrorTrap
           ' Clear area a1:g14 including any previous calendar.
           Range("a1:g14").Clear
           ' Use InputBox to get desired month and year and set variable
           ' MyInput.
           MyInput = InputBox("Type in Month and year for Calendar ")
           ' Allow user to end macro with Cancel in InputBox.
           If MyInput = "" Then Exit Sub
           ' Get the date value of the beginning of inputted month.
           StartDay = DateValue(MyInput)
           ' Check if valid date but not the first of the month
           ' -- if so, reset StartDay to first day of month.
           If Day(StartDay) <> 1 Then
               StartDay = DateValue(Month(StartDay) & "/1/" & _
                   Year(StartDay))
           End If
           ' Prepare cell for Month and Year as fully spelled out.
           Range("a1").NumberFormat = "mmmm yyyy"
           ' Center the Month and Year label across a1:g1 with appropriate
           ' size, height and bolding.
           With Range("a1:g1")
               .HorizontalAlignment = xlCenterAcrossSelection
               .VerticalAlignment = xlCenter
               .Font.Size = 18
               .Font.Bold = True
               .RowHeight = 35
           End With
           ' Prepare a2:g2 for day of week labels with centering, size,
           ' height and bolding.
           With Range("a2:g2")
               .ColumnWidth = 11
               .VerticalAlignment = xlCenter
               .HorizontalAlignment = xlCenter
               .VerticalAlignment = xlCenter
               .Orientation = xlHorizontal
               .Font.Size = 12
               .Font.Bold = True
               .RowHeight = 20
           End With
           ' Put days of week in a2:g2.
           Range("a2") = "Sunday"
           Range("b2") = "Monday"
           Range("c2") = "Tuesday"
           Range("d2") = "Wednesday"
           Range("e2") = "Thursday"
           Range("f2") = "Friday"
           Range("g2") = "Saturday"
           ' Prepare a3:g7 for dates with left/top alignment, size, height
           ' and bolding.
           With Range("a3:g8")
               .HorizontalAlignment = xlRight
               .VerticalAlignment = xlTop
               .Font.Size = 18
               .Font.Bold = True
               .RowHeight = 21
           End With
           ' Put inputted month and year fully spelling out into "a1".
           Range("a1").Value = Application.Text(MyInput, "mmmm yyyy")
           ' Set variable and get which day of the week the month starts.
           DayofWeek = Weekday(StartDay)
           ' Set variables to identify the year and month as separate
           ' variables.
           CurYear = Year(StartDay)
           CurMonth = Month(StartDay)
           ' Set variable and calculate the first day of the next month.
           FinalDay = DateSerial(CurYear, CurMonth + 1, 1)
           ' Place a "1" in cell position of the first day of the chosen
           ' month based on DayofWeek.
           Select Case DayofWeek
               Case 1
                   Range("a3").Value = 1
               Case 2
                   Range("b3").Value = 1
               Case 3
                   Range("c3").Value = 1
               Case 4
                   Range("d3").Value = 1
               Case 5
                   Range("e3").Value = 1
               Case 6
                   Range("f3").Value = 1
               Case 7
                   Range("g3").Value = 1
           End Select
           ' Loop through range a3:g8 incrementing each cell after the "1"
           ' cell.
           For Each cell In Range("a3:g8")
               RowCell = cell.Row
               ColCell = cell.Column
               ' Do if "1" is in first column.
               If cell.Column = 1 And cell.Row = 3 Then
               ' Do if current cell is not in 1st column.
               ElseIf cell.Column <> 1 Then
                   If cell.Offset(0, -1).Value >= 1 Then
                       cell.Value = cell.Offset(0, -1).Value + 1
                       ' Stop when the last day of the month has been
                       ' entered.
                       If cell.Value > (FinalDay - StartDay) Then
                           cell.Value = ""
                           ' Exit loop when calendar has correct number of
                           ' days shown.
                           Exit For
                       End If
                   End If
               ' Do only if current cell is not in Row 3 and is in Column 1.
               ElseIf cell.Row > 3 And cell.Column = 1 Then
                   cell.Value = cell.Offset(-1, 6).Value + 1
                   ' Stop when the last day of the month has been entered.
                   If cell.Value > (FinalDay - StartDay) Then
                       cell.Value = ""
                       ' Exit loop when calendar has correct number of days
                       ' shown.
                       Exit For
                   End If
               End If
           Next
    
           ' Create Entry cells, format them centered, wrap text, and border
           ' around days.
           For x = 0 To 5
               Range("A4").Offset(x * 2, 0).EntireRow.Insert
               With Range("A4:G4").Offset(x * 2, 0)
                   .RowHeight = 65
                   .HorizontalAlignment = xlCenter
                   .VerticalAlignment = xlTop
                   .WrapText = True
                   .Font.Size = 10
                   .Font.Bold = False
                   ' Unlock these cells to be able to enter text later after
                   ' sheet is protected.
                   .Locked = False
               End With
               ' Put border around the block of dates.
               With Range("A3").Offset(x * 2, 0).Resize(2, _
               7).Borders(xlLeft)
                   .Weight = xlThick
                   .ColorIndex = xlAutomatic
               End With
    
               With Range("A3").Offset(x * 2, 0).Resize(2, _
               7).Borders(xlRight)
                   .Weight = xlThick
                   .ColorIndex = xlAutomatic
               End With
               Range("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _
                  Weight:=xlThick, ColorIndex:=xlAutomatic
           Next
           If Range("A13").Value = "" Then Range("A13").Offset(0, 0) _
              .Resize(2, 8).EntireRow.Delete
           ' Turn off gridlines.
           ActiveWindow.DisplayGridlines = False
           ' Protect sheet to prevent overwriting the dates.
           ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
              Scenarios:=True
    
           ' Resize window to show all of calendar (may have to be adjusted
           ' for video configuration).
           ActiveWindow.WindowState = xlMaximized
           ActiveWindow.ScrollRow = 1
    
           ' Allow screen to redraw with calendar showing.
           Application.ScreenUpdating = True
           ' Prevent going to error trap unless error found by exiting Sub
           ' here.
           Exit Sub
       ' Error causes msgbox to indicate the problem, provides new input box,
       ' and resumes at the line that caused the error.
    MyErrorTrap:
           MsgBox "You may not have entered your Month and Year correctly." _
               & Chr(13) & "Spell the Month correctly" _
               & " (or use 3 letter abbreviation)" _
               & Chr(13) & "and 4 digits for the Year"
           MyInput = InputBox("Type in Month and year for Calendar")
           If MyInput = "" Then Exit Sub
           Resume
       End Sub
    Last edited by alansidman; 10-27-2015 at 04:19 PM. Reason: Added Code Tags

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. [SOLVED] Calendar entry meeting in lotus notes calendar with macro
    By abjac in forum Excel Programming / VBA / Macros
    Replies: 7
    Last Post: 05-16-2016, 05:45 AM
  2. macro calendar
    By max_max in forum Excel Programming / VBA / Macros
    Replies: 2
    Last Post: 08-26-2013, 04:39 PM
  3. Help for calendar entry macro
    By abjac in forum Excel Programming / VBA / Macros
    Replies: 1
    Last Post: 05-09-2013, 03:02 PM
  4. Macro to create a calendar
    By NiceLittleRabbit in forum Excel Programming / VBA / Macros
    Replies: 1
    Last Post: 09-23-2010, 04:53 PM
  5. Macro - Calendar
    By Tarek in forum Excel Programming / VBA / Macros
    Replies: 6
    Last Post: 12-10-2008, 06:46 AM
  6. Excel 2007 : Macro - Calendar
    By Tarek in forum Excel General
    Replies: 1
    Last Post: 12-10-2008, 06:09 AM
  7. Calendar Macro
    By andrew8008 in forum Excel Programming / VBA / Macros
    Replies: 9
    Last Post: 09-19-2007, 04:12 PM
  8. Calendar Macro
    By adash_singh in forum Excel Formulas & Functions
    Replies: 4
    Last Post: 03-20-2007, 02:28 PM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1