Excel for Microsoft 365, Excel 2019, Excel 2016, Excel 2013, Excel 2010, Excel 2007, Excel 2003
요약
이 문서에는 월 및 연도에 대한 메시지를 표시하고 워크시트를 사용하여 월별 달력을 만드는 Microsoft Visual Basic for Applications 매크로(하위 절차) 샘플이 포함되어 있습니다.
해결 방법
참고
Microsoft에서 제공하는 프로그래밍 예제는 예시를 위한 것일 뿐이며 이와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다. 이는 상품성이나 특정 목적에 대한 적합성의 묵시적인 보증을 포함하며 이에 제한되지 않습니다. 이 문서에서는 예제에 사용되고 있는 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구를 사용자가 잘 알고 있는 것으로 가정합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.
캘린더를 만들려면 다음을 수행합니다.
Microsoft Excel 2003
통합 문서를 만듭니다.
도구 메뉴에서 매크로를 가리킨 다음 Visual Basic Editor를 선택합니다.
삽입 메뉴에서 모듈을 선택합니다.
"샘플 Visual Basic 프로시저" 섹션의 Visual Basic for Applications 스크립트를 모듈 시트에 붙여 넣습니다.
파일 메뉴에서 닫고 Microsoft Excel로 돌아가기를 선택합니다.
Sheet1 탭을 선택합니다.
도구 메뉴에서 매크로를 가리킨 다음 매크로를 선택합니다.
CalendarMaker를 선택한 다음 실행을 선택하여 캘린더를 만듭니다.
Microsoft Excel 2007 이상
통합 문서를 만듭니다.
개발자 리본에서 Visual Basic을 선택합니다.
*삽입 메뉴에서 모듈을 선택합니다.
"샘플 Visual Basic 프로시저" 섹션의 Visual Basic for Applications 스크립트를 모듈 시트에 붙여 넣습니다.
파일 메뉴에서 닫고 Microsoft Excel로 돌아가기를 선택합니다.
Sheet1 탭을 선택합니다.
*개발자 리본에서 매크로를 클릭합니다.
CalendarMaker를 선택한 다음 *실행을 선택하여 캘린더를 만듭니다.
참고
개발자 리본이 표시되지 않으면 Excel 옵션을 열어 사용합니다. Excel 2007에서는 이 옵션을 인기 메뉴에서 사용할 수 있습니다. Excel 2010에서는 이 옵션을 리본 사용자 지정 메뉴에서 사용할 수 있습니다.
샘플 Visual Basic 프로시저
VB
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.OnErrorGoTo 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 = ""ThenExitSub' 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) <> 1Then
StartDay = DateValue(Month(StartDay) & "/1/" & _
Year(StartDay))
EndIf' 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 = 35EndWith' 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 = 20EndWith' 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 = 21EndWith' 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.SelectCase DayofWeek
Case1
Range("a3").Value = 1Case2
Range("b3").Value = 1Case3
Range("c3").Value = 1Case4
Range("d3").Value = 1Case5
Range("e3").Value = 1Case6
Range("f3").Value = 1Case7
Range("g3").Value = 1EndSelect' Loop through range a3:g8 incrementing each cell after the "1"' cell.ForEach cell In Range("a3:g8")
RowCell = cell.Row
ColCell = cell.Column
' Do if "1" is in first column.If cell.Column = 1And cell.Row = 3Then' Do if current cell is not in 1st column.ElseIf cell.Column <> 1ThenIf cell.Offset(0, -1).Value >= 1Then
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.ExitForEndIfEndIf' Do only if current cell is not in Row 3 and is in Column 1.ElseIf cell.Row > 3And cell.Column = 1Then
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.ExitForEndIfEndIfNext' Create Entry cells, format them centered, wrap text, and border' around days.For x = 0To5
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 = FalseEndWith' Put border around the block of dates.With Range("A3").Offset(x * 2, 0).Resize(2, _
7).Borders(xlLeft)
.Weight = xlThick
.ColorIndex = xlAutomatic
EndWithWith Range("A3").Offset(x * 2, 0).Resize(2, _
7).Borders(xlRight)
.Weight = xlThick
.ColorIndex = xlAutomatic
EndWith
Range("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _
Weight:=xlThick, ColorIndex:=xlAutomatic
NextIf 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.ExitSub' 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 = ""ThenExitSubResumeEndSub
다른 코드를 추가하여 필요에 맞게 캘린더를 사용자 지정할 수 있습니다. 매일 화면에 입력할 여분의 행을 삽입하거나 화면 크기를 조정하여 화면 크기와 해상도를 기준으로 모든 캘린더를 볼 수 있습니다.
Tunjukkan bahwa Anda memiliki keterampilan yang diperlukan untuk mendapatkan hasil maksimal dari Excel 2016 dengan mendapatkan sertifikasi Microsoft Office Specialist (MOS).