Com duplicar un full a Excel amb VBA

  • Comparteix Això
Michael Brown

El tutorial ofereix una col·lecció de macros per duplicar fulls a Excel: copiar i canviar el nom en funció del valor de la cel·la, copiar diversos fulls, copiar un full de treball actiu a un altre fitxer sense obrir-lo i molt més.

Copiar manualment fulls a Excel és bastant ràpid i senzill... si es realitza només una o dues vegades. Duplicar diversos fulls diverses vegades és avorrit i requereix molt de temps. En aquesta pàgina, trobareu un grapat de macros útils per automatitzar aquesta tasca.

    Excel VBA per copiar el full al nou llibre de treball

    Aquesta macro d'una línia més senzilla fa exactament el que suggereix el seu nom: copia el full actiu a un llibre de treball nou.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Copia diversos fulls a Excel amb VBA

    Si voleu copieu diversos fulls del llibre de treball actiu a un de nou, seleccioneu tots els fulls d'interès i executeu aquesta macro:

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

    Excel VBA per copiar el full a un altre llibre

    Depenent d'on vulgueu inserir el full copiat, utilitzeu una de les macros següents.

    Copia el full al començament d'un altre llibre de treball

    Aquesta macro copia el full actiu abans tots els altres fulls de treball del fitxer de destinació, Llibre1 en aquest exemple. Per copiar a un altre fitxer, substituïu "Book1.xlsx" pel nom complet del vostre llibre de treball de destinació.

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

    Copia el full al final d'un altre llibre de treball

    Aquest fragment de codi duplica el full de treball actiu i col·loca la còpia al final del Llibre1 . De nou, recordeu substituir "Llibre1.xlsx" pel nom del vostre llibre de treball de destinació.

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx"). Sheets(Workbooks( "Book1.xlsx") " ).Fulls de treball.Recompte) End Sub

    Nota. Perquè les macros funcionin, el llibre de treball de destinació s'ha de desar al disc dur o a la xarxa.

    Copia el full a un llibre de treball seleccionat

    Per poder copiar el full actual a qualsevol llibre de treball obert, podeu crear un UserForm (anomenat UserForm1 ) amb un control ListBox ( anomenat ListBox1 ) i dos botons:

    A continuació, feu doble clic al formulari i enganxeu el codi següent a la finestra Codi:

    Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Següent Final Sub Privat Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Aleshores SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide End Sub

    Amb el UserForm al seu lloc, podeu utilitzar un dels següents macros per copiarfull actiu al llibre de treball que escolliu.

    Copieu el full al inici del llibre de treball seleccionat :

    Public Sub CopySheetToBeginningAnotherWorkbook() Carregueu UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook " " ) A continuació, activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End Sub

    Copia el full al final del llibre de treball seleccionat :

    Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks.SelectedWorkbook.SelectedForm1 Worksheets.UserdForm. End Sub

    Quan s'executa a Excel, la macro us mostrarà una llista de tots els llibres de treball oberts actualment. Seleccioneu el necessari i feu clic a D'acord:

    Macro d'Excel per copiar el full i canviar el nom

    Quan copieu un full a Excel, la rèplica rep un nom en el format predeterminat com Full1 (2) . Les macros següents us poden estalviar la molèstia de canviar el nom predeterminat manualment.

    Aquest codi duplica el full de treball actiu, anomena la còpia com a "Full de prova" (podeu substituir-lo amb qualsevol altre nom que vulgueu) , i col·loca el full copiat al final del llibre de treball actual.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On error Resume Next activeSheet.Name ="Full de prova" End Sub

    Per permetre que l'usuari especifiqui el nom del full copiat , utilitzeu aquest codi:

    Public Sub CopySheetAndRename() Dim newName As String On Error Reprendre Següent newName = InputBox( "Introduïu el nom del full de treball copiat") If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) En cas d'error Reprèn Següent activeSheet.Name = newName End If End Sub

    En executar-se, la macro mostra el quadre d'entrada següent, en el qual escriviu el nom desitjat i premeu D'acord:

    Macro d'Excel per copiar el full i canviar el nom en funció del valor de la cel·la

    A En algunes situacions, pot ser més convenient anomenar una còpia amb un valor de cel·la específic, per exemple, una capçalera de columna. Per a això, només cal que agafeu el codi anterior i proporcioneu el valor de la cel·la seleccionada actualment al quadre d'entrada automàticament. Igual que amb l'exemple anterior, la còpia es col·locarà al final del llibre de treball actiu.

    La part més complicada seria que els usuaris seleccionessin sempre la cel·la correcta abans d'executar-se. la macro :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Introduïu el nom del full de treball copiat", "Copia el full de treball", ActiveCell.Value) Si newName "" Aleshores activeSheet. Copy After:=Worksheets(Sheets.Count) En cas d'error Reprendre Següent activeSheet.Name = newName End If End Sub

    Com alternativa, podeu codificar l'adreça dela cel·la per la qual s'ha d'anomenar la còpia, cel·la A1 del codi següent. Per anomenar el full de treball copiat en funció d'una altra cel·la, substituïu A1 per una referència de cel·la adequada.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range ( "A1" ).Valor "" Aleshores en cas d'error Reprèn Següent activeSheet.Name = wks.Range( "A1").Value End If wks.Activate End Sub

    Macro per copiar el full de treball a un llibre de treball tancat

    Aquesta macro copia el full actiu al final d'un llibre de treball tancat. El nom d'un altre llibre de treball no s'especifica al codi: la macro obrirà la finestra estàndard de l'Explorador de Windows i us permetrà triar qualsevol fitxer de destinació:

    Després de seleccionar el fitxer i feu clic a Obre , la macro copiarà el full actiu i tancarà el llibre de treball de destinació automàticament.

    Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Fitxers (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Llibres de treball. Obre (nom del fitxer) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count) closedBook. Tanca (true) Application.ScreenUpdating = True End If End Sub

    Excel VBA per copiar el full d'un altre llibre de treball senseopening

    Aquesta macro us permet copiar un full de treball d'un altre fitxer Excel sense obrir-lo. El full copiat s'inserirà al final del llibre de treball actual.

    Només recordeu fer un parell de substitucions al codi:

    • C:\Usuaris\XXX\Documents\ Target_Book.xlsx s'ha de canviar pel camí i el nom reals del llibre de treball del qual voleu copiar un full.
    • Sheet1 s'ha de substituir pel nom del full que voleu copiar.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Estableix sourceBook = Workbooks. Obre ( "C:\Usuaris\XXX\Documents\Target_Book.xlsx") sourceBook.Sheets( "Sheet1").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Tanca Application.ScreenUpdating = True End Sub

    Excel VBA per duplicar el full diverses vegades

    De vegades, és possible que hàgiu de duplicar el mateix full més d'una vegada, per exemple, per provar diferents fórmules en el mateix conjunt de dades. Això es pot fer fàcilment amb la macro següent.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Quantes còpies del full actiu voleu fer?" ) Si n > = 1 Llavors Per numtimes = 1 A n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Obre el full original, executeu la macro, especifiqueu quantes còpies del full actiuque voleu fer i feu clic a D'acord :

    Com duplicar fulls a Excel amb VBA

    Per copiar un full a Excel amb una de les macros anteriors, podeu inserir el codi VBA al vostre propi llibre o executar una macro del nostre llibre de treball de mostra.

    Com afegir una macro al vostre llibre de treball

    Per inserir el codi del llibre de treball, seguiu aquests passos:

    1. Obre el full de treball que voleu copiar.
    2. Premeu Alt + F11 per obrir l'Editor de Visual Basic.
    3. Activat al panell esquerre, feu clic amb el botó dret a ThisWorkbook i, a continuació, feu clic a Insereix > Mòdul .
    4. Enganxeu el codi a la finestra Codi.
    5. Premeu F5 per executar la macro.

    Per obtenir instruccions detallades pas a pas, vegeu Com inserir codi VBA a Excel.

    Com executar-lo. una macro del nostre quadern d'exemple

    Com a alternativa, podeu baixar el nostre quadern d'exemple a Duplicar fulls d'Excel i executar el codi des d'allà.

    El quadern d'exemple conté les macros següents:

    CopySheetToNewWorkbook - copia el cu lloga el full de treball a un llibre de treball nou.

    CopySelectedSheets : copia diversos fulls que seleccioneu a un nou llibre de treball.

    CopySheetToBeginningAnotherWorkbook : copia el full actiu al començament d'un altre llibre de treball.

    CopySheetToEndAnotherWorkbook : copia el full actiu al final d'un altre fitxer d'Excel.

    CopySheetAndRename : duplica el full actual. full,el canvia el nom segons l'especifica l'usuari i posa la còpia després de tots els altres fulls del llibre de treball actual.

    CopySheetAndRenamePredefined : duplica el full actiu, dóna un nom codificat a la còpia i el col·loca. al final del llibre de treball actual.

    CopySheetAndRenameByCell : fa una còpia del full actiu i el canvia el nom en funció del valor de la cel·la seleccionada.

    CopySheetAndRenameByCell2 : copia el full actiu i el canvia el nom segons l'adreça de la cel·la codificada en dur.

    CopySheetToClosedWorkbook : us permet copiar el full a un llibre de treball tancat.

    CopySheetFromClosedWorkbook : us permet copiar un full d'un altre fitxer d'Excel sense obrir-lo.

    DuplicateSheetMultipleTimes : us permet duplicar un full a Excel diverses vegades.

    Per executeu la macro a l'Excel, feu el següent:

    1. Obriu el llibre de treball baixat i activeu el contingut si se us demana.
    2. Obreu el vostre propi llibre de treball i navegueu fins al full que voleu còpia.
    3. <1 7>Al vostre full de treball, premeu Alt + F8 , seleccioneu la macro d'interès i feu clic a Executar .

    Així és com podeu duplicar un full en Excel amb VBA. Us agraeixo la lectura i esperem veure-us al nostre blog la setmana vinent!

    Michael Brown és un entusiasta de la tecnologia dedicat amb una passió per simplificar processos complexos mitjançant eines de programari. Amb més d'una dècada d'experiència en la indústria tecnològica, ha perfeccionat les seves habilitats en Microsoft Excel i Outlook, així com en Google Sheets i Docs. El bloc de Michael es dedica a compartir els seus coneixements i experiència amb altres persones, oferint consells i tutorials fàcils de seguir per millorar la productivitat i l'eficiència. Tant si sou un professional experimentat com si sou un principiant, el bloc de Michael ofereix valuoses idees i consells pràctics per treure el màxim profit d'aquestes eines de programari essencials.