Σε αυτό το άρθρο, θα δημιουργήσουμε μια μακροεντολή για τη δημιουργία ενός φύλλου για κάθε ημέρα της εβδομάδας για τον καθορισμένο μήνα του συγκεκριμένου έτους, εξαιρουμένων όλων των ημερομηνιών που καθορίζονται στη λίστα των διακοπών.
Πριν από την εκτέλεση της μακροεντολής, απαιτούνται τρεις είσοδοι. Πρέπει να καθορίσουμε τον αριθμό μήνα στο κελί J10, το έτος στο κελί J11 και να καθορίσουμε τη λίστα ημερομηνιών διακοπών στο εύρος B16: B26.
Αφού καθορίσετε τις τιμές εισαγωγής, κάντε κλικ στο κουμπί υποβολής για να εκτελέσετε τη μακροεντολή.
Αυτή η μακροεντολή θα εισαγάγει ένα νέο φύλλο για κάθε εργάσιμη ημέρα για τον καθορισμένο μήνα, εξαιρουμένων των ημερομηνιών που καθορίζονται στη λίστα διακοπών.
Λογική εξήγηση
Σε αυτήν τη μακροεντολή, χρησιμοποιήσαμε τη λειτουργία DateSerial για να βρούμε την τελευταία ημερομηνία του καθορισμένου μήνα. Έχουμε χρησιμοποιήσει το βρόχο FOR για να βρόχο από την ημερομηνία έναρξης του μήνα έως την τελευταία ημερομηνία του μήνα. Χρησιμοποιήσαμε τη λειτουργία Εύρεση για να διαπιστώσουμε εάν υπάρχει ημερομηνία που χρησιμοποιείται στην καθορισμένη λίστα διακοπών.
Η συνάρτηση της εβδομάδας χρησιμοποιείται μαζί με τη δήλωση If για να ελέγξετε αν μια ημερομηνία είναι καθημερινή ή Σαββατοκύριακο. Εάν η δήλωση θα εισαγάγει ένα νέο φύλλο μόνο εάν η ημερομηνία είναι καθημερινή και δεν υπάρχει στη λίστα των διακοπών. Όπως μπορεί να δει κανείς στο παραπάνω στιγμιότυπο οθόνης, φύλλο για 6ου Ο Δεκέμβριος δεν δημιουργείται, καθώς 6ου Ο Δεκέμβριος είναι παρών στη λίστα των διακοπών.
Ακολουθήστε παρακάτω για τον κωδικό
Option Explicit Sub MonthApply () 'Δήλωση μεταβλητών Dim DVariable As Date Dim RngΒρείτε ως εύρος Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date' Απενεργοποίηση της ενημέρωσης οθόνης Application.ScreenUpdating = Λάθος με φύλλα εργασίας ("Κύρια") "Λήψη μήνα και έτος από το κελί J10 και J11 από το φύλλο "Κύριο" ΜήναςNo =. Εύρος ("J10"). Τιμή YearNo =. Εύρος ("J11"). Τιμή "Ημερομηνία έναρξης και λήξης StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Looping all the dats in the specified month For DVariable = StartDate To EndDate' Εντοπισμός αν η ημερομηνία έχει επισημανθεί ως αργία Ορισμός RngFind = .Range ("B16: B26"). Εύρεση ( DVariable) "Έλεγχος αν η ημερομηνία είναι αργία, Σαββατοκύριακο ή εργάσιμη ημέρα Εάν το RngFind Is Nothing And Weekday (DVariable, 2) <6 Στη συνέχεια" Εισαγωγή νέου φύλλου μετά το τελευταίο φύλλο εργασίας στο φύλλο εργασίας. Φύλλα εργασίας. Προσθήκη μετά: = Φύλλα εργασίας (Φύλλα εργασίας. Αριθμός) " Μετονομασία του ενεργού φύλλου ActiveSheet.Name = Format (DVariable, "dd.mm.yy") End If Next DVariable. Επιλέξτε End W ith Application.ScreenUpdating = True End Sub
Αν σας άρεσε αυτό το blog, μοιραστείτε το με τους φίλους σας στο Facebook. Επίσης, μπορείτε να μας ακολουθήσετε στο Twitter και το Facebook.
Θα θέλαμε πολύ να σας ακούσουμε, ενημερώστε μας πώς μπορούμε να βελτιώσουμε το έργο μας και να το κάνουμε καλύτερο για εσάς. Γράψτε μας στον ιστότοπο email