VBA Copy Worksheet - Cách sử dụng Worksheet.Copy?

Excel VBA Copy Worksheet

Đôi khi, chúng tôi có thể cần sao chép một phạm vi ô cụ thể từ trang tính này sang trang tính khác hoặc trong chính trang tính đó. Trong một số trường hợp, chúng tôi có thể cần sao chép toàn bộ trang tính sang một trang tính mới. Bạn có thể quen với việc sao chép một dải ô, nhưng sao chép toàn bộ trang tính bằng VBA thì sao. Trong bài viết này, chúng tôi sẽ cung cấp cho bạn lời giải thích chi tiết về cách sao chép trang tính sang một sổ làm việc khác trong VBA.

Phương pháp Worksheet.Copy trong VBA

Trước tiên, hãy xem cú pháp của phương thức Bản sao trang tính.

Trang tính (). Sao chép (Trước, Sau)

Phương thức sao chép có hai đối số trong đó Trước & Sau; cả hai đều là tùy chọn.

  1. Trước: Trang tính được nhắm mục tiêu mà chúng tôi đang sao chép. Nếu bạn chỉ định điều này, bạn không thể sử dụng đối số Sau .
  2. Sau: Trang tính được nhắm mục tiêu mà chúng tôi đang sao chép. Nếu bạn chỉ định điều này, bạn không thể sử dụng đối số Trước .

Vì cả hai đều là đối số tùy chọn nếu bạn để trống thì trang tính được nhắm mục tiêu sẽ được sao chép sang sổ làm việc mới, Microsoft Excel sẽ tự động tạo một sổ làm việc mới.

Chúng ta sẽ thấy các ví dụ tương tự bây giờ trong phần ví dụ.

Ví dụ về Copy Worksheet trong VBA

Ví dụ 1

Ví dụ: hãy xem dữ liệu bên dưới trong trang tính có tên là “Tháng Giêng”.

Chúng tôi có dữ liệu trên trong trang tính có tên là “Tháng Giêng” .

  • Vì vậy, chúng ta cần sao chép trang tính trên sau trang tính có tên “ Sheet1 ”. Trước tiên, hãy tham khảo trang tính bằng cách sử dụng đối tượng trang tính.

Mã:

Sub Worksheet_Copy_Example1 () Worksheets ("Tháng 1") Kết thúc Sub
  • Tiếp theo, nhập phương thức " Sao chép ".

Mã:

Sub Worksheet_Copy_Example1 () Worksheets ("Tháng 1"). Sao chép End Sub
  • Như bạn có thể thấy ở trên khi bắt đầu nhập, chúng tôi không thấy danh sách IntelliSense cho đối tượng bảng tính, đây là một trong những vấn đề quan trọng đối với người mới bắt đầu nếu họ trực tiếp sử dụng đối tượng WORKSHEETS, nhưng điều này có thể được loại bỏ bằng cách sử dụng các biến, vì vậy hãy xác định biến dưới dạng “ Trang tính ”.

Mã:

Sub Worksheet_Copy_Example1 () Dim Ws as Worksheet End Sub
  • Bây giờ đối với biến này, hãy đặt tham chiếu của trang tính là “ January ”.

Mã:

Sub Worksheet_Copy_Example1 () Dim Ws as Worksheet Set Ws = Worksheets ("January") End Sub
  • Vì vậy, bây giờ sử dụng biến “ Ws ”, chúng ta có thể dễ dàng tham chiếu đến bảng tính có tên là “ January ”. Vì vậy, hãy nhập tên biến “ Ws ” và chọn phương thức “ Sao chép ”.

Ở đó, chúng ta có thể thấy danh sách IntelliSense hiển thị tất cả các thuộc tính và phương thức của các đối tượng trang tính, nhờ vào khai báo biến.

  • Chọn phương thức “ Sao chép ” và chúng ta có thể thấy các đối số của phương thức “ Sao chép ”.
  • Vì chúng ta cần sao chép trang tính sau trang tính “ Sheet1 ”, trước tiên hãy truy cập đối số “ Sau ” bằng cách nhập tên đối số như bên dưới.

Sau khi đối số được đánh dấu vì chúng tôi đã sử dụng tên đối số có ký hiệu " bằng nhau theo định nghĩa " (: =)

  • Bây giờ nhập tên trang tính bằng cách sử dụng đối tượng “Trang tính ”.

Mã:

Sub Worksheet_Copy_Example1 () Dim Ws As Worksheet Set Ws = Worksheets ("January") Ws.Copy After: = Sheets ("Sheet1") End Sub
  • Chúng ta xong rồi. Thao tác này sẽ sao chép trang tính “ January ” sau trang tính “ Sheet1 ”.

Như bạn đã thấy, chúng tôi đã sao chép bảng tính tháng 1 ở bên phải của “Sheet1”. Một trong những điều mặc định ở đây là tên của trang tính giống với trang được sao chép với số lượng của trang tính trong dấu ngoặc, trong trường hợp này, nó là “(2)”.

  • Để thay đổi tên trang tính, hãy thêm đoạn mã bên dưới vào đoạn mã trên.
  • 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.
  • Tên trang tính được sao chép mặc định sẽ giống với số trang tính được sao chép đó.

thú vị bài viết...