Jak duplikovat list v aplikaci Excel pomocí VBA

  • Sdílet Toto
Michael Brown

Výukový program obsahuje sbírku maker pro duplikování listů v aplikaci Excel: kopírování a přejmenování na základě hodnoty buňky, kopírování více listů, kopírování aktivního listu do jiného souboru bez jeho otevření a další.

Ruční kopírování listů v aplikaci Excel je poměrně rychlé a jednoduché... pokud se provádí pouze jednou nebo dvakrát. Vícenásobné kopírování více listů je nudné a časově náročné. Na této stránce najdete několik užitečných maker pro automatizaci tohoto úkolu.

    Excel VBA pro kopírování listu do nového sešitu

    Toto nejjednodušší jednořádkové makro dělá přesně to, co naznačuje jeho název - kopíruje aktivní list do nového sešitu.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Kopírování více listů v aplikaci Excel pomocí VBA

    Pokud chcete zkopírovat několik listů z aktivního sešitu do nového, vyberte všechny listy, které vás zajímají, a spusťte toto makro:

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

    Excel VBA pro kopírování listu do jiného sešitu

    Podle toho, kam chcete zkopírovaný list vložit, použijte jedno z následujících maker.

    Kopírování listu na začátek jiného sešitu

    Toto makro zkopíruje aktivní list před všechny ostatní listy v cílovém souboru, Kniha1 Chcete-li kopírovat do jiného souboru, nahraďte "Book1.xlsx" celým názvem cílového sešitu.

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

    Kopírování listu na konec jiného sešitu

    Tato část kódu zduplikuje aktivní pracovní list a umístí kopii na konec listu Kniha1 . Opět nezapomeňte nahradit "Book1.xlsx" názvem cílového sešitu.

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

    Poznámka: Aby makra fungovala, musí být cílový sešit uložen na pevném disku nebo v síti.

    Kopírování listu do vybraného sešitu

    Chcete-li mít možnost zkopírovat aktuální list do libovolného otevřeného sešitu, můžete vytvořit uživatelský formulář (s názvem Uživatelský formulář1 ) s ListBox ovládání ( s názvem ListBox1 ) a dvě tlačítka:

    Poté dvakrát klikněte na formulář a do okna Kód vložte níže uvedený kód:

    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

    Když je formulář UserForm vytvořen, můžete pomocí jednoho z následujících maker zkopírovat aktivní list do sešitu podle svého výběru.

    Kopírování listu do začátek vybraného sešitu :

    Public Sub CopySheetToBeginningAnotherWorkbook() Načíst UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Odložit UserForm1 End Sub

    Kopírování listu do konec vybraného sešitu :

    Public Sub CopySheetToEndAnotherWorkbook() Načíst 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

    Po spuštění v aplikaci Excel se zobrazí seznam všech aktuálně otevřených sešitů. Vyberete potřebný a kliknete na tlačítko OK:

    Makro aplikace Excel pro kopírování listu a přejmenování

    Při kopírování listu v aplikaci Excel se replika pojmenuje ve výchozím formátu, např. List1 (2) Následující makra vám ušetří práci s ruční změnou výchozího názvu.

    Tento kód duplikuje aktivní list, pojmenuje kopii jako "Testovací list" (můžete ji nahradit libovolným jiným názvem) a umístí zkopírovaný list na konec aktuálního sešitu.

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

    Umožnit uživateli zadat název kopírovaného listu , použijte tento kód:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Zadejte název kopírovaného listu" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Po spuštění makra se zobrazí následující vstupní pole, do kterého zadejte požadovaný název a stiskněte tlačítko OK:

    Makro aplikace Excel pro kopírování listu a přejmenování na základě hodnoty buňky

    V některých situacích může být výhodnější pojmenovat kopii konkrétní hodnotou buňky, například záhlaví sloupce. V tomto případě stačí vzít výše uvedený kód a zadat hodnotu buňky. aktuálně vybraná buňka do vstupního pole automaticky. Stejně jako v předchozím příkladu bude kopie umístěna na konec aktivního sešitu.

    Nejsložitější by bylo, aby uživatelé před spuštěním makra vždy vybrali správnou buňku :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Zadejte název kopírovaného listu" , "Kopírovat list" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Případně můžete natvrdo zadat adresu buňky podle kterého by měla být kopie pojmenována, v níže uvedeném kódu buňka A1. Chcete-li kopírovaný pracovní list pojmenovat podle jiné buňky, nahraďte A1 příslušným odkazem na buňku.

    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

    Makro pro kopírování pracovního listu do uzavřeného sešitu

    Toto makro zkopíruje aktivní list na konec uzavřeného sešitu. Název jiného sešitu není v kódu uveden - makro otevře standardní okno Průzkumníka Windows a umožní vybrat libovolný cílový soubor:

    Po výběru souboru a kliknutí na tlačítko Otevřít , makro zkopíruje aktivní list a automaticky zavře cílový sešit.

    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 pro kopírování listu z jiného sešitu bez otevření

    Toto makro umožňuje zkopírovat list z jiného souboru aplikace Excel, aniž byste jej museli otevřít. Zkopírovaný list bude vložen na konec aktuálního sešitu.

    Jen nezapomeňte v kódu provést několik záměn:

    • C:\Users\XXX\Documents\Target_Book.xlsx je třeba změnit na skutečnou cestu a název sešitu, ze kterého chcete list zkopírovat.
    • List1 by měl být nahrazen názvem listu, který chcete zkopírovat.
    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 pro vícenásobné duplikování listu

    Někdy se může stát, že budete potřebovat stejný list duplikovat vícekrát, například pro testování různých vzorců na stejné sadě dat. To lze snadno provést pomocí následujícího makra.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Kolik kopií aktivního listu chcete vytvořit?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Otevřete původní list, spusťte makro, zadejte, kolik kopií aktivního listu chcete vytvořit, a klikněte na tlačítko . OK :

    Jak duplikovat listy v aplikaci Excel pomocí VBA

    Chcete-li zkopírovat list v aplikaci Excel s jedním z výše uvedených maker, můžete buď vložit kód VBA do vlastního sešitu, nebo spustit makro z našeho ukázkového sešitu.

    Jak přidat makro do sešitu

    Chcete-li vložit kód do sešitu, proveďte následující kroky:

    1. Otevřete pracovní list, který chcete zkopírovat.
    2. Stisknutím kláves Alt + F11 otevřete editor jazyka Visual Basic.
    3. V levém podokně klikněte pravým tlačítkem myši na ThisWorkbook a poté klikněte na tlačítko Vložte > Modul .
    4. Vložte kód do okna Kód.
    5. Stisknutím klávesy F5 makro spustíte.

    Podrobné pokyny krok za krokem naleznete v části Jak vložit kód VBA do aplikace Excel.

    Jak spustit makro z našeho ukázkového sešitu

    Případně si můžete stáhnout náš ukázkový sešit Duplikovat listy aplikace Excel a spustit kód z něj.

    Ukázkový sešit obsahuje následující makra:

    CopySheetToNewWorkbook - zkopíruje aktuální pracovní list do nového sešitu.

    CopySelectedSheets - zkopíruje více vybraných listů do nového sešitu.

    CopySheetToBeginningAnotherWorkbook - zkopíruje aktivní list na začátek jiného sešitu.

    CopySheetToEndAnotherWorkbook - zkopíruje aktivní list na konec jiného souboru aplikace Excel.

    CopySheetAndRename - duplikuje aktuální list, přejmenuje jej podle zadání uživatele a umístí kopii za všechny ostatní listy v aktuálním sešitě.

    CopySheetAndRenamePredefined - duplikuje aktivní list, přidělí kopii pevně zadaný název a umístí ji na konec aktuálního sešitu.

    CopySheetAndRenameByCell - vytvoří kopii aktivního listu a přejmenuje ji na základě vybrané hodnoty buňky.

    CopySheetAndRenameByCell2 - zkopíruje aktivní list a přejmenuje jej na základě pevně zadané adresy buňky.

    CopySheetToClosedWorkbook - umožňuje zkopírovat list do uzavřeného sešitu.

    CopySheetFromClosedWorkbook - umožňuje zkopírovat list z jiného souboru aplikace Excel, aniž byste jej museli otevřít.

    DuplicateSheetMultipleTimes - umožňuje duplikovat list v aplikaci Excel vícekrát.

    Chcete-li spustit makro v aplikaci Excel, postupujte takto:

    1. Otevřete stažený sešit a na výzvu povolte obsah.
    2. Otevřete vlastní sešit a přejděte na list, který chcete zkopírovat.
    3. V pracovním listu stiskněte klávesy Alt + F8 , vyberte makro, které vás zajímá, a klikněte na tlačítko Spustit .

    Takto můžete duplikovat list v Excelu pomocí VBA. Děkuji vám za přečtení a doufám, že se uvidíme na našem blogu příští týden!

    Michael Brown je oddaný technologický nadšenec s vášní pro zjednodušování složitých procesů pomocí softwarových nástrojů. S více než desetiletými zkušenostmi v technologickém průmyslu zdokonalil své dovednosti v aplikacích Microsoft Excel a Outlook a také v Tabulkách a Dokumentech Google. Michaelův blog je věnován sdílení jeho znalostí a odborných znalostí s ostatními a poskytuje snadno pochopitelné tipy a návody pro zlepšení produktivity a efektivity. Ať už jste zkušený profesionál nebo začátečník, Michaelův blog nabízí cenné postřehy a praktické rady, jak tyto základní softwarové nástroje co nejlépe využít.