VBA -kopieringsark / kopieringsark till en annan arbetsbok

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

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave