Naudodami VBA sukurkite mėnesio dienos lapus be savaitgalių ir švenčių

Anonim

Šiame straipsnyje mes sukursime makrokomandą, kad sukurtume lapą kiekvienai nurodytos metų mėnesio savaitės dienai, išskyrus visas atostogų sąraše nurodytas datas.

Prieš paleidžiant makrokomandą, reikia trijų įėjimų. Turime nurodyti mėnesio numerį langelyje J10, metus langelyje J11 ir nurodyti atostogų datų sąrašą diapazone B16: B26.

Nurodę įvesties reikšmes, spustelėkite mygtuką Pateikti, kad paleistumėte makrokomandą.

Ši makrokomanda įterps naują lapą kiekvienai nurodyto mėnesio darbo dienai, išskyrus atostogų sąraše nurodytas datas.

Loginis paaiškinimas

Šioje makrokomandoje mes naudojome funkciją DateSerial, kad surastume paskutinę nurodyto mėnesio datą. Mes naudojome „FOR Loop“ ciklui nuo mėnesio pradžios iki paskutinės mėnesio datos. Mes naudojome funkciją Rasti, kad sužinotume, ar nurodyta data yra nurodytame atostogų sąraše.

Savaitės dienos funkcija naudojama kartu su teiginiu „If“, siekiant patikrinti, ar data yra darbo diena, ar savaitgalis. Jei teiginys įterps naują lapą tik tuo atveju, jei data yra savaitės diena ir jos nėra atostogų sąraše. Kaip matyti aukščiau esančioje ekrano kopijoje, 6 lapastūkst Gruodis nėra sukurtas, nes 6tūkst Gruodis įtrauktas į atostogų sąrašą.

Sekite toliau pateiktą kodą

 Parinktis „Explicit Sub MonthApply“) „Deklaruojantys kintamieji„ Dim DV “Kintamasis kaip data„ Dim Rng “Rasti kaip diapazonas„ Dim MonthNo “,„ YearNo “kaip sveikasis skaičius Dim StartDate, EndDate As Date“ Išjungus ekrano atnaujinimus „Application.ScreenUpdating = False With Sheets“ („Pagrindinis“) Gaunamas mėnuo ir metai nuo langelio J10 ir J11 iš pagrindinio lapo MonthNo = .Range ("J10"). Reikšmė YearNo = .Range ("J11"). Value 'Išvesties pradžios ir pabaigos data StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Žiūrėti visas nurodyto mėnesio datas DVariable = StartDate To EndDate' Sužinojimas, ar data pažymėta kaip atostogų Nustatykite RngFind = .Range ("B16: B26"). Find ( DVariable) "Tikrinimas, ar data yra atostogos, savaitgalis ar darbo diena Jei RngFind yra nieko ir savaitės diena (DVariable, 2) <6 Tada" Įterpkite naują lapą po paskutinio darbalapio darbalapio darbalapių. Pridėti po: = darbalapiai (darbalapiai. Skaičius) " Aktyvaus lapo pervardijimas ActiveSheet.Name = Formatas (DV kintamas, "dd.mm.yy") Pabaiga, jei kitas DV kintamasis. Pasirinkite Pabaigos W ith Application.ScreenUpdating = Tikrasis pabaiga 

Jei jums patiko šis tinklaraštis, pasidalykite juo su draugais „Facebook“. Be to, mus galite sekti „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime pagerinti savo darbą ir padaryti jį geresnį. Rašykite mums el