Πίνακας περιεχομένων
Το σεμινάριο παρέχει μια συλλογή μακροεντολών για την αντιγραφή φύλλων στο Excel: αντιγραφή και μετονομασία με βάση την τιμή του κελιού, αντιγραφή πολλαπλών φύλλων, αντιγραφή ενός ενεργού φύλλου εργασίας σε άλλο αρχείο χωρίς να το ανοίξετε και πολλά άλλα.
Η χειροκίνητη αντιγραφή φύλλων στο Excel είναι αρκετά γρήγορη και απλή... αν εκτελείται μόνο μία ή δύο φορές. Η αντιγραφή πολλών φύλλων πολλές φορές είναι βαρετή και χρονοβόρα. Σε αυτή τη σελίδα, θα βρείτε μια χούφτα χρήσιμες μακροεντολές για την αυτοματοποίηση αυτής της εργασίας.
Excel VBA για την αντιγραφή φύλλου σε νέο βιβλίο εργασίας
Αυτή η απλούστερη μακροεντολή μιας γραμμής κάνει ακριβώς αυτό που υποδηλώνει το όνομά της - αντιγράφει το ενεργό φύλλο σε ένα νέο βιβλίο εργασίας.
Public Sub CopySheetToNewWorkbook() activeSheet.Copy End SubΑντιγραφή πολλαπλών φύλλων στο Excel με VBA
Αν θέλετε να αντιγράψετε πολλά φύλλα από το ενεργό βιβλίο εργασίας σε ένα νέο, επιλέξτε όλα τα φύλλα εργασίας που σας ενδιαφέρουν και εκτελέστε αυτή τη μακροεντολή:
Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End SubExcel VBA για την αντιγραφή φύλλου σε άλλο βιβλίο εργασίας
Ανάλογα με το πού θέλετε να εισαγάγετε το αντιγραμμένο φύλλο, χρησιμοποιήστε μία από τις ακόλουθες μακροεντολές.
Αντιγραφή φύλλου στην αρχή ενός άλλου βιβλίου εργασίας
Αυτή η μακροεντολή αντιγράφει το ενεργό φύλλο πριν από όλα τα άλλα φύλλα εργασίας στο αρχείο προορισμού, Βιβλίο1 Σε αυτό το παράδειγμα, για να αντιγράψετε σε άλλο αρχείο, αντικαταστήστε το "Book1.xlsx" με το πλήρες όνομα του βιβλίου εργασίας-στόχου.
Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheets(1) End SubΑντιγραφή φύλλου στο τέλος ενός άλλου βιβλίου εργασίας
Αυτό το κομμάτι κώδικα αντιγράφει το ενεργό φύλλο εργασίας και τοποθετεί το αντίγραφο στο τέλος του Βιβλίο1 Και πάλι, θυμηθείτε να αντικαταστήσετε το "Book1.xlsx" με το όνομα του βιβλίου εργασίας προορισμού σας.
Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx" ).Sheets(Workbooks( "Book1.xlsx" ).Worksheets.Count) End SubΣημείωση: Για να λειτουργήσουν οι μακροεντολές, το βιβλίο εργασίας-στόχος πρέπει να είναι αποθηκευμένο στον σκληρό σας δίσκο ή στο δίκτυό σας.
Αντιγραφή φύλλου σε επιλεγμένο βιβλίο εργασίας
Για να μπορείτε να αντιγράφετε το τρέχον φύλλο σε οποιοδήποτε ανοιχτό βιβλίο εργασίας, μπορείτε να δημιουργήσετε ένα UserForm (με όνομα UserForm1 ) με ένα ListBox έλεγχος ( που ονομάζεται ListBox1 ) και δύο κουμπιά:
Στη συνέχεια, κάντε διπλό κλικ στη φόρμα και επικολλήστε τον παρακάτω κώδικα στο παράθυρο κώδικα:
Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide EndΥποΜε το UserForm στη θέση του, μπορείτε να χρησιμοποιήσετε μία από τις παρακάτω μακροεντολές για να αντιγράψετε το ενεργό φύλλο στο βιβλίο εργασίας της επιλογής σας.
Αντιγράψτε το φύλλο στο αρχή του επιλεγμένου βιβλίου εργασίας :
Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End SubΑντιγράψτε το φύλλο στο τέλος του επιλεγμένου βιβλίου εργασίας :
Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Unload UserForm1 End SubΌταν εκτελεστεί στο Excel, η μακροεντολή θα σας εμφανίσει μια λίστα με όλα τα ανοιχτά βιβλία εργασίας. Επιλέγετε αυτό που χρειάζεστε και κάνετε κλικ στο OK:
Μακροεντολή του Excel για αντιγραφή φύλλου και μετονομασία
Όταν αντιγράφετε ένα φύλλο στο Excel, το αντίγραφο λαμβάνει ένα όνομα με την προεπιλεγμένη μορφή όπως Φύλλο1 (2) Οι παρακάτω μακροεντολές μπορούν να σας απαλλάξουν από τον κόπο να αλλάξετε το προεπιλεγμένο όνομα χειροκίνητα.
Αυτός ο κώδικας αντιγράφει το ενεργό φύλλο εργασίας, ονομάζει το αντίγραφο ως "Φύλλο δοκιμής" (μπορείτε να το αντικαταστήσετε με οποιοδήποτε άλλο όνομα θέλετε) και τοποθετεί το αντιγραμμένο φύλλο στο τέλος του τρέχοντος βιβλίου εργασίας.
Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End SubΓια να επιτραπεί στο χρήστη να καθορίστε το όνομα του αντιγραμμένου φύλλου , χρησιμοποιήστε αυτόν τον κωδικό:
Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Enter the name for the copied worksheet" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End SubΚατά την εκτέλεση, η μακροεντολή εμφανίζει το ακόλουθο πλαίσιο εισαγωγής, στο οποίο πληκτρολογείτε το επιθυμητό όνομα και πατάτε OK:
Μακροεντολή του Excel για αντιγραφή φύλλου και μετονομασία με βάση την τιμή του κελιού
Σε ορισμένες περιπτώσεις, μπορεί να είναι πιο βολικό να ονομάσετε ένα αντίγραφο με μια συγκεκριμένη τιμή κελιού, για παράδειγμα, μια επικεφαλίδα στήλης. Για αυτό, απλά παίρνετε τον παραπάνω κώδικα και παρέχετε την τιμή του το τρέχον επιλεγμένο κελί στο πλαίσιο εισαγωγής αυτόματα. Όπως και στο προηγούμενο παράδειγμα, το αντίγραφο θα τοποθετηθεί στο τέλος του ενεργού βιβλίου εργασίας.
Το πιο δύσκολο κομμάτι θα ήταν να έχετε τους χρήστες σας να επιλέγουν πάντα το σωστό κελί πριν από την εκτέλεση της μακροεντολής :)
Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Enter the name for the copied worksheet" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End SubΕναλλακτικά, μπορείτε να σκληρός κώδικας της διεύθυνσης του κελιού με το οποίο πρέπει να ονομαστεί το αντίγραφο, το κελί A1 στον παρακάτω κώδικα. Για να ονομαστεί το αντιγραμμένο φύλλο εργασίας με βάση ένα άλλο κελί, αντικαταστήστε το A1 με μια κατάλληλη αναφορά κελιού.
Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range( "A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range( "A1" ).Value End If wks.Activate End SubΜακροεντολή για την αντιγραφή φύλλου εργασίας σε ένα κλειστό βιβλίο εργασίας
Αυτή η μακροεντολή αντιγράφει το ενεργό φύλλο στο τέλος ενός κλειστού βιβλίου εργασίας. Το όνομα ενός άλλου βιβλίου εργασίας δεν καθορίζεται στον κώδικα - η μακροεντολή θα ανοίξει το τυπικό παράθυρο της Εξερεύνησης των Windows και θα σας επιτρέψει να επιλέξετε οποιοδήποτε αρχείο προορισμού:
Αφού επιλέξετε το αρχείο και κάνετε κλικ στο Ανοίξτε το , η μακροεντολή θα αντιγράψει το ενεργό φύλλο και θα κλείσει αυτόματα το βιβλίο εργασίας προορισμού.
Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Files (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks. Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)closedBook. Close ( True ) Application.ScreenUpdating = True End If End SubExcel VBA για την αντιγραφή φύλλου από άλλο βιβλίο εργασίας χωρίς άνοιγμα
Αυτή η μακροεντολή σας επιτρέπει να αντιγράψετε ένα φύλλο εργασίας από ένα άλλο αρχείο Excel χωρίς να το ανοίξετε. Το αντιγραμμένο φύλλο θα εισαχθεί στο τέλος του τρέχοντος βιβλίου εργασίας.
Απλά θυμηθείτε να κάνετε μερικές αντικαταστάσεις στον κώδικα:
- C:\Users\XXX\Documents\Target_Book.xlsx θα πρέπει να αλλάξει με την πραγματική διαδρομή και το όνομα του βιβλίου εργασίας από το οποίο θέλετε να αντιγράψετε ένα φύλλο.
- Το Sheet1 θα πρέπει να αντικατασταθεί με το όνομα του φύλλου που θέλετε να αντιγράψετε.
Excel VBA για να αντιγράψετε το φύλλο πολλές φορές
Μερικές φορές, μπορεί να χρειαστεί να αντιγράψετε το ίδιο φύλλο περισσότερες από μία φορές, για παράδειγμα για να δοκιμάσετε διαφορετικές φόρμουλες στο ίδιο σύνολο δεδομένων. Αυτό μπορεί να γίνει εύκολα με την ακόλουθη μακροεντολή.
Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Πόσα αντίγραφα του ενεργού φύλλου θέλετε να κάνετε;" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End SubΑνοίξτε το αρχικό φύλλο, εκτελέστε τη μακροεντολή, καθορίστε πόσα αντίγραφα του ενεργού φύλλου θέλετε να δημιουργήσετε και κάντε κλικ στο κουμπί OK :
Πώς να αντιγράψετε φύλλα στο Excel με VBA
Για να αντιγράψετε ένα φύλλο στο Excel με μια από τις παραπάνω μακροεντολές, μπορείτε είτε να εισαγάγετε τον κώδικα VBA στο δικό σας βιβλίο είτε να εκτελέσετε μια μακροεντολή από το βιβλίο εργασίας του δείγματός μας.
Πώς να προσθέσετε μια μακροεντολή στο βιβλίο εργασίας σας
Για να εισαγάγετε τον κώδικα στο βιβλίο εργασίας σας, εκτελέστε τα εξής βήματα:
- Ανοίξτε το φύλλο εργασίας που θέλετε να αντιγράψετε.
- Πατήστε Alt + F11 για να ανοίξετε τον επεξεργαστή της Visual Basic.
- Στο αριστερό παράθυρο, κάντε δεξί κλικ στο ThisWorkbook , και στη συνέχεια κάντε κλικ στο Εισαγωγή >, Ενότητα .
- Επικολλήστε τον κώδικα στο παράθυρο Κώδικας.
- Πατήστε F5 για να εκτελέσετε τη μακροεντολή.
Για λεπτομερείς οδηγίες βήμα προς βήμα, ανατρέξτε στην ενότητα Πώς να εισαγάγετε κώδικα VBA στο Excel.
Πώς να εκτελέσετε μια μακροεντολή από το βιβλίο εργασίας του δείγματός μας
Εναλλακτικά, μπορείτε να κατεβάσετε το δείγμα του βιβλίου εργασίας μας για την αντιγραφή φύλλων Excel και να εκτελέσετε τον κώδικα από εκεί.
Το βιβλίο εργασίας του δείγματος περιέχει τις ακόλουθες μακροεντολές:
CopySheetToNewWorkbook - αντιγράφει το τρέχον φύλλο εργασίας σε ένα νέο βιβλίο εργασίας.
CopySelectedSheets - αντιγράφει πολλαπλά φύλλα που επιλέγετε σε ένα νέο βιβλίο εργασίας.
CopySheetToBeginningAnotherWorkbook - αντιγράφει το ενεργό φύλλο στην αρχή ενός άλλου βιβλίου εργασίας.
CopySheetToEndAnotherWorkbook - αντιγράφει το ενεργό φύλλο στο τέλος ενός άλλου αρχείου Excel.
CopySheetAndRename - αντιγράφει το τρέχον φύλλο, το μετονομάζει όπως ορίζει ο χρήστης και τοποθετεί το αντίγραφο μετά από όλα τα άλλα φύλλα στο τρέχον βιβλίο εργασίας.
CopySheetAndRenamePredefined - αντιγράφει το ενεργό φύλλο, δίνει ένα σκληρά κωδικοποιημένο όνομα στο αντίγραφο και το τοποθετεί στο τέλος του τρέχοντος βιβλίου εργασίας.
CopySheetAndRenameByCell - δημιουργεί ένα αντίγραφο του ενεργού φύλλου και το μετονομάζει με βάση την τιμή του επιλεγμένου κελιού.
CopySheetAndRenameByCell2 - αντιγράφει το ενεργό φύλλο και το μετονομάζει με βάση τη σκληρά κωδικοποιημένη διεύθυνση κελιού.
CopySheetToClosedWorkbook - σας επιτρέπει να αντιγράψετε φύλλο σε ένα κλειστό βιβλίο εργασίας.
CopySheetFromClosedWorkbook - σας επιτρέπει να αντιγράψετε ένα φύλλο από ένα άλλο αρχείο Excel χωρίς να το ανοίξετε.
DuplicateSheetMultipleTimes - σας επιτρέπει να αντιγράψετε ένα φύλλο στο Excel πολλές φορές.
Για να εκτελέσετε τη μακροεντολή στο Excel σας, απλώς κάντε τα εξής:
- Ανοίξτε το βιβλίο εργασίας που κατεβάσατε και ενεργοποιήστε το περιεχόμενο αν σας ζητηθεί.
- Ανοίξτε το δικό σας βιβλίο εργασίας και μεταβείτε στο φύλλο που θέλετε να αντιγράψετε.
- Στο φύλλο εργασίας σας, πατήστε Alt + F8 , επιλέξτε τη μακροεντολή που σας ενδιαφέρει και κάντε κλικ στο κουμπί Εκτέλεση .
Έτσι μπορείτε να αντιγράψετε ένα φύλλο στο Excel με το VBA. Σας ευχαριστώ για την ανάγνωση και ελπίζω να σας δω στο blog μας την επόμενη εβδομάδα!