Innehållsförteckning
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 SubKopiera 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 SubExcel 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 SubKopiera 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 SubObservera: 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 EndUnderNä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 SubKopiera 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 SubNä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 SubFö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 SubNä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 SubAlternativt 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 SubMakro 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 SubExcel 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.
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:
- Öppna arbetsbladet som du vill kopiera.
- Tryck på Alt + F11 för att öppna Visual Basic Editor.
- I den vänstra rutan högerklickar du på Denna arbetsbok och klicka sedan på Infoga > Modul .
- Klistra in koden i fönstret Kod.
- 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:
- Öppna den nedladdade arbetsboken och aktivera innehållet om du uppmanas att göra det.
- Öppna din egen arbetsbok och navigera till det ark som du vill kopiera.
- 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!