Cum să duplicați o foaie în Excel cu VBA

  • Imparte Asta
Michael Brown

Tutorialul oferă o colecție de macro-uri pentru duplicarea foilor în Excel: copierea și redenumirea pe baza valorii celulei, copierea mai multor foi, copierea unei foi de calcul active într-un alt fișier fără a o deschide și multe altele.

Copierea manuală a foilor în Excel este destul de rapidă și simplă... dacă este efectuată doar o dată sau de două ori. Duplicarea mai multor foi de mai multe ori este plictisitoare și consumatoare de timp. Pe această pagină, veți găsi o mână de macro-uri utile pentru a automatiza această sarcină.

    Excel VBA pentru a copia foaia în noul registru de lucru

    Acest macro simplu de un singur rând face exact ceea ce sugerează numele său - copiază foaia activă într-un nou registru de lucru.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Copierea mai multor foi în Excel cu VBA

    Dacă doriți să copiați mai multe foi din registrul de lucru activ într-unul nou, selectați toate foile de lucru care vă interesează și rulați această macro:

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA pentru a copia foaia în alt registru de lucru

    În funcție de locul în care doriți să inserați foaia copiată, utilizați una dintre următoarele macrocomenzi.

    Copierea foii la începutul unui alt registru de lucru

    Această macrocopiatoare copiază foaia activă înaintea tuturor celorlalte foi de calcul din fișierul de destinație, Carte1 În acest exemplu, pentru a copia într-un alt fișier, înlocuiți "Book1.xlsx" cu numele complet al registrului de lucru țintă.

    Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheets(1) End Sub

    Copierea foii la sfârșitul unui alt registru de lucru

    Această bucată de cod dublează foaia de lucru activă și plasează copia la sfârșitul fișierului Carte1 Din nou, nu uitați să înlocuiți "Book1.xlsx" cu numele registrului de lucru de destinație.

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx" ).Sheets(Workbooks( "Book1.xlsx" ).Worksheets.Count) End Sub

    Notă. Pentru ca macrourile să funcționeze, registrul de lucru țintă trebuie să fie salvat pe hard disk sau în rețea.

    Copierea foii într-un registru de lucru selectat

    Pentru a putea copia foaia curentă în orice registru de lucru deschis, puteți crea un UserForm (numit UserForm1 ) cu un ListBox control ( numit ListBox1 ) și două butoane:

    Apoi, faceți dublu clic pe formular și lipiți codul de mai jos în fereastra Code:

    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 EndSub

    Odată ce UserForm este instalat, puteți utiliza una dintre următoarele macro-uri pentru a copia foaia activă în registrul de lucru ales de dumneavoastră.

    Copiază foaia în începutul registrului de lucru selectat :

    Public Sub CopySheetToBeginningAnotherWorkbook() Încărcați UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Descărcați UserForm1 End Sub

    Copiază foaia în sfârșitul registrului de lucru selectat :

    Public Sub CopySheetToEndAnotherWorkbook() Încărcați 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

    Atunci când este rulată în Excel, macroul vă va afișa o listă cu toate registrele de lucru deschise în prezent. Selectați-o pe cea necesară și faceți clic pe OK:

    Macro Excel pentru a copia foaia și a redenumi

    Atunci când copiați o foaie în Excel, replica primește un nume în format implicit, cum ar fi Foaie1 (2) Următoarele macrocomenzi vă pot scuti de a schimba manual numele implicit.

    Acest cod dublează foaia de lucru activă, numește copia "Foaie de test" (puteți să o înlocuiți cu orice alt nume doriți) și plasează foaia copiată la sfârșitul registrului de lucru curent.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End Sub

    Pentru a permite utilizatorului să specificați numele pentru foaia copiată , utilizați acest cod:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Introduceți numele pentru foaia de lucru copiată" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    La rulare, macroul afișează următoarea casetă de introducere a datelor, în care trebuie să introduceți numele dorit și să apăsați OK:

    Macro Excel pentru a copia foaia și a redenumi pe baza valorii celulei

    În unele situații, poate fi mai convenabil să denumiți o copie cu o anumită valoare a celulei, de exemplu, un antet de coloană. În acest caz, este suficient să luați codul de mai sus și să furnizați valoarea rubricii celula selectată în prezent Ca și în exemplul anterior, copia va fi plasată la sfârșitul registrului de lucru activ.

    Cea mai dificilă parte ar fi ca utilizatorii dvs. să selecteze întotdeauna celula corectă înainte de a rula macroul :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Introduceți numele pentru foaia de lucru copiată" , "Copiază foaia de lucru" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Alternativ, puteți codificați în mod greșit adresa celulei prin care ar trebui să se numească copia, celula A1 în codul de mai jos. Pentru a denumi foaia de lucru copiată pe baza unei alte celule, înlocuiți A1 cu o referință de celulă corespunzătoare.

    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

    Macro pentru a copia foaia de lucru într-un registru de lucru închis

    Această macrocopiator copiază foaia activă la sfârșitul unui registru de lucru închis. Numele unui alt registru de lucru nu este specificat în cod - macroul va deschide fereastra standard Windows Explorer și vă va permite să alegeți orice fișier de destinație:

    După ce selectați fișierul și faceți clic pe Deschideți , macroul va copia foaia activă și va închide automat registrul de lucru țintă.

    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 Sub

    Excel VBA pentru a copia foaia din alt registru de lucru fără a deschide

    Această macro vă permite să copiați o foaie de lucru dintr-un alt fișier Excel fără a o deschide. Foaia copiată va fi inserată la sfârșitul registrului de lucru curent.

    Amintiți-vă doar să faceți câteva înlocuiri în cod:

    • C:\Users\XXX\Documents\Target_Book.xlsx ar trebui să fie schimbat cu calea și numele real al registrului de lucru din care doriți să copiați o foaie.
    • Sheet1 trebuie înlocuit cu numele foii pe care doriți să o copiați.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Set sourceBook = Workbooks. Open ("C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheets( "Sheet1" ).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    Excel VBA pentru a duplica foaia de mai multe ori

    Uneori, este posibil să aveți nevoie să duplicați aceeași foaie de mai multe ori, de exemplu, pentru a testa diferite formule pe același set de date. Acest lucru se poate realiza cu ușurință cu următoarea macro.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Câte copii ale foii active doriți să faceți?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Deschideți foaia originală, rulați macroul, specificați câte copii ale foii active doriți să faceți și faceți clic pe OK :

    Cum să duplicați foile în Excel cu VBA

    Pentru a copia o foaie în Excel cu una dintre macrourile de mai sus, puteți fie să inserați codul VBA în propria carte, fie să rulați o macro din exemplul nostru de registru de lucru.

    Cum să adăugați o macro la registrul de lucru

    Pentru a insera codul în registrul de lucru, efectuați următorii pași:

    1. Deschideți foaia de lucru pe care doriți să o copiați.
    2. Apăsați Alt + F11 pentru a deschide editorul Visual Basic.
    3. În panoul din stânga, faceți clic dreapta pe Această carte de lucru , apoi faceți clic pe Introduceți > Modul .
    4. Lipiți codul în fereastra Code.
    5. Apăsați F5 pentru a rula macroul.

    Pentru instrucțiuni detaliate pas cu pas, consultați Cum să introduceți cod VBA în Excel.

    Cum se execută o macro din registrul de lucru de exemplu

    Alternativ, puteți descărca exemplul nostru de registru de lucru pentru a duplica foile Excel și puteți rula codul de acolo.

    Exemplarul de registru de lucru conține următoarele macrocomenzi:

    CopySheetToNewWorkbook - copiază foaia de lucru curentă într-un nou registru de lucru.

    CopySelectedSheets - copiază mai multe foi pe care le selectați într-un nou registru de lucru.

    CopySheetToBeginningAnotherWorkbook - copiază foaia activă la începutul unui alt registru de lucru.

    CopySheetToEndAnotherWorkbook - copiază foaia activă la sfârșitul unui alt fișier Excel.

    CopySheetAndRename - duplică foaia curentă, o redenumește după cum a fost specificat de utilizator și plasează copia după toate celelalte foi din registrul de lucru curent.

    CopySheetAndRenamePredefined - duplică foaia activă, atribuie un nume codificat în mod greșit copiei și o plasează la sfârșitul registrului de lucru curent.

    CopySheetAndRenameByCell - face o copie a foii active și o redenumește pe baza valorii celulei selectate.

    Copiază foaia și redenumește după celulă2 - copiază foaia activă și o redenumește pe baza adresei de celulă codificate.

    CopySheetToClosedWorkbook - vă permite să copiați o foaie într-un registru de lucru închis.

    CopySheetFromClosedWorkbook - vă permite să copiați o foaie dintr-un alt fișier Excel fără a o deschide.

    DuplicateSheetMultipleTimes - vă permite să duplicați o foaie în Excel de mai multe ori.

    Pentru a rula macroul în Excel, trebuie doar să faceți următoarele:

    1. Deschideți registrul de lucru descărcat și activați conținutul, dacă vi se solicită.
    2. Deschideți propriul registru de lucru și navigați până la foaia pe care doriți să o copiați.
    3. În foaia de calcul, apăsați Alt + F8 , selectați macroul de interes și faceți clic pe Rulați .

    Iată cum poți duplica o foaie în Excel cu VBA. Îți mulțumesc pentru lectură și sper să ne vedem pe blog săptămâna viitoare!

    Michael Brown este un pasionat de tehnologie dedicat, cu o pasiune pentru simplificarea proceselor complexe folosind instrumente software. Cu mai mult de un deceniu de experiență în industria tehnologiei, el și-a perfecționat abilitățile în Microsoft Excel și Outlook, precum și în Google Sheets și Docs. Blogul lui Michael este dedicat împărtășirii cunoștințelor și experienței sale cu alții, oferind sfaturi și tutoriale ușor de urmat pentru îmbunătățirea productivității și eficienței. Indiferent dacă sunteți un profesionist experimentat sau un începător, blogul lui Michael oferă informații valoroase și sfaturi practice pentru a profita la maximum de aceste instrumente software esențiale.