Ở bài này tôi sẽ chỉ bạn cách copy sheet trong trong workbook bằng VBA như thế nào, cùng tìm hiểu nhé.
Nội dung bài viết
Sao chép sheet sang Workbook Mới
Để sao chép một sheet sang một workbook sử dụng command sau :
Sheets("Sheet1").Copy
Sao chép ActiveSheet sang Workbook mới
Để sao chép ActiveSheet sang một Workbook mới sử dụng command sau:
ActiveSheet.Copy
Sao chép nhiều sheet sang workbook mới
Để sao chép nhiều sheet sang một workbook mới sử dụng command sau:
ActiveWindow.SelectedSheets.Copy
Sao chép sheet trong cùng một workbook
Những ví dụ dưới đây sẽ chỉ cho bạn cách sao chép một sheet trong cùng một workbook. Khi sao chép một sheet trong Workbook, bạn phải chỉ định một vị trí. Để chỉ định một vị trí, bạn sẽ yêu cầu VBA di chuyển sheet TRƯỚC hoặc SAU một sheet khác.
Sao chép sheet trước sheet khác
Ở đây tôi sẽ chỉ định sao chép và dán sheet trước sheet2 sử dụng command sau:
Sheets("Sheet1").Copy Before:=Sheets("Sheet2")
Sao chép sheet trước sheet đầu tiên
Thay vì chỉ định tên sheet, bạn cũng có thể chỉ định vị trí sheet. Ở đây tôi đang sao chép và dán một sheet trước sheet đầu tiên trong workbook.
Sheets("Sheet1").Copy Before:=Sheets(1)
Sheet mới được tạo bây giờ sẽ là sheet đầu tiên trong workbook.
Sao chép sheet sau sheet cuối cùng
Sử dụng thuộc tính After để yêu cầu VBA dán sheet SAU một sheet khác. Ở đây tôi sẽ sao chép và dán một sheet sau sheet cuối cùng trong workbook:
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
Lưu ý rằng tôi đã sử dụng Sheets.Count để đếm số sheet trong Workbook.
Di chuyển sheet
Bạn cũng có thể di chuyển một sheet trong workbook bằng cú pháp tương tự. Mã này sẽ di chuyển Sheet1 đến cuối Workbook:
Sheets("Sheet1").Move After:=Sheets(Sheets.Count)
Sao chép và đặt tên sheet
Sau khi sao chép và dán một sheet, sheet mới được tạo sẽ trở thành Activesheet . Vì vậy, để đổi tên sheet mới của tôi, chỉ cần sử dụng ActiveSheet.Name:
Sub CopySheetRename1() Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)ActiveSheet.Name = "LastSheet" End Sub
Nếu tên sheet đã tồn tại, đoạn mã trên sẽ tạo ra lỗi. Thay vào đó, chúng ta có thể sử dụng “On Error Resume Next” để yêu cầu VBA bỏ qua việc đặt tên cho sheet và tiếp tục với phần còn lại của quy trình:
Sub CopySheetRename2()
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = "LastSheet"
On Error GoTo 0
End Sub
Hoặc sử dụng Hàm RangeExists của tôi để kiểm tra xem tên sheet đã tồn tại chưa trước khi cố gắng sao chép sheet:
Sub CopySheetRename3()
If RangeExists("LastSheet") Then
MsgBox "Sheet already exists."
Else
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "LastSheet"
End If
End Sub
Function RangeExists(WhatSheet As String, Optional ByVal WhatRange As String = "A1") As Boolean
Dim test As Range
On Error Resume Next
Set test = ActiveWorkbook.Sheets(WhatSheet).Range(WhatRange)
RangeExists = Err.Number = 0
On Error GoTo 0
End Function
Các bài viết liên quan đến google sheet có thể bạn sẽ thích ở đây
Chúc vui!
Leave a Reply