Cách tạo lịch hàng tháng trong Excel

Support for Office 2003 has ended

Microsoft ended support for Office 2003 on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

Tóm tắt
Bài viết này chứa macro Microsoft Visual Basic for Applications (Thủ tục phụ) nhắc bạn nhập tháng và năm, đồng thời tạo lịch hàng tháng bằng trang tính.
Giải pháp
Microsoft chỉ cung cấp mẫu lập trình để minh họa chứ không đảm bảo dưới bất kỳ hình thức nào dù có quy định rõ ràng hay ngụ ý. Điều này bao gồm nhưng không giới hạn trong các hình thức bảo hành đối với tính thương mại cũng như tính thích hợp cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen với ngôn ngữ lập trình đang được giải thích, và công cụ được sử dụng để tạo và gỡ lỗi quy trình. Microsoft hỗ trợ các kỹ sư có thể giải thích chức năng của quy trình đặc biệt, nhưng họ sẽ không sửa đổi những mẫu này để cung cấp chức năng được bổ sung hoặc xây dựng các quy trình nhằm đáp ứng yêu cầu cụ thể của bạn.

Để tạo lịch, hãy làm theo những bước sau.

Microsoft Excel 2003

  1. Tạo sổ làm việc mới.
  2. Trên menu Công cụ, trỏ chuột vào Macro, sau đó bấm Visual Basic Editor.
  3. Trên menu Chèn, bấm Mô-đun.
  4. Sao chép mã Visual Basic for Applications bên dưới vào trang mô-đun.
  5. Trên menu Tệp, bấm "Đóng và Quay lại Microsoft Excel".
  6. Bấm vào tab Sheet1.
  7. Trên menu Công cụ, trỏ chuột vào Macro, sau đó bấm vào các Macro.
  8. Bấm vào CalendarMaker, và sau đó bấm vào Chạy để tạo lịch.

Microsoft Excel 2007 trở lên

  1. Tạo sổ làm việc mới.
  2. Trên ruy băng dành cho Nhà phát triển, bấm Visual Basic.
  3. Trên menu Chèn, bấm Mô-đun.
  4. Sao chép mã Visual Basic for Applications bên dưới vào trang mô-đun.
  5. Trên menu Tệp, bấm "Đóng và Quay lại Microsoft Excel".
  6. Bấm vào tab Sheet1.
  7. Trên ruy băng dành cho Nhà phát triển, bấm vào Macro
  8. Bấm vào CalendarMaker, và sau đó bấm vào Chạy để tạo lịch.

CHÚ Ý: Nếu Ruy băng dành cho Nhà phát triển không hiển thị, hãy đi tới Tuỳ chọn Excel và kích hoạt. Trong Excel 2007, bạn sẽ tìm thấy ruy băng trong menu Phổ biến còn trong Excel 2010, bạn sẽ thấy trong menu Ruy băng Tuỳ Chỉnh.

Quy trình Visual Basic Mẫu

  Sub CalendarMaker()       ' Không bảo vệ trang nếu có lịch trước đó để ngăn lỗi.       ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _          Scenarios:=False       ' Ngăn màn hình nhấp nháy trong khi vẽ lịch.       Application.ScreenUpdating = False       ' Thiết lập bẫy lỗi.       On Error GoTo MyErrorTrap       ' Xoá khu vực a1:g14 bao gồm bất kỳ lịch nào trước đó.       Range("a1:g14").Clear       ' Sử dụng InputBox để có tháng và năm mong muốn rồi đặt biến       ' MyInput.       MyInput = InputBox("Nhập Tháng và năm cho Lịch")       ' Cho phép người dùng chấm dứt macro bằng Huỷ trong InputBox.       If MyInput = "" Then Exit Sub       ' Nhận giá trị ngày đầu tháng đã nhập.       StartDay = DateValue(MyInput)       ' Kiểm tra xem ngày có hợp lệ hay không chứ không cần kiểm tra ngày đầu tiên của tháng       ' -- nếu ngày hợp lệ, đặt lại StartDay về ngày đầu tiên của tháng.       Nếu Day(StartDay) <> 1 thì           StartDay = DateValue(Month(StartDay) & "/1/" & _               Year(StartDay))       Kết thúc Nếu       ' Chuẩn bị ô cho Tháng và Năm như được nêu đầy đủ.       Range("a1").NumberFormat = "mmmm yyyy"       ' Căn giữa nhãn Tháng và Năm trên a1:g1 thích hợp       ' kích thước, chiều cao và độ đậm.       Với Range("a1:g1")           .HorizontalAlignment = xlCenterAcrossSelection           .VerticalAlignment = xlCenter           .Font.Size = 18           .Font.Bold = True           .RowHeight = 35       Kết thúc Bằng       ' Chuẩn bị a2:g2 cho nhãn ngày của tuần với căn giữa, kích thước,       ' chiều cao và độ đậm.       Với Range("a2:g2")           .ColumnWidth = 11           .VerticalAlignment = xlCenter           .HorizontalAlignment = xlCenter           .VerticalAlignment = xlCenter           .Orientation = xlHorizontal           .Font.Size = 12           .Font.Bold = True           .RowHeight = 20       Kết thúc Bằng       ' Đặt ngày trong tuần trong a2:g2.       Range("a2") = "Sunday"       Range("b2") = "Monday"       Range("c2") = "Tuesday"       Range("d2") = "Wednesday"       Range("e2") = "Thursday"       Range("f2") = "Friday"       Range("g2") = "Saturday"       ' Chuẩn bị a3:g7 cho ngày với căn trái/trên cùng, kích thước, chiều cao       ' và độ đậm.       Với Range("a3:g8")           .HorizontalAlignment = xlRight           .VerticalAlignment = xlTop           .Font.Size = 18           .Font.Bold = True           .RowHeight = 21       Kết thúc Bằng       ' Đặt tháng và năm đã nhập đầy đủ vào "a1".       Range("a1").Value = Application.Text(MyInput, "mmmm yyyy")       ' Đặt biến và nhận ngày nào trong tuần mà tháng sẽ bắt đầu.       DayofWeek = WeekDay(StartDay)       ' Đặt biến để xác định năm và tháng riêng biệt       ' biến.       CurYear = Year(StartDay)       CurMonth = Month(StartDay)       ' Đặt biến và tính ngày đầu tiên của tháng tiếp theo.       FinalDay = DateSerial(CurYear, CurMonth + 1, 1)       ' Đặt "1" vào vị trí ô của ngày đầu tiên được chọn       ' tháng dựa trên DayofWeek.       Chọn trường hợp DayofWeek           Trường hợp 1               Range("a3").Value = 1           Trường hợp 2               Range("b3").Value = 1           Trường hợp 3               Range("c3").Value = 1           Trường hợp 4               Range("d3").Value = 1           Trường hợp 5               Range("e3").Value = 1           Trường hợp 6               Range("f3").Value = 1           Trường hợp 7               Range("g3").Value = 1       Kết thúc Chọn       ' Vòng lặp thông qua dải ô a3:g8 tăng mỗi ô sau ô"1"       '.       Đối với Mỗi ô trong Range("a3:g8")           RowCell = cell.Row           ColCell = cell.Column           ' Làm gì nếu "1" nằm trong cột đầu tiên.           Nếu cell.Column = 1 và cell.Row = 3 thì           ' Làm gì nếu ô hiện tại không nằm trong cột đầu tiên.           ElseIf cell.Column <> 1 thì               Nếu cell.Offset(0, -1).Value >= 1 thì                   cell.Value = cell.Offset(0, -1).Value + 1                   ' Dừng lại khi ngày cuối cùng của tháng đã                   ' được nhập.                   Nếu cell.Value > (FinalDay - StartDay) thì                       cell.Value = ""                       ' Thoát khỏi vòng lặp khi lịch có đúng số                       ' ngày được hiển thị.                       Thoát cho                   Kết thúc Nếu               Kết thúc Nếu           ' Làm gì nếu ô hiện tại không nằm trong Hàng 3 mà nằm trong Cột 1.           ElseIf cell.Row > 3 và cell.Column = 1 thì               cell.Value = cell.Offset(-1, 6).Value + 1               ' Dừng lại khi ngày cuối cùng của tháng đã được nhập.               Nếu cell.Value > (FinalDay - StartDay) thì                   cell.Value = ""                   ' Thoát khỏi vòng lặp khi lịch có đúng số ngày                   ' được hiển thị.                   Thoát cho               Kết thúc Nếu           Kết thúc Nếu       Tiếp theo       ' Tạo ô Mục nhập, định dạng ô ở giữa, ngắt dòng và đường viền       ' khoảng ngày.       Cho x = 0 đến 5           Range("A4").Offset(x * 2, 0).EntireRow.Insert           Với Range("A4:G4").Offset(x * 2, 0)               .RowHeight = 65               .HorizontalAlignment = xlCenter               .VerticalAlignment = xlTop               .WrapText = True               .Font.Size = 10               .Font.Bold = False               ' Mở khoá các ô này để có thể nhập văn bản sau sau khi               ' trang được bảo vệ.               .Locked = False           Kết thúc Bằng           ' Đặt đường viền xung quanh khối ngày.           Với Range("A3").Offset(x * 2, 0).Resize(2, _           7).Borders(xlLeft)               .Weight = xlThick               .ColorIndex = xlAutomatic           Kết thúc Bằng           Với Range("A3").Offset(x * 2, 0).Resize(2, _           7).Borders(xlRight)               .Weight = xlThick               .ColorIndex = xlAutomatic           Kết thúc Bằng           Với ("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _              Weight:=xlThick, ColorIndex:=xlAutomatic       Tiếp theo       Nếu Range("A13").Value = "" thì Range("A13").Offset(0, 0) _          .Resize(2, 8).EntireRow.Delete       ' Tắt đường lưới.       ActiveWindow.DisplayGridlines = False       ' Bảo vệ trang để ngăn ghi đè ngày.       ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _          Scenarios:=True       ' Định lại kích thước cửa sổ để hiển thị tất cả lịch (có thể phải được điều chỉnh       ' để cấu hình video).       ActiveWindow.WindowState = xlMaximized       ActiveWindow.ScrollRow = 1       ' Cho phép màn hình vẽ lại với lịch hiển thị.       Application.ScreenUpdating = True       ' Ngăn đi tới bẫy lỗi trừ khi tìm thấy lỗi bằng cách thoát ô Phụ       ' ở đây.       Thoát ô Phụ   ' Lỗi giúp msgbox phát hiện sự cố, cung cấp ô nhập mới,    ' và tiếp tục tại nơi đã gây ra lỗi.   MyErrorTrap:       MsgBox "Có thể bạn đã không nhập Tháng và Năm đúng". _           & Chr(13) & "Viết Tháng không đúng" _           & " (hoặc sử dụng 3 chữ viết tắt)" _           & Chr(13) & "và 4 chữ số cho Năm"       MyInput = InputBox("Nhập Tháng và Năm cho Lịch")       If MyInput = "" Then Exit Sub       Tiếp tục   Chấm dứt ô phụ				
Bạn có thể thêm mã khác để tuỳ chỉnh lịch nhằm đáp ứng yêu cầu của mình. Chèn thêm hàng cho mục nhập trên màn hình cho mỗi ngày hoặc thay đổi kích thước màn hình để xem tất cả lịch dựa trên kích thước và độ phân giải màn hình.
 XL2003 XL2007 XL2010
Thuộc tính

ID Bài viết: 150774 - Xem lại Lần cuối: 03/31/2016 07:30:00 - Bản sửa đổi: 5.0

Microsoft Office Excel 2003, Microsoft Office Excel 2007, Microsoft Excel 2010, Excel 2016

  • kbautomation kbdtacode kbhowto kbprogramming KB150774
Phản hồi