Hướng dẫn code vba open sheet - mã vba mở trang tính

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
  • Cách viết đối tượng Worksheet trong VBA
    • Đối tượng Worksheets hay Sheets
    • Đối tượng Sheet
  • Các phương thức của đối tượng Worksheet

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

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

Hướng dẫn code vba open sheet - mã vba mở trang tính

  • Đối tượng Worksheets hay Sheets 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

Hướng dẫn code vba open sheet - mã vba mở trang tính

  • Đối tượng Sheet 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.

Hướng dẫn code vba open sheet - mã vba mở trang tính
Các phương thức của đối tượng Worksheetsắ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

Đối tượng SheetS“. Đâ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ụ:

Hướng dẫn code vba open sheet - mã vba mở trang tính

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

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.Sheets(“01”).Select

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 ABC_01.Select   (vì Sheet1 đã đổi thành ABC_01 nên ký tự ABC_01 chính là CodeName của Sheet)

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ụ:

Hướng dẫn code vba open sheet - mã vba mở trang tính

  • 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):

Đối tượng Sheet

Các phương thức của đối tượng WorksheetS“), chúng ta chỉ được phép sử dụng CodeName mà không được sử dụng Name.

Hướng dẫn code vba open sheet - mã vba mở trang tính
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)
Hướng dẫn code vba open sheet - mã vba mở trang tính

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

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: Activate: Để kích hoạt một sheet Ví dụ:

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 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ụ:

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. 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)

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)

Delete: Xóa 1 sheet Ví dụ: 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() XoaSheet()

Application.DisplayAlerts = False Sheet2.Delete Application.DisplayAlerts = True.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 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é! 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