Hur du kopierar ett ark i Excel med VBA

  • Dela Detta
Michael Brown

I handledningen finns en samling makron för att kopiera ark i Excel: kopiera och byta namn baserat på cellvärde, kopiera flera ark, kopiera ett aktivt arbetsblad till en annan fil utan att öppna den, med mera.

Att manuellt kopiera ark i Excel är ganska snabbt och enkelt... om det bara görs en eller två gånger. Att kopiera flera ark flera gånger är tråkigt och tidskrävande. På den här sidan hittar du en handfull användbara makron för att automatisera den här uppgiften.

    Excel VBA för att kopiera ark till en ny arbetsbok

    Det här enklaste makroet på en rad gör exakt vad namnet antyder - kopierar det aktiva bladet till en ny arbetsbok.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Kopiera flera ark i Excel med VBA

    Om du vill kopiera flera ark från den aktiva arbetsboken till en ny arbetsbok markerar du alla arbetsblad och kör det här makrot:

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

    Excel VBA för att kopiera ark till en annan arbetsbok

    Beroende på var du vill infoga det kopierade arket använder du ett av följande makron.

    Kopiera ark till början av en annan arbetsbok

    Det här makrot kopierar det aktiva arket före alla andra arbetsblad i målfilen, Bok1 Om du vill kopiera till en annan fil ersätter du "Book1.xlsx" med det fullständiga namnet på målarbetsboken.

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

    Kopiera ark till slutet av en annan arbetsbok

    Den här koden kopierar det aktiva arbetsbladet och placerar kopian i slutet av Bok1 Kom ihåg att ersätta "Book1.xlsx" med namnet på din arbetsbok.

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

    Observera: För att makron ska fungera måste målarbetsboken vara sparad på din hårddisk eller i nätverket.

    Kopiera ark till en vald arbetsbok

    För att kunna kopiera det aktuella bladet till en annan öppen arbetsbok kan du skapa en UserForm (som heter Användarformulär1 ) med en ListBox kontroll ( heter ListBox1 ) och två knappar:

    Dubbelklicka sedan på formuläret och klistra in nedanstående kod i kodfönstret:

    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 EndUnder

    När UserForm är på plats kan du använda ett av följande makron för att kopiera det aktiva bladet till en arbetsbok som du väljer.

    Kopiera bladet till början av den valda arbetsboken :

    Public Sub CopySheetToBeginningAnotherWorkbook() Ladda UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End Sub

    Kopiera bladet till slutet av den valda arbetsboken :

    Public Sub CopySheetToEndAnotherWorkbook() Ladda 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

    När makrot körs i Excel visas en lista över alla öppnade arbetsböcker. Du väljer den nödvändiga arbetsboken och klickar på OK:

    Excel-makro för att kopiera ark och byta namn

    När du kopierar ett ark i Excel får kopian ett namn i standardformatet som t.ex. Sheet1 (2) Med följande makron kan du slippa ändra standardnamnet manuellt.

    Den här koden kopierar det aktiva arbetsbladet, namnger kopian "Testark" (du kan byta ut det mot vilket namn som helst) och placerar det kopierade arbetsbladet i slutet av den aktuella arbetsboken.

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

    För att användaren ska kunna ange namnet på det kopierade bladet , använd den här koden:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Ange namnet på det kopierade arbetsbladet" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    När makrot körs visas följande inmatningsruta där du skriver det önskade namnet och trycker på OK:

    Excel-makro för att kopiera ark och byta namn baserat på cellvärdet

    I vissa situationer kan det vara lämpligare att namnge en kopia med ett specifikt cellvärde, t.ex. en kolumnrubrik. För detta tar du helt enkelt ovanstående kod och anger värdet för den för tillfället valda cellen till inmatningsrutan automatiskt. Precis som i det föregående exemplet placeras kopian i slutet av den aktiva arbetsboken.

    Det knepigaste är att användarna alltid ska välja rätt cell innan de kör makrot:)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Ange namnet på det kopierade arbetsbladet" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Alternativt kan du ange cellens adress i hårdkod som kopian ska namnges med, cell A1 i koden nedan. Om du vill namnge det kopierade arbetsbladet baserat på en annan cell ersätter du A1 med en lämplig cellreferens.

    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 för att kopiera arbetsblad till en stängd arbetsbok

    Det här makrot kopierar det aktiva bladet till slutet av en stängd arbetsbok. Namnet på en annan arbetsbok anges inte i koden - makrot öppnar standardfönstret Utforskaren i Windows och låter dig välja en valfri målfil:

    När du har valt filen och klickat på Öppna kopierar makrot det aktiva arket och stänger automatiskt målarbetsboken.

    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 för att kopiera ark från en annan arbetsbok utan att öppna den

    Med det här makrot kan du kopiera ett arbetsblad från en annan Excel-fil utan att öppna den. Det kopierade arbetsbladet infogas i slutet av den aktuella arbetsboken.

    Kom bara ihåg att göra ett par byten i koden:

    • C:\Users\XXX\Documents\Target_Book.xlsx ska ändras till den faktiska sökvägen och namnet på den arbetsbok från vilken du vill kopiera ett ark.
    • Sheet1 ska ersättas med namnet på det ark som du vill kopiera.
    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 för att duplicera ark flera gånger

    Ibland kan du behöva duplicera samma ark mer än en gång, till exempel för att testa olika formler på samma datamängd. Detta kan enkelt göras med följande makro.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Hur många kopior av det aktiva arket vill du göra?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Öppna originalbladet, kör makrot, ange hur många kopior av det aktiva bladet du vill göra och klicka på OK :

    Hur du duplicerar ark i Excel med VBA

    Om du vill kopiera ett ark i Excel med ett av ovanstående makron kan du antingen infoga VBA-koden i din egen bok eller köra ett makro från vår exempelarbetsbok.

    Så här lägger du till ett makro i arbetsboken

    Du kan infoga koden i arbetsboken genom att utföra följande steg:

    1. Öppna arbetsbladet som du vill kopiera.
    2. Tryck på Alt + F11 för att öppna Visual Basic Editor.
    3. I den vänstra rutan högerklickar du på Denna arbetsbok och klicka sedan på Infoga > Modul .
    4. Klistra in koden i fönstret Kod.
    5. Tryck på F5 för att köra makrot.

    Detaljerade steg-för-steg-instruktioner finns i Hur man infogar VBA-kod i Excel.

    Hur man kör ett makro från vår arbetsbok med exempel

    Alternativt kan du ladda ner vår exempelarbetsbok Duplicera Excel-ark och köra koden därifrån.

    Arbetsboken innehåller följande makron:

    CopySheetToNewWorkbook - kopierar det aktuella arbetsbladet till en ny arbetsbok.

    CopySelectedSheets - kopierar flera ark som du väljer till en ny arbetsbok.

    CopySheetToBeginningAnotherWorkbook - kopierar det aktiva bladet till början av en annan arbetsbok.

    CopySheetToEndAnotherWorkbook - kopierar det aktiva arket till slutet av en annan Excel-fil.

    CopySheetAndRename - duplicerar det aktuella arket, byter namn på det enligt användarens önskemål och placerar kopian efter alla andra ark i den aktuella arbetsboken.

    CopySheetAndRenamePredefined - duplicerar det aktiva bladet, ger kopian ett hårdkodat namn och placerar den i slutet av den aktuella arbetsboken.

    CopySheetAndRenameByCell - gör en kopia av det aktiva arket och byter namn på det baserat på det valda cellvärdet.

    CopySheetAndRenameByCell2 - kopierar det aktiva arket och byter namn på det baserat på den hårdkodade celladressen.

    CopySheetToClosedWorkbook - gör det möjligt att kopiera ark till en stängd arbetsbok.

    CopySheetFromClosedWorkbook - gör det möjligt att kopiera ett ark från en annan Excel-fil utan att öppna den.

    DuplicateSheetMultipleTimes - kan du duplicera ett ark i Excel flera gånger.

    För att köra makrot i Excel gör du bara följande:

    1. Öppna den nedladdade arbetsboken och aktivera innehållet om du uppmanas att göra det.
    2. Öppna din egen arbetsbok och navigera till det ark som du vill kopiera.
    3. I kalkylbladet trycker du på Alt + F8, markerar det aktuella makrot och klickar på Kör .

    Så kan du kopiera ett ark i Excel med VBA. Tack för att du läste och hoppas att vi ses på vår blogg nästa vecka!

    Michael Brown är en hängiven teknikentusiast med en passion för att förenkla komplexa processer med hjälp av mjukvaruverktyg. Med mer än ett decenniums erfarenhet inom teknikbranschen har han finslipat sina kunskaper i Microsoft Excel och Outlook, samt Google Sheets och Docs. Michaels blogg är tillägnad att dela med sig av sin kunskap och expertis med andra, och tillhandahåller lätta att följa tips och handledningar för att förbättra produktiviteten och effektiviteten. Oavsett om du är en erfaren proffs eller nybörjare, erbjuder Michaels blogg värdefulla insikter och praktiska råd för att få ut det mesta av dessa viktiga programvaruverktyg.