Creați foi de zi ale unei luni fără weekend și sărbători folosind VBA

Anonim

În acest articol, vom crea o macro pentru a crea o foaie pentru fiecare zi săptămânală pentru luna specificată a anului specificat, excluzând toate datele specificate în lista de sărbători.

Înainte de a rula macro-ul, sunt necesare trei intrări. Trebuie să specificăm numărul lunii în celula J10, anul în celula J11 și să specificăm lista de date de sărbătoare în intervalul B16: B26.

După specificarea valorilor de intrare, faceți clic pe butonul de trimitere pentru a rula macro-ul.

Această macrocomandă va insera o foaie nouă pentru fiecare zi săptămânală pentru luna specificată, cu excepția datelor specificate în lista de sărbători.

Explicație logică

În această macro, am folosit funcția DateSerial pentru a găsi ultima dată a lunii specificate. Am folosit FOR Loop pentru a face o buclă de la data de începere a lunii până la ultima dată a lunii. Am folosit funcția Găsiți pentru a afla dacă data utilizată există în lista de sărbători specificată.

Funcția zilei săptămânii este utilizată împreună cu declarația If pentru a verifica dacă o dată este în timpul săptămânii sau în weekend. Declarația If va introduce o foaie nouă numai dacă data este o zi săptămânală și nu există în lista de sărbători. După cum se poate vedea în captura de ecran de mai sus, foaia pentru 6a Decembrie nu este creat, ca 6a Decembrie este prezent pe lista de sărbători.

Vă rugăm să urmați codul de mai jos

 Opțiune Explicit Sub Lună Aplicați () 'Declararea variabilelor Dim DV Variabil ca dată Dim Rng Găsiți ca interval Dim lună Nu, An Nu ca număr întreg Dim StartDate, EndDate as Data' Dezactivarea actualizărilor ecranului Application.ScreenUpdating = False cu foi de lucru („Principal”) „Obținerea lunii și an din celula J10 și J11 din foaia „Principală” Nr.Lună = .Rang („J10"). Valoare AnulNr = .Rang („J11"). Valoarea 'Derivarea datei de început și sfârșit StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Buclă prin toate datele din luna specificată Pentru DVariable = StartDate To EndDate' Găsirea dacă data este marcată ca sărbătoare Set RngFind = .Range ("B16: B26"). Find ( DVariable) "Verificarea dacă data este de sărbătoare, weekend sau zi de săptămână Dacă RngFind is Nothing And Weekday (DVariable, 2) <6 Apoi" Inserarea unei noi foi după ultima foaie de lucru în registrul de lucru Worksheets. Adăugați după: = Worksheets (Worksheets.Count) " Redenumirea foii active ActiveSheet.Name = Format (DVariable, "dd.mm.yy") End If Next DVariable. Selectați End W ith Application.ScreenUpdating = True End Sub 

Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.

Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail