Hướng dẫn cách viết code với đối tượng Worksheet trong VBA Excel

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.

Phân biệt Name và Code Name của đối tượng Sheet trong VBA

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:

  • Code Name là phần bên trái, không nằm trong ngoặc. Code Name chỉ thay đổi được khi đổi tên mục (Name) ở cửa sổ Properties trong VBA

  • Name là phần trong dấu ngoặc đơn. Đây chính là tên sheet được thể hiện trong thanh SheetTab trong Excel. Khi đổi tên Sheet trong SheetTab thì phần tên này sẽ thay đổi theo.

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

Cách viết đối tượng Worksheet trong VBA

Đối tượng Worksheets hay Sheets

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 đó:

  • Thứ tự của Sheet chính là thứ tự của Sheet trên thẻ Sheet Tab của Excel theo chiều từ trái sang phải.
  • Thứ tự này không phụ thuộc vào tên Sheet, Code Name của Sheet hay thời gian khởi tạo Sheet.
  • Cách này thường áp dụng khi bạn biết rõ vị trí của Sheet cần làm việc trên thanh SheetTab mà không quan tâm tới tên Sheet.

Đối tượng 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)

Các phương thức của đối tượng Worksheet

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


Tác giả: duongquan211287

· · ·

Khóa học mới xuất bản