Hướng dẫn cách tạo combobox để di chuyển tới các Sheet trong file Excel

Chắc hẳn bạn đã gặp nhiều khó chịu khi phải di chuyển tới các Worksheet trong 1 file Excel có nhiều Sheet. Việc sử dụng thanh SheetTab để di chuyển khá chậm chạp và tốn nhiều thời gian, nhiều thao tác của bạn. Vậy hãy làm việc này trở nên thú vị hơn bằng cách tạo combobox để di chuyển tới các Sheet trong file Excel nào.

1. Tạo combobox chứa danh sách các Sheet trong file Excel

Giả sử chúng ta có 1 file Excel gồm nhiều sheet như sau:

Trong đó:

  1. Bấm chuột phải vào góc bên trái thanh SheetTab để mở cửa sổ Active. Trong cửa sổ này có hết tên các Sheet
  2. Giao diện các Sheet tại thanh SheetTab không hiển thị hết được các Sheet. Điều này gây khó khăn khi di chuyển tới các Sheet bằng cách sử dụng thanh SheetTab

Để việc di chuyển giữa các Sheet được dễ dàng hơn, chúng ta có thể tạo 1 danh sách chọn, trong danh sách này sẽ có chứa tên các Sheet

a. Tạo Combobox trong Excel

Trước hết chúng ta cần tạo ra 1 combobox. Trong thẻ Developer chúng ta bấm chọn Insert, trong đó chọn tiếp Combobox trong mục ActiveX Controls

Nếu bạn chưa biết thẻ Developer ở đâu thì tham khảo bài viết này:

Cách hiện thẻ Developer để ghi Macro hoặc viết code VBA trong Excel

Tiếp theo chúng ta sẽ vẽ combobox đó ra 1 vị trí bất kỳ.

Để quản lý các đối tượng trong Excel được hiệu quả, chúng ta cần đổi tên để cho dễ nhớ và dễ gọi ra khi cần. Trong combobox vừa tạo, chúng ta bấm chuột phải và chọn Properties

Trong mục (Name) chính là tên của combobox. Mặc định trong Excel khi tạo Combobox sẽ có tên là ComboBox và Số thứ tự của combobox được tạo.

Muốn đổi tên, chúng ta sẽ thay chữ ComboBox1 trong mục (Name) thành tên gọi theo ý muốn. Lưu ý là tên này không được sử dụng dấu cách, không bắt đầu bằng 1 con số hoặc bằng 1 ký tự đặc biệt nào đó.

Ví dụ: Đổi tên thành cbChonSheet (chữ cb là viết tắt của combobox, mục đích sử dụng combobox là Chọn Sheet trong file)

b. Gán danh sách tên Sheet vào Combobox

Trong thao tác này, chúng ta hình dung rằng cần phải đạt được yêu cầu sau:

  • Tập hợp danh sách tên các Sheet đang có.
  • Mỗi khi file Excel có sự thay đổi về Sheet (Xóa, thêm mới, đổi tên…) thì danh sách tên Sheet phải cập nhật lại.

Như vậy việc cần làm bao gồm:

  • Xóa danh sách tên Sheet trong Combobox trước mỗi lần tác động tới nó
  • Nạp lại danh sách tên Sheet vào Combobox

Các bước thực hiện như sau:

  1. Mở cửa sổ VBA bằng phím tắt Alt + F11 (hoặc trong thẻ Developer chọn Visual Basic)
  2. Double Click vào Sheet có đặt combobox, trong ví dụ này là Sheet1(MENU)
  3. Chọn sự kiện Worksheet_Activate

Trong cửa sổ viết code của Worksheet_Activate chúng ta viết lệnh như sau:

Trong đó:

  • cbChonSheet là tên của Combobox đã được đặt ở trên
  • Me đại diện cho Worksheet đang làm việc. Dùng Me để có thể gọi ra các đối tượng có tại sheet đó.
  • Me.cbChonSheet.Clear là xóa nội dung có trong Combobox có tên là cbChonSheet, combobox này được đặt tại Sheet đang làm việc
  • For Each ws In ThisWorkbook.Worksheets là thực hiện xét từng WorkSheet có trong Workbook với vòng lặp dạng For Each
  • Me.cbChonSheet.AddItem ws.Name là thêm nội dung vào danh sách chọn của Combobox, nội dung được thêm là tên của mỗi Worksheet (theo biến ws) có trong Workbook
  • Next ws là sau mỗi sheet được chọn sẽ làm việc tiếp tới sheet khác cho tới khi hết vòng lặp (Cấu trúc For Each đi kèm với Next)

Kết quả: Khi bấm vào sheet MENU và chọn tới combobox cbChonSheet thì chúng ta sẽ thấy xuất hiện danh sách như sau:

Xem thêm:

Hướng dẫn sử dụng vòng lặp For.. Next trong VBA

2. Di chuyển tới sheet được chọn trong Combobox

Do mỗi đối tượng của Combobox đều chính là tên của các Sheet, do đó khi chọn 1 nội dung bất kỳ, chúng ta sẽ hình dung đó chính là câu lệnh

“Tên Sheet được chọn”.Select

Việc thay đổi nội dung được chọn trong Combobox chính là sự kiện Combobox_Change. Trong cửa sổ VBA chúng ta làm như sau:

  • Double click vào sheet có chứa Combobox (Sheet1)
  • Bấm chọn cbChonSheet
  • Sau đó VBA sẽ tự động tạo ra Private Sub cbChonSheet_Change (nếu không thì chọn tiếp Change ở bên phải của cbChonSheet)

Những điều cần chú ý khi viết code cho sự kiện Combobox_Change:

  • Phải có sự thay đổi trong Combobox (tức là có nội dung được chọn) thì mới tính là xảy ra sự kiện. Việc này sẽ giúp tránh lỗi khi chúng ta xóa nội dung trong Combobox.
  • Khi có nội dung được chọn thì xảy ra sự kiện tương ứng

Vì vậy chúng ta phải kết hợp thêm logoc IF trong Private Sub cbChonSheet_Change  như sau:

Private Sub cbChonSheet_Change()

If cbChonSheet.Value <> “” Then

Worksheets(cbChonSheet.Value).Select

End If

End Sub

Trong đó:

  • cbChonSheet.Value <> “” có nghĩa là nội dung trong cbChonSheet khác rỗng, không phải là ô trống
  • Worksheets(cbChonSheet.Value).Select có nghĩa là chọn tới Sheet tương ứng theo giá trị được chọn tại combobox

Đến đây chúng ta đã hoàn thành được những việc phải làm rồi. Hãy đóng cửa sổ VBA lại và quay trở về Workbook để kiểm tra thành quả nào.

Chúc các bạn thành công!

Xem thêm:

Hướng dẫn cách mở userform bằng thao tác double click VBA Excel

Hướng dẫn cách tạo danh sách chọn cho combobox trong userform VBA Excel

Việc sử dụng VBA trong excel rất thú vị phải không nào. Ngoài ra VBA giúp ích rất nhiều trong công việc: giúp bạn tăng tốc trong quá trình xử lý trên Excel, giúp lập các báo cáo tự động, điều khiển các chương trình khác như Word, Power Point, Outlook… giúp biến file Excel của bạn trở thành 1 phần mềm chuyên nghiệp…

Để có thể học VBA một cách đầy đủ, có hệ thống, bạn hãy tham gia khoá học VBA101 – VBA cơ bản dành cho người mới bắt đầu của hệ thống Học Excel Online. Hiện nay hệ thống đang có nhiều ưu đãi khi bạn đăng ký khóa học này.


Tác giả: dtnguyen (Nguyễn Đức Thanh)

@ Học Excel Online | DTNguyen.business
· · ·

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