Tạo các trang tính trong tháng không có cuối tuần và ngày lễ bằng VBA
Trong bài viết này, chúng tôi sẽ tạo macro để tạo trang tính cho mỗi ngày trong tuần cho tháng được chỉ định của năm được chỉ định loại trừ tất cả các ngày được chỉ định trong danh sách ngày lễ.
Trước khi chạy macro, cần có ba đầu vào. Chúng ta cần chỉ định số tháng trong ô J10, năm trong ô J11 và chỉ định danh sách ngày nghỉ trong phạm vi B16: B26.
Sau khi chỉ định các giá trị đầu vào, hãy nhấp vào nút gửi để chạy macro.
Macro này sẽ chèn một trang tính mới cho mỗi ngày trong tuần trong tháng được chỉ định, ngoại trừ các ngày được chỉ định trong danh sách ngày lễ.
Giải thích logic
Trong macro này, chúng tôi đã sử dụng hàm DateSerial để tìm ngày cuối cùng của tháng được chỉ định. Chúng tôi đã sử dụng Vòng lặp FOR để lặp lại từ ngày bắt đầu của tháng đến ngày cuối cùng của tháng. Chúng tôi đã sử dụng chức năng Tìm để tìm liệu ngày đang được sử dụng có tồn tại trong danh sách ngày lễ được chỉ định hay không.
[_GoBack] # Hàm Weekday được sử dụng cùng với câu lệnh If để kiểm tra xem một ngày là ngày trong tuần hay cuối tuần. Câu lệnh if sẽ chỉ chèn một trang tính mới nếu ngày đó là một ngày trong tuần và nó không tồn tại trong danh sách ngày lễ. Như người ta có thể thấy trong ảnh chụp màn hình ở trên, trang tính cho 6 ^ th ^ tháng 12 không được tạo, vì 6 ^ th ^ tháng 12 có trong danh sách ngày lễ.
Vui lòng theo dõi bên dưới để biết mã
Option Explicit Sub MonthApply() 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabling the screen updates Application.ScreenUpdating = False With Worksheets("Main") 'Getting month and year from cell J10 and J11 from "Main" sheet MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Deriving start and end date StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Looping through all the dates in the specified month For DVariable = StartDate To EndDate 'Finding if date is marked as holiday Set RngFind = .Range("B16:B26").Find(DVariable) 'Checking whether date is holiday, weekend or weekday If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then 'Inserting new sheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Renaming the active sheet ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End With Application.ScreenUpdating = True End Sub
Nếu bạn thích blog này, hãy chia sẻ nó với bạn bè của bạn trên Facebook và Facebook.
Chúng tôi rất muốn nghe ý kiến từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi [email protected]