VBA Copy Worksheet - How to Use Worksheet.Copy?

Arkusz kopiowania Excel VBA

Czasami może być konieczne skopiowanie określonego zakresu komórek z jednego arkusza do drugiego lub w tym samym arkuszu. W niektórych przypadkach może być konieczne skopiowanie całego arkusza do nowego arkusza. Być może znasz kopiowanie zakresu komórek, ale co powiesz na skopiowanie całego arkusza roboczego za pomocą VBA. W tym artykule podamy szczegółowe wyjaśnienie, jak skopiować arkusz do innego skoroszytu w VBA.

Arkusz roboczy Metoda kopiowania w VBA

Najpierw spójrz na składnię metody Worksheet Copy.

Arkusz roboczy (). Kopiuj (przed, po)

Copy ma dwa argumenty Przed & Po; obie te opcje są opcjonalne.

  1. Przed: docelowy arkusz roboczy, który kopiujemy. Jeśli to określisz, nie możesz użyć argumentu Po .
  2. Po: docelowy arkusz roboczy, który kopiujemy. Jeśli to określisz, nie możesz użyć argumentu Przed .

Ponieważ oba te argumenty są opcjonalnymi argumentami, jeśli pozostawisz je puste, docelowy arkusz zostanie skopiowany do nowego skoroszytu, program Microsoft Excel automatycznie utworzy nowy skoroszyt.

Zobaczymy teraz przykłady tego samego w sekcji przykładów.

Przykłady kopiowania arkusza w VBA

Przykład 1

Na przykład spójrz na poniższe dane w arkuszu o nazwie „Styczeń”.

Powyższe dane mamy w arkuszu o nazwie „Styczeń” .

  • Tak więc musimy skopiować powyższy arkusz roboczy po arkuszu o nazwie „ Arkusz1 ”. Najpierw odwołaj się do arkusza przy użyciu obiektu arkuszy roboczych.

Kod:

Sub Worksheet_Copy_Example1 () Worksheets ("styczeń") End Sub
  • Następnie wprowadź metodę „ Kopiuj ”.

Kod:

Sub Worksheet_Copy_Example1 () Worksheets („January”). Copy End Sub
  • Jak widać powyżej, gdy zaczynamy pisać, nie widzimy listy IntelliSense dla obiektu arkuszy roboczych, jest to jeden z istotnych problemów dla początkujących, jeśli bezpośrednio używają obiektu WORKSHEETS, ale można to wyeliminować za pomocą zmiennych, więc zdefiniuj zmienna jako „ Arkusz roboczy ”.

Kod:

Sub Worksheet_Copy_Example1 () Dim Ws as Worksheet End Sub
  • Teraz dla tej zmiennej ustaw odniesienie arkusza roboczego „ Styczeń ”.

Kod:

Sub Worksheet_Copy_Example1 () Dim Ws as Worksheet Set Ws = Worksheets ("January") End Sub
  • Tak więc, teraz używając zmiennej „ Ws ”, możemy łatwo odwołać się do arkusza o nazwie „ Styczeń ”. Zatem wprowadź nazwę zmiennej „ Ws ” i wybierz metodę „ Kopiuj ”.

Idziemy, możemy zobaczyć listę IntelliSense pokazującą wszystkie właściwości i metody obiektów arkusza, dzięki deklaracji zmiennej.

  • Wybierz metodę „ Kopiuj ”, a zobaczymy argumenty metody „ Kopiuj ”.
  • Ponieważ musimy skopiować arkusz po arkuszu „ Arkusz1 ”, najpierw uzyskaj dostęp do argumentu „ Po ”, wprowadzając nazwę argumentu, taką jak poniżej.

Po podświetleniu argumentu, ponieważ użyliśmy nazwy argumentu z symbolem „ równy z definicji ” (: =)

  • Teraz wprowadź nazwę arkusza za pomocą obiektu „ Arkusze ”.

Kod:

Sub Worksheet_Copy_Example1 () Dim Ws As Worksheet Set Ws = Worksheets ("January") Ws.Copy After: = Arkusze ("Arkusz1") End Sub
  • Skończyliśmy. Spowoduje to skopiowanie arkusza roboczego „ Styczeń ” po arkuszu „ Arkusz1 ”.

Proszę bardzo, skopiowaliśmy styczniowy arkusz roboczy na prawo od „Sheet1”. Jedną z domyślnych rzeczy tutaj jest to, że nazwa arkusza jest taka sama jak kopiowanego arkusza z numeryczną liczbą arkuszy w nawiasie, w tym przypadku jest to „(2)”.

  • Aby zmienić nazwę arkusza roboczego, dodaj poniższy fragment kodu do powyższego kodu.
  • So the overall code is below.

Code:

Sub Worksheet_Copy_Example1() Dim Ws As Worksheet Set Ws = Worksheets("January") Ws.Copy After:=Sheets("Sheet1") ActiveSheet.Name = “New Copied Sheet” End Sub
  • Now run the code and see what happens.

Example #2

Similarly, if you want to copy the worksheet “Sheet1” before the worksheet “January” uses the below code.

Code:

Sub Worksheet_Copy_Example2() Dim Ws As Worksheet Set Ws = Worksheets("Sheet1") Ws.Copy Before:=Sheets("January") ActiveSheet.Name = "New Sheet1" End Sub
  • So this will create a sheet-like the below.

Example #3

Similarly, if you want to copy the worksheet after the last worksheet then use the below code.

Code:

Sub Worksheet_Copy_Example3() Dim Ws As Worksheet Set Ws = Worksheets("January") Ws.Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = "Last Sheet" End Sub

Output:

The only change we made is we have used “Sheets. Count” method to count how many sheets are there in the workbook.

Example #4

Similarly, if you want to copy the worksheet before the first worksheet then use the below code.

Code:

Sub Worksheet_Copy_Example4() Dim Ws As Worksheet Set Ws = Worksheets("January") Ws.Copy After:=Sheets(1) ActiveSheet.Name = "First Sheet" End Sub

Output:

In this case, we have used “Sheets(1)” so this will place the worksheet copied before the first worksheet of the workbook.

Things to Remember

  • Suppose you don’t use either Before & After argument of the Worksheet. Copy worksheets will be copied to the new workbook altogether.
  • Domyślna nazwa skopiowanego arkusza będzie taka sama, a po niej liczba skopiowanych arkuszy.

Interesujące artykuły...