Obsah
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 SubKopí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 SubExcel 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 SubKopí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 SubPozná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 EndSubKdyž 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 SubKopí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 SubPo 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 SubUmož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 SubPo 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 SubPří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 SubMakro 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 SubExcel 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.
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 SubOtevř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:
- Otevřete pracovní list, který chcete zkopírovat.
- Stisknutím kláves Alt + F11 otevřete editor jazyka Visual Basic.
- V levém podokně klikněte pravým tlačítkem myši na ThisWorkbook a poté klikněte na tlačítko Vložte > Modul .
- Vložte kód do okna Kód.
- 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:
- Otevřete stažený sešit a na výzvu povolte obsah.
- Otevřete vlastní sešit a přejděte na list, který chcete zkopírovat.
- 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!