如何在 Excel 中建立行事曆

Office 2003 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Office 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

結論
本文包含 Microsoft Visual Basic for Applications 巨集 (Sub 程序) 的範例,提示您輸入月份和年份並使用工作表建立行事曆。
解決方案
Microsoft 僅提供示範性的程式設計範例,不做任何明示或默示的擔保。其中包含 (但不限於) 其適售性或適合某特定用途之默示擔保。本文假設您已相當熟悉示範所用的程式設計語言,以及用於建立和偵錯程序的工具。Microsoft 技術支援工程師可以協助說明特定程序的功能,但無法修改這些範例以提供附加功能或建構程序以滿足您的特定需求。

如果要建立行事曆,請依照下列步驟執行:

Microsoft Excel 2003

  1. 建立新的活頁簿。
  2. 在 [工具] 功能表上,指向 [巨集],然後按一下 [Visual Basic 編輯器]。
  3. 在 [插入] 功能表上,按一下 [模組]。
  4. 將下列 Visual Basic for Applications 程式碼複製到模組工作表。
  5. 在 [檔案] 功能表上,按一下 [關閉並回到 Microsoft Excel]。
  6. 按一下 [Sheet1] 索引標籤。
  7. 在 [工具] 功能表上,指向 [巨集],然後按一下 [巨集]。
  8. 按一下 [CalendarMaker],然後按一下 [執行] 以建立行事曆。

Microsoft Excel 2007 或更新版本

  1. 建立新的活頁簿。
  2. 在 [開發人員] 功能區上,按一下 [Visual Basic]。
  3. 在 [插入] 功能表上,按一下 [模組]。
  4. 將下列 Visual Basic for Applications 程式碼複製到模組工作表。
  5. 在 [檔案] 功能表上,按一下 [關閉並回到 Microsoft Excel]。
  6. 按一下 [Sheet1] 索引標籤。
  7. 在 [開發人員] 功能區上,按一下 [巨集]
  8. 按一下 [CalendarMaker],然後按一下 [執行] 以建立行事曆。

注意:如果未顯示 [開發人員] 功能區,請移至 [Excel 選項] 啟用該功能區。在 Excel 2007 中該選項位於 [常用] 功能表,在 Excel 2010 中位於 [自訂功能區] 功能表。

Visual Basic 程序範例

Sub CalendarMaker()' 如果之前已保護行事曆防止發生錯誤,則解除保護工作表。ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _Scenarios:=False' 防止繪製行事曆時畫面閃爍。Application.ScreenUpdating = False' 設定錯誤捕捉。On Error GoTo MyErrorTrap' 清除 a1:g14 區域,包含任何之前的行事曆。Range("a1:g14").Clear' 使用 InputBox 取得所需月份和年份並設定變數' MyInput.MyInput = InputBox("Type in Month and year for Calendar ")' 允許使用者透過 InputBox 中的 [取消] 結束巨集。If MyInput = "" Then Exit Sub' 取得輸入月份的開始日期值。StartDay = DateValue(MyInput)' 檢查日期是否有效,但不是該月的第一天' -- 若是如此,則將 StartDay 重設為該月的第一天。If Day(StartDay) <> 1 ThenStartDay = DateValue(Month(StartDay) & "/1/" & _Year(StartDay))End If' 為完整月份和年份準備儲存格。Range("a1").NumberFormat = "mmmm yyyy"' 在 a1:g1 中適當置中月份和年份標籤' 大小、高度和粗體。With Range("a1:g1").HorizontalAlignment = xlCenterAcrossSelection.VerticalAlignment = xlCenter.Font.Size = 18.Font.Bold = True.RowHeight = 35End With' 為一週天數標籤準備 a2:g2,且具有置中、大小、' 高度和粗體。With Range("a2:g2").ColumnWidth = 11.VerticalAlignment = xlCenter.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.Orientation = xlHorizontal.Font.Size = 12.Font.Bold = True.RowHeight = 20End With' 在 a2:g2 中放置一週天數。Range("a2") = "Sunday"Range("b2") = "Monday"Range("c2") = "Tuesday"Range("d2") = "Wednesday"Range("e2") = "Thursday"Range("f2") = "Friday"Range("g2") = "Saturday"' 為日期準備 a3:g7,且具有靠左/靠上對齊、大小、高度' 和粗體。With Range("a3:g8").HorizontalAlignment = xlRight.VerticalAlignment = xlTop.Font.Size = 18.Font.Bold = True.RowHeight = 21End With' 將完整的輸入月份和年份置於「a1」。Range("a1").Value = Application.Text(MyInput, "mmmm yyyy")' 設定變數並取得該月開始的一週天數。DayofWeek = WeekDay(StartDay)' 設定變數以將年份和月份識別為個別' 變數。CurYear = Year(StartDay)CurMonth = Month(StartDay)' 設定變數並計算下一個月的第一天。FinalDay = DateSerial(CurYear, CurMonth + 1, 1)' 根據 DayofWeek 將「1」置於選擇月份的第一天儲存格位置'。Select Case DayofWeekCase 1Range("a3").Value = 1Case 2Range("b3").Value = 1Case 3Range("c3").Value = 1Case 4Range("d3").Value = 1Case 5Range("e3").Value = 1Case 6Range("f3").Value = 1Case 7Range("g3").Value = 1End Select' 對 a3:g8 範圍執行迴圈,在「1」儲存格之後累加每個儲存格'。For Each cell In Range("a3:g8")RowCell = cell.RowColCell = cell.Column' 如果「1」位於第一欄,則執行這項操作。If cell.Column = 1 And cell.Row = 3 Then' 如果目前儲存格未位於第一欄,則執行這項操作。ElseIf cell.Column <> 1 ThenIf cell.Offset(0, -1).Value >= 1 Thencell.Value = cell.Offset(0, -1).Value + 1' 在輸入該月最後一天時停止'。If cell.Value > (FinalDay - StartDay) Thencell.Value = ""' 在行事曆顯示正確天數時結束迴圈'。Exit ForEnd IfEnd If' 如果目前儲存格未位於第 3 列且位於第 1 欄,則執行這項操作。ElseIf cell.Row > 3 And cell.Column = 1 Thencell.Value = cell.Offset(-1, 6).Value + 1' 在輸入該月最後一天時停止。If cell.Value > (FinalDay - StartDay) Thencell.Value = ""' 在行事曆顯示正確天數時結束迴圈'。Exit ForEnd IfEnd IfNext' 建立輸入儲存格,並設定其置中、自動換列和天數周圍框線的格式'。For x = 0 To 5Range("A4").Offset(x * 2, 0).EntireRow.InsertWith Range("A4:G4").Offset(x * 2, 0).RowHeight = 65.HorizontalAlignment = xlCenter.VerticalAlignment = xlTop.WrapText = True.Font.Size = 10.Font.Bold = False' 解除鎖定這些儲存格,以允許在保護工作表後輸入文字'。.Locked = FalseEnd With' 放置日期區塊周圍的框線。With Range("A3").Offset(x * 2, 0).Resize(2, _7).Borders(xlLeft).Weight = xlThick.ColorIndex = xlAutomaticEnd WithWith Range("A3").Offset(x * 2, 0).Resize(2, _7).Borders(xlRight).Weight = xlThick.ColorIndex = xlAutomaticEnd WithRange("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _Weight:=xlThick, ColorIndex:=xlAutomaticNextIf Range("A13").Value = "" Then Range("A13").Offset(0, 0) _.Resize(2, 8).EntireRow.Delete' 關閉格線。ActiveWindow.DisplayGridlines = False' 保護工作表以防整覆寫日期。ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _Scenarios:=True' 調整視窗大小以顯示所有行事曆 (可能必須針對影片設定調整' )。ActiveWindow.WindowState = xlMaximizedActiveWindow.ScrollRow = 1' 允許畫面重繪行事曆顯示。Application.ScreenUpdating = True' 除非現有子程式發現錯誤,否則防止移至錯誤捕捉'。Exit Sub' 導致 msgbox 表示問題的錯誤,提供新輸入方塊 ' 並繼續執行導致錯誤的那行。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 SubResumeEnd Sub				
您可以新增其他程式碼,以自訂符合您需求的行事曆。 在每天畫面上插入其他列以供輸入,或根據螢幕大小和解析度調整畫面大小,以看到整個行事曆。
 XL2003 XL2007 XL2010
內容

文章識別碼:150774 - 最後檢閱時間:03/31/2016 07:30:00 - 修訂: 5.0

Microsoft Office Excel 2003, , ,

  • kbautomation kbdtacode kbhowto kbprogramming KB150774
意見反應