Khi mới học VBA, chúng ta thấy có rất nhiều đoạn code khác nhau liên quan tới Worksheet như: sheet, Sheets, Worksheets, Sheets(1), Sheets(“ABC”)… vậy phải hiểu như thế nào cho đúng? Và với mỗi kiểu viết khác nhau thì có lưu ý gì, khi nào viết được kiểu đó? Trong bài viết này Học Excel Online sẽ giúp bạn giải đáp những thắc mắc này.
Xem nhanh
Trong cửa sổ Project của VBA, chúng ta có thể thấy đối tượng Sheet gồm 2 phần là Code Name và Name. Cụ thể như sau:
Thứ tự của Sheet trong thư mục Microsoft Excel Objects của VBA được sắp xếp theo thứ tự của Code Name, không phải theo Name hay theo vị trí của Sheet trên thanh Sheet Tab
Chú ý trong đối tượng này, chữ Sheets có kèm theo chữ “S“. Đây là sự khác biệt rất lớn, bởi việc viết có S hay không có S sẽ ảnh hưởng tới cấu trúc của câu lệnh code trong VBA.
Khi sử dụng đối tượng này, chúng ta phải nhập theo tên (Name) chứ không phải nhập theo CodeName.
Ví dụ:
Sheets(“01”).Select => Viết đúng
Sheets(“ABC_01”).Select => Viết sai => Báo lỗi tô màu vàng tại dòng lệnh này.
Cách viết đúng (1 trong 2 cách):
Cách 1: Sheets(“01”).Select
Cách 2: ABC_01.Select (vì Sheet1 đã đổi thành ABC_01 nên ký tự ABC_01 chính là CodeName của Sheet)
Ngoài ra có thêm 1 cách viết khác là dùng số thứ tự của Sheet đó:
Khi viết đối tượng Sheet (không có chữ “S“), chúng ta chỉ được phép sử dụng CodeName mà không được sử dụng Name.
Chúng ta chỉ cần gọi ra đúng tên Code name của Sheet là có thể sử dụng được.
Ngoài ra chúng ta có thể sử dụng thêm 1 đối tượng để gọi riêng Sheet đang hoạt động (đang được chọn, đang làm việc) là ActiveSheet (không có chữ S)
Như vậy chúng ta cần hết sức chú ý: Khi dùng cách gọi nào phải viết đúng theo cách viết của đối tượng đó. Nếu viết sai thì VBA sẽ báo lỗi không xác định được đối tượng (object)
Vì VBA là ngôn ngữ lập trình theo hướng đối tượng, do đó trong đối tượng Worksheet chúng ta có các phương thức sau:
Activate: Để kích hoạt một sheet
Ví dụ:
Sheets(“ABC”).Active ‘Kích hoạt Sheet có tên là ABC
Sheet1.Active ‘Kích hoạt Sheet có CodeName là Sheet1
Kích hoạt tức là chọn tới Sheet đó, đồng thời con trỏ chuột sẽ đặt tại 1 ô trong Sheet được kích hoạt.
Calculate: thực hiện việc tính toán tất cả các công thức có trong Sheet
Ví dụ:
Sheets(“ABC”).Calculate ‘Thực hiện tính toán các công thức trong Sheet có tên là ABC
Sheet1.Calculate ‘Thực hiện tính toán các công thức trong Sheet có CodeName là Sheet1
Copy: Sao chép 1 sheet
Việc copy 1 sheet có thể sao chép sheet đó thành 1 sheet mới nằm trong cùng 1 Workbook (tạo ra phiên bản copy) hoặc Copy ra 1 Workbook khác. Kèm theo đó là vị trí đặt Worksheet mới được copy đó. Nếu không quy định cụ thể ở vị trí nào thì sẽ mặc định là vị trí cuối cùng.
Việc gán vị trí sẽ quy định bởi tham số Before (ở trước) hoặc After (ở sau)
Sheets(“Tên sheet”).Copy ([Before], [After])
Sheets(Số thứ tự sheet).Copy ([Before], [After])
Ví dụ:
Worksheets(“Sheet2”).Copy Before:=Worksheets(1) ‘Sao chép sheet có tên là Sheet2 tới vị trí trước Sheet đầu tiên trong danh sách các Sheet
Delete: Xóa 1 sheet
Ví dụ:
Sheets(“MENU”).Delete ‘Xóa Sheet có tên là MENU
Khi xóa 1 Sheet, chúng ta có thể thấy Excel xuất hiện 1 thông báo yêu cầu xác nhận lại việc xóa này có được làm hay không. Nếu xác nhận lại là có thì Excel mới thực hiện việc Xóa Sheet.
Để bỏ thông báo đó mà luôn luôn cho phép xóa Sheet, chúng ta có thể kết hợp với câu lệnh không hiển thị thông báo của Excel như sau:
Sub XoaSheet()
Application.DisplayAlerts = False
Sheet2.Delete
Application.DisplayAlerts = True
End Sub
Câu lệnh trên sẽ xóa Sheet có CodeName là Sheet2 mà không có bất kỳ thông báo nào.
Move: Di chuyển 1 sheet
Việc di chuyển Sheet cũng giống như khi chúng ta Copy, đó là phải chỉ định vị trí Sheet đó sẽ đi tới đâu, trước Sheet nào, hay sau Sheet nào, tại Workbook nào
Sheets(“Tên sheet”).Move ([Before], [After])
Select: Lựa chọn 1 sheet
Thao tác Select giống như Active, đó là lựa chọn sheet để kích hoạt Sheet.
Sự khác nhau cơ bản giữa Select với Active đó chính là: Chúng ta có thể lựa chọn (Select) cùng lúc nhiều Sheet, nhưng chỉ có duy nhất 1 Sheet được kích hoạt (Active)
Hy vọng rằng qua bài viết này các bạn đã có thể biết thêm nhiều kiến thức khi lập trình với đối tượng Sheet trong VBA.
Hãy đón xem các bài viết khác tại Blog của Học Excel Online nhé!
Hướng dẫn cách viết code với đối tượng Workbook trong VBA Excel