Ako duplikovať hárok v programe Excel pomocou VBA

  • Zdieľajte To
Michael Brown

Učebnica poskytuje zbierku makier na duplikovanie hárkov v programe Excel: kopírovanie a premenovanie na základe hodnoty bunky, kopírovanie viacerých hárkov, kopírovanie aktívneho pracovného hárka do iného súboru bez jeho otvorenia a ďalšie.

Ručné kopírovanie hárkov v programe Excel je pomerne rýchle a jednoduché... ak sa vykoná len raz alebo dvakrát. Viacnásobné kopírovanie viacerých hárkov je nudné a časovo náročné. Na tejto stránke nájdete niekoľko užitočných makier na automatizáciu tejto úlohy.

    Excel VBA na kopírovanie listu do nového zošita

    Toto najjednoduchšie jednoriadkové makro robí presne to, čo naznačuje jeho názov - kopíruje aktívny hárok do nového zošita.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Kopírovanie viacerých hárkov v programe Excel pomocou VBA

    Ak chcete skopírovať niekoľko hárkov z aktívneho zošita do nového, vyberte všetky hárky, ktoré vás zaujímajú, a spustite toto makro:

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

    Excel VBA na kopírovanie listu do iného zošita

    Podľa toho, kam chcete skopírovaný hárok vložiť, použite jedno z nasledujúcich makier.

    Kopírovanie listu na začiatok iného zošita

    Toto makro kopíruje aktívny hárok pred všetkými ostatnými hárkami v cieľovom súbore, Kniha1 Ak chcete kopírovať do iného súboru, nahraďte "Book1.xlsx" celým názvom cieľového zošita.

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

    Kopírovanie listu na koniec iného zošita

    Táto časť kódu duplikuje aktívny pracovný hárok a umiestni kópiu na koniec Kniha1 Opäť nezabudnite nahradiť "Book1.xlsx" názvom cieľového zošita.

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

    Poznámka: Aby makrá fungovali, musí byť cieľový zošit uložený na pevnom disku alebo v sieti.

    Kopírovanie hárku do vybraného zošita

    Ak chcete mať možnosť kopírovať aktuálny hárok do ľubovoľného otvoreného zošita, môžete vytvoriť UserForm (s názvom Používateľský formulár1 ) s ListBox kontrola ( s názvom ListBox1 ) a dve tlačidlá:

    Potom dvakrát kliknite na formulár a do okna Kód vložte nasledujúci 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

    Po vytvorení formulára UserForm môžete pomocou jedného z nasledujúcich makier skopírovať aktívny hárok do vybraného zošita.

    Kopírovanie hárku do začiatok vybraného zošita :

    Public Sub CopySheetToBeginningAnotherWorkbook() Načítať UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Odpojiť UserForm1 End Sub

    Kopírovanie hárku do koniec vybraného zošita :

    Public Sub CopySheetToEndAnotherWorkbook() Načítať UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Odpojiť UserForm1 End Sub

    Po spustení v programe Excel makro zobrazí zoznam všetkých aktuálne otvorených zošitov. Vyberiete potrebný a kliknete na tlačidlo OK:

    Makro programu Excel na kopírovanie hárku a premenovanie

    Pri kopírovaní hárku v programe Excel sa replika pomenuje v predvolenom formáte, ako napr. List1 (2) Nasledujúce makrá vám môžu ušetriť problémy s ručnou zmenou predvoleného názvu.

    Tento kód duplikuje aktívny pracovný hárok, pomenuje kópiu ako "Testovací hárok" (môžete ho nahradiť ľubovoľným iným názvom) a umiestni skopírovaný hárok na koniec aktuálneho zošita.

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

    Umožniť používateľovi určiť názov skopírovaného hárku , použite tento kód:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Zadajte názov pre kopírovaný pracovný list" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Po spustení makra sa zobrazí nasledujúce vstupné pole, do ktorého zadajte požadovaný názov a stlačte tlačidlo OK:

    Makro programu Excel na kopírovanie listu a premenovanie na základe hodnoty bunky

    V niektorých situáciách môže byť vhodnejšie pomenovať kópiu konkrétnou hodnotou bunky, napríklad záhlavia stĺpca. V takom prípade stačí prevziať vyššie uvedený kód a zadať hodnotu aktuálne vybraná bunka do vstupného poľa automaticky. Rovnako ako v predchádzajúcom príklade sa kópia umiestni na koniec aktívneho zošita.

    Najzložitejšie by bolo, aby používatelia pred spustením makra vždy vybrali správnu bunku :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Zadajte názov kopírovaného hárku" , "Kopírovať hárok" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Prípadne môžete natvrdo kódovať adresu bunky podľa ktorej by mala byť kópia pomenovaná, bunka A1 v nasledujúcom kóde. Ak chcete skopírovaný pracovný hárok pomenovať podľa inej bunky, nahraďte A1 príslušným odkazom na bunku.

    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 na kopírovanie pracovného hárka do uzavretého zošita

    Toto makro skopíruje aktívny hárok na koniec uzavretého zošita. Názov iného zošita sa v kóde neuvádza - makro otvorí štandardné okno Prieskumníka systému Windows a umožní vám vybrať ľubovoľný cieľový súbor:

    Po výbere súboru a kliknutí na Otvorte stránku , makro skopíruje aktívny hárok a automaticky zatvorí cieľový zoš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 na kopírovanie listu z iného zošita bez otvorenia

    Toto makro umožňuje skopírovať pracovný hárok z iného súboru programu Excel bez jeho otvorenia. Skopírovaný hárok sa vloží na koniec aktuálneho zošita.

    Len nezabudnite v kóde vykonať niekoľko výmen:

    • C:\Users\XXX\Documents\Target_Book.xlsx by sa mala zmeniť na skutočnú cestu a názov zošita, z ktorého chcete skopírovať list.
    • List1 by mal byť nahradený názvom listu, ktorý chcete skopírovať.
    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 na viacnásobné duplikovanie listu

    Niekedy možno budete potrebovať duplikovať ten istý hárok viac ako raz, napríklad na otestovanie rôznych vzorcov na tej istej množine údajov. To sa dá ľahko vykonať pomocou nasledujúceho makra.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Koľko kópií aktívneho listu chcete vytvoriť?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Otvorte pôvodný hárok, spustite makro, zadajte, koľko kópií aktívneho hárku chcete vytvoriť, a kliknite na tlačidlo OK :

    Ako duplikovať hárky v programe Excel pomocou VBA

    Ak chcete skopírovať hárok v programe Excel s jedným z uvedených makier, môžete buď vložiť kód VBA do vlastnej knihy, alebo spustiť makro z nášho vzorového zošita.

    Ako pridať makro do zošita

    Ak chcete vložiť kód do zošita, vykonajte tieto kroky:

    1. Otvorte pracovný hárok, ktorý chcete skopírovať.
    2. Stlačením klávesov Alt + F11 otvorte editor jazyka Visual Basic.
    3. Na ľavom paneli kliknite pravým tlačidlom myši na Tento pracovný zošit a potom kliknite na tlačidlo Vložte > Modul .
    4. Vložte kód do okna Kód.
    5. Stlačením klávesy F5 spustíte makro.

    Podrobné pokyny krok za krokom nájdete v časti Ako vložiť kód VBA do aplikácie Excel.

    Ako spustiť makro z nášho vzorového zošita

    Prípadne si môžete stiahnuť náš vzorový zošit Duplikovať hárky programu Excel a spustiť kód odtiaľ.

    Vzorový zošit obsahuje nasledujúce makrá:

    CopySheetToNewWorkbook - skopíruje aktuálny pracovný hárok do nového zošita.

    CopySelectedSheets - skopíruje viacero vybraných listov do nového zošita.

    CopySheetToBeginningAnotherWorkbook - skopíruje aktívny list na začiatok iného zošita.

    CopySheetToEndAnotherWorkbook - skopíruje aktívny hárok na koniec iného súboru programu Excel.

    CopySheetAndRename - duplikuje aktuálny hárok, premenuje ho podľa zadania používateľa a umiestni kópiu za všetky ostatné hárky v aktuálnom zošite.

    CopySheetAndRenamePredefined - duplikuje aktívny hárok, kópii dá pevne zadaný názov a umiestni ju na koniec aktuálneho zošita.

    CopySheetAndRenameByCell - vytvorí kópiu aktívneho hárka a premenuje ju na základe vybranej hodnoty bunky.

    CopySheetAndRenameByCell2 - skopíruje aktívny hárok a premenuje ho na základe pevne zadanej adresy bunky.

    CopySheetToClosedWorkbook - umožňuje skopírovať hárok do uzavretého zošita.

    CopySheetFromClosedWorkbook - umožňuje skopírovať hárok z iného súboru programu Excel bez jeho otvorenia.

    DuplicateSheetMultipleTimes - umožňuje viacnásobne duplikovať hárok v programe Excel.

    Ak chcete spustiť makro v programe Excel, postupujte takto:

    1. Otvorte stiahnutý zošit a v prípade výzvy povoľte obsah.
    2. Otvorte svoj zošit a prejdite na hárok, ktorý chcete skopírovať.
    3. V pracovnom hárku stlačte klávesy Alt + F8 , vyberte makro, ktoré vás zaujíma, a kliknite na tlačidlo Spustiť .

    Takto môžete pomocou VBA duplikovať hárok v programe Excel. Ďakujem vám za prečítanie a dúfam, že sa na našom blogu uvidíme budúci týždeň!

    Michael Brown je nadšený technologický nadšenec s vášňou pre zjednodušovanie zložitých procesov pomocou softvérových nástrojov. S viac ako desaťročnými skúsenosťami v technologickom priemysle si zdokonalil svoje zručnosti v programoch Microsoft Excel a Outlook, ako aj Tabuľky Google a Dokumenty. Michaelov blog je venovaný zdieľaniu svojich vedomostí a odborných znalostí s ostatnými a poskytuje jednoduché tipy a návody na zlepšenie produktivity a efektivity. Či už ste skúsený profesionál alebo začiatočník, Michaelov blog ponúka cenné poznatky a praktické rady, ako z týchto základných softvérových nástrojov vyťažiť maximum.