- Kopiera kalkylblad till ny arbetsbok
- Kopiera flera ark till ny arbetsbok
- Kopiera blad inom samma arbetsbok
- Flytta blad
- Kopiera och namnblad
- Kopiera kalkylblad till en annan arbetsbok
- Kopiera kalkylblad till en stängd arbetsbok
- Kopiera blad från en annan arbetsbok utan att öppna det
- Kopiera Excel -ark flera gånger
Denna handledning kommer att täcka hur man kopierar ett blad eller ett arbetsblad med VBA.
Kopiera kalkylblad till ny arbetsbok
Så här kopierar du ett kalkylblad till en ny arbetsbok:
1 | Ark ("Ark1"). Kopiera |
Kopiera ActiveSheet till ny arbetsbok
Så här kopierar du ActiveSheet till en ny arbetsbok:
1 | ActiveSheet.Copy |
Kopiera flera ark till ny arbetsbok
Så här kopierar du flera blad till en ny arbetsbok:
1 | ActiveWindow.SelectedSheets.Copy |
Kopiera blad inom samma arbetsbok
Vi började med att visa dig det enklaste exemplet på kopieringsark: kopiera blad till en ny arbetsbok. Dessa exempel nedan visar hur du kopierar ett blad i samma arbetsbok. När du kopierar ett blad i en Worbook måste du ange en plats. För att ange en plats säger du till VBA att flytta kalkylbladet FÖRE eller EFTER ett annat kalkylblad.
Kopiera blad före ett annat blad
Här kommer vi att specificera för att kopiera och klistra in arket före Sheet2
1 | Sheets ("Sheet1"). Kopiera före: = Sheets ("Sheet2") |
Kopiera blad före första blad
I stället för att ange bladets namn kan du också ange arkpositionen. Här kopierar vi och klistrar in ett blad före det första bladet i arbetsboken.
1 | Sheets ("Sheet1"). Kopiera före: = Sheets (1) |
Det nyskapade bladet blir nu det första bladet i arbetsboken.
Kopiera blad efter sista blad
Använd egenskapen After för att berätta för VBA att klistra in arket efter ett annat ark. Här kommer vi att kopiera och klistra in ett blad efter det sista bladet i arbetsboken:
1 | Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count) |
Lägg märke till att vi använde Sheets.Count för att räkna antalet ark i arbetsboken.
Flytta blad
Du kan också flytta ett blad i en arbetsbok med liknande syntax. Denna kod flyttar Sheet1 till slutet av arbetsboken:
1 | Sheets ("Sheet1"). Flytta efter: = Sheets (Sheets.Count) |
Kopiera och namnblad
Efter att du har kopierat och klistrat in ett ark blir det nyskapade arket ActiveSheet. Så för att byta namn på vårt nya blad, använd helt enkelt ActiveSheet.Name:
123456 | Sub CopySheetRename1 ()Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)ActiveSheet.Name = "LastSheet"Avsluta Sub |
Om bladnamnet redan finns genererar ovanstående kod ett fel. Istället kan vi använda “Vid felåterupptagning nästa” för att berätta för VBA att ignorera namngivningen av arket och fortsätta med resten av proceduren:
12345678 | Sub CopySheetRename2 ()Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)Vid fel Återuppta nästaActiveSheet.Name = "LastSheet"Vid fel GoTo 0Avsluta Sub |
Eller använd vår RangeExists -funktion för att testa om bladnamnet redan finns innan du försöker kopiera arket:
123456789101112131415161718 | Sub CopySheetRename3 ()Om RangeExists ("LastSheet") DåMsgBox "Ark finns redan."AnnanSheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)ActiveSheet.Name = "LastSheet"Avsluta omAvsluta SubFunction RangeExists (WhatSheet As String, Valfritt ByVal WhatRange As String = "A1") Som BooleanDim test As RangeVid fel Återuppta nästaAnge test = ActiveWorkbook.Sheets (WhatSheet) .Range (WhatRange)RangeExists = Err.Number = 0Vid fel GoTo 0Avsluta funktion |
Kopiera och namnark baserat på cellvärde
Du kanske också vill kopiera och namnge ett blad baserat på ett cellvärde. Denna kod kommer att namnge arbetsbladet baserat på cellvärdet i A1
12345678 | Sub CopySheetRenameFromCell ()Sheets ("Sheet1"). Kopiera After: = Sheets (Sheets.Count)Vid fel Återuppta nästaActiveSheet.Name = Range ("A1"). VärdeVid fel GoTo 0Avsluta Sub |
Kopiera kalkylblad till en annan arbetsbok
Hittills har vi arbetat med att kopiera blad i en arbetsbok. Nu kommer vi att täcka exempel för att kopiera och klistra in ark i andra arbetsböcker. Denna kod kommer att kopiera ett blad till början av en annan arbetsbok:
1 | Sheets ("Sheet1"). Kopiera före: = Workbooks ("Exempel.xlsm"). Sheets (1) |
Detta kommer att kopiera ett kalkylblad till slutet av en annan arbetsbok.
1 | Kalkylark ("Ark1"). Kopiera efter: = Arbetsböcker ("Exempel.xlsm"). Kalkylark (Arbetsböcker ("Exempel.xlsm"). Kalkylark) |
Lägg märke till att vi bytte ut 1 med Arbetsböcker (“Exempel.xlsm”). Kalkylark för att få det sista arbetsbladet.
Kopiera kalkylblad till en stängd arbetsbok
Du kanske också vill kopiera ett kalkylblad till en arbetsbok som är stängd. Denna kod öppnar en stängd arbetsbok så att du kan kopiera ett blad till den.
123456789 | Sub CopySheetToClosedWB ()Application.ScreenUpdating = FalsktStäll in closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ artiklar \ exempel.xlsm")Sheets ("Sheet1"). Kopiera före: = closedBook.Sheets (1)closedBook.Close SaveChanges: = TrueApplication.ScreenUpdating = TrueAvsluta Sub |
Kopiera blad från en annan arbetsbok utan att öppna det
Omvänt kommer den här koden att kopiera ett kalkylblad FRÅN en stängd arbetsbok utan att du behöver öppna arbetsboken manuellt.
123456789 | Sub CopySheetFromClosedWB ()Application.ScreenUpdating = FalsktStäll in closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ artiklar \ exempel.xlsm")closedBook.Sheets ("Sheet1"). Kopiera före: = ThisWorkbook.Sheets (1)closedBook.Close SaveChanges: = FalsktApplication.ScreenUpdating = TrueAvsluta Sub |
Lägg märke till att i båda dessa exempel inaktiverade vi ScreenUpdating så att processen körs i bakgrunden.
Kopiera Excel -ark flera gånger
Du kan också kopiera ett Excel -ark flera gånger med hjälp av en loop.
1234567891011121314 | Sub CopySheetMultipleTimes ()Dim n Som heltalDim i As IntegerVid fel Återuppta nästan = InputBox ("Hur många kopior vill du göra?")Om n> 0 DåFör i = 1 Till nActiveSheet.Copy After: = ActiveWorkbook.Sheets (Worksheets.Count)NästaAvsluta omAvsluta Sub |