Създавайте дневни листове за един месец без почивни и празнични дни, използвайки VBA

Anonim

В тази статия ще създадем макрос за създаване на лист за всеки делничен ден за посочения месец от посочената година, с изключение на всички дати, посочени в списъка с ваканции.

Преди да стартирате макроса, са необходими три входа. Трябва да посочим номера на месеца в клетка J10, година в клетка J11 и да посочим списъка с дати за почивка в диапазона B16: B26.

След като посочите входните стойности, щракнете върху бутона за изпращане, за да стартирате макроса.

Този макрос ще вмъкне нов лист за всеки делничен ден за посочения месец, с изключение на датите, посочени в списъка с ваканции.

Логично обяснение

В този макрос използвахме функция DateSerial, за да намерим последната дата на посочения месец. Използвахме FOR Loop за цикъл от началната дата на месеца до последната дата на месеца. Използвахме функцията Find, за да намерим дали използваната дата съществува в посочения списък с ваканции.

Функцията Weekday се използва заедно с оператора If, за да провери дали датата е делничен или уикенд. Ако изявлението ще вмъкне нов лист само ако датата е делничен ден и тя не съществува в списъка с ваканции. Както можете да видите на горната екранна снимка, лист за 6th Декември не е създаден, тъй като 6th Декември присъства в празничния списък.

Моля, следвайте кода по -долу

 Опция Изричен подмесецApply () „Деклариране на променливи Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Деактивиране на актуализациите на екрана Application.ScreenUpdating = False с работни листове (" Main ")" Получаване на месец и година от клетка J10 и J11 от лист "Основен" MonthNo = .Range ("J10"). Value YearNo = .Range ("J11"). Value 'Извличане на началната и крайната дата StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Циклично преминаване през всички дати в посочения месец За DVariable = StartDate To EndDate' Намиране дали датата е маркирана като почивка Задайте RngFind = .Range ("B16: B26"). Find ( DVariable) 'Проверка дали датата е празник, уикенд или делничен ден, ако RngFind не е нищо и делничен ден (DVariable, 2) <6 След това' Вмъкване на нов лист след последния работен лист в работните листове на работната книга. Добавяне след: = работни листове (работни листове. Брой) ' Преименуване на активния лист ActiveSheet.Name = Format (DVariable, "dd.mm.yy") End If Next DVariable. Изберете End W i Application.ScreenUpdating = True End Sub 

Ако този блог ви е харесал, споделете го с приятелите си във Facebook. Също така можете да ни следвате в Twitter и Facebook.

Ще се радваме да чуем от вас, уведомете ни как можем да подобрим работата си и да я направим по -добра за вас. Пишете ни на имейл сайта