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.

ArrowMain

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ễ.

ArrowAfterRunningMacro

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]