Excel - Αυτόματη γεννήτρια φύλλου εργασίας

Το Excel είναι ένα εύχρηστο εργαλείο για την τραγάνισμα και την αναπαράσταση δεδομένων. Όταν συνδυάζεται με VBA γίνεται μια εξαιρετικά δυναμική εφαρμογή που μπορεί να προσαρμοστεί για αμέτρητα σενάρια. Ένα τέτοιο παράδειγμα είναι μια περίπτωση όπου μπορεί κανείς να δημιουργήσει μια αυτόματη γεννήτρια φύλλων εργασίας που θα δημιουργούνται κάθε φορά που μια εγγραφή προστίθεται ή διαγράφεται από μια κύρια λίστα . Ο κώδικας VBA λειτουργεί με τέτοιο τρόπο ώστε η αυτόματη γεννήτρια να ψάχνει για τα ονόματα στο κύριο φύλλο και να μετακινείται μέσω όλων των φύλλων του βιβλίου εργασίας. Όπου προσαρμόζεται ένα προκαθορισμένο κριτήριο, μπορεί να προσθέσει ή να διαγράψει φύλλα εργασίας με βάση την είσοδο του χρήστη .

  • Θέμα
  • Λύση
  • Σημείωση

Θέμα

Έχω ένα βιβλίο εργασίας με ένα φύλλο ονομάτων που έχει όλες τις πληροφορίες που χρειάζομαι να βάλω στο timecard και ένα master sheet με το timecard που θα συμπληρώσει ο υπάλληλος. Πώς μπορώ να δημιουργήσω αυτόματα μια νέα σειρά timecard κάθε εβδομάδα; Χρειάζομαι να ονομάσω τα φύλλα με το όνομα του υπαλλήλου στην καρτέλα ώστε να μπορέσουν να βρουν την κάρτα τους και να βάλουν όλες τις πληροφορίες από το φύλλο επωνυμίας στην κάρτα τους. Καθώς τα νέα ονόματα προστίθενται ή διαγράφονται στη λίστα που θα είναι αλφαβητική, θα κάνει τη νέα κάρτα με τα ονόματα και θα δημιουργήσει τις σωστές πληροφορίες για κάθε κάρτα από το φύλλο λίστας. Πως μπορώ να το κάνω? Είμαι νέος σε αυτό και αυτό είναι το τελευταίο πράγμα που πρέπει να γίνει.

Λύση

Δεν έχω ιδέα πώς μοιάζει το όνομά σας και το πρότυπο

Κάντε ένα αντίγραφο ασφαλείας του αρχείου σας

Διαβάστε τον κώδικα και κάντε τις κατάλληλες αλλαγές, έχω σχολιάσει τα πάντα για εσάς.

  • Πατήστε ALT + F11 για να ανοίξετε vbe
  • Κάντε κλικ στο Εισαγωγή και επιλέξτε την ενότητα
  • Αντιγράψτε και επικολλήστε τον παρακάτω κώδικα:

 Sub generateTimeSheets () Dim sMasterNameSheet Ως όνομα στοιχείου του φύλλου που έχει πληροφορίες για τους υπαλλήλους Dim sTimeSheetTempate Ως όνομα στοιχείου του φύλλου που είναι πρότυπο timecard Dim iMaxNameCol Ως ακεραιότητα 'ο αριθμός στήλης κάτω από τον οποίο υπάρχουν πιο πυκνοκατοικημένες σειρές Dim lMaxNameRow As Integer Dim sTemp As String 'μια μεταβλητή temp Dim vWarning ως προειδοποίηση για την παραλλαγή' ######################################################################################## ################### ΕΓΚΑΤΑΣΤΑΣΗ ΕΔΩ ΓΙΑ ΝΑ ΚΑΝΕΤΕ ΤΙΣ ΑΝΑΓΚΕΣ ΣΑΣ "######################## ###################################### sMasterNameSheet = "Ονόματα" 'αυτό είναι το όνομα του φύλλου που έχει πληροφορίες για τους εργαζόμενους sTimeSheetTempate = "Πρότυπο Timesheet "" Αυτό είναι το όνομα του φύλλου που είναι πρότυπο κατανομής χρόνου Dim iNameCol As Integer, το οποίο στο δελτίο πληροφοριών των υπαλλήλων έχει τις πληροφορίες του ονόματος (προσθέστε συμβολικές άλλες στήλες) Dim sEmpName As String 'όνομα του υπαλλήλου iMaxNameCol = 1' φύλλο εργαζομένων έχει μέγιστο αριθμό γραμμών που συμπληρώνονται στο iNameCol = 1 'αυτή είναι η στήλη όπου empl oyee όνομα βρέθηκε vWarning = MsgBox ("Αυτό θα διαγράψει όλα τα φύλλα εκτός από" _ & sMasterNameSheet & "και" & sTimeSheetTempate _ & ". Πατήστε Ναι για να συνεχίσετε ", vbCritical + vbDefaultButton2 + vbYesNo) 'δεν επιθυμείτε να συνεχίσετε Εάν το vWarning vbYes Στη συνέχεια Exit Sub' για να διαγράψετε όλα τα φύλλα εκτός από τα δύο φύλλα 'move through all sheets in book Για κάθε φύλλο mysheet In Sheets' loop sTemp = mysheet.Name 'αν η εξέταση φύλλου δεν είναι δύο κρίσιμα φύλλα και, στη συνέχεια, να την διαγράψετε Εάν (UCase (Trim (sTemp)) UCase (Trim (sMasterNameSheet))) και UCase sTimeSheetTempate)))) Στη συνέχεια, mysheet.Delete End Εάν τα επόμενα φύλλα (sMasterNameSheet) .Επιλέξτε 'μάθετε τον μέγιστο αριθμό γραμμών lMaxNameRow = Κύτταρα (65536, iMaxNameCol) .End (xlUp) .Row sTemp = sTimeSheetTempate Για lThisRow = 2 Για lMaxNameRow sEmpName = Κύτταρα (lThisRow, iNameCol) sEmpName = Περικοπή (sEmpName) Εάν (sEmpName "") Στη συνέχεια φύλλα (sTimeSheetTempate) .Επιλέξτε φύλλα (sTimeSheetTempate). πρέπει να κάνετε τις διορθώσεις 'σε αυτή τη γραμμή δειγμάτων λέει ότι στο πρότυπο που μόλις αντιγράψατε, στο κελί A1' Βρίσκεται στη στήλη Α των φύλλων φύλλων εργαζομένων (sEmpName) .Range ("A1") = Φύλλα (sMasterNameSheet) .Range ("A" & lThisRow) End If nextFor: Next End Sub 
  • 4. Πατήστε F5 για να το εκτελέσετε

Σημείωση

Χάρη στην rizvisa1 για αυτή την άκρη στο φόρουμ.

Προηγούμενο Άρθρο Επόμενο Άρθρο

Οι Καλύτερες Συμβουλές