VBA Excel (Bài 11): Cách sử dụng tên trong VBA

Phần nhiều người dùng Excel đều nhận thức được tầm quan trọng của Name Range trong các thao tác lập bảng tính. Dưới đây là một số thủ thuật VBA thường dùng khi thao tác với Name Range.

LIỆT KÊ DANH SÁCH CÁC NAME RANGE

Chắc bạn đã biết cách để có danh sách đầy đủ tất cả các Name Range trong bảng tính thông qua lệnh Insert Name Paste và sau đó click vào lựa chọn Paste List. Nhưng danh sách Name Range xuất hiện sẽ không bao gồm những Name Range ẩn và tên trang tính. Để hiển thị tất cả Name Range và tham chiếu đi kèm thì ta cần sử dụng thủ tục / sub VBA sau:

Hàm này hoạt động dựa trên việc lặp vòng danh sách các tên có trong Name Collection.

NAME RANGE ẨN

Name Range ẩn là những tên không được hiển thị cho người dùng. Các lập trình viên thường sử dụng tên ẩn để lưu trữ nhiều loại thông tin khác nhau. Ví dụ, chỉ cần tạo một chuỗi đường link HTML bằng cách sử dụng bộ tiện ích cài thêm có tên “Trình Trợ lý Internet” (kích hoạt tính năng “Save” ở hộp thoại File bằng HTML). Sau đó, kích hoạt hàm thủ tục con ListAllnames và bạn sẽ thấy bảng tính xuất hiện hàng tá các tên ẩn chứa những thông số đã được định sẵn trong Trình Trợ lý Internet. Trình cài đặt này sẽ sử dụng những tên ẩn đó để làm giá trị mặc định mỗi khi khởi động.

Tên ẩn thường có thông số hiển thị “Visible” được đặt giá trị là False. Cách duy nhất để thay đổi giá trị này là thông qua VBA. Ví dụ, lệnh dưới đây sẽ khiến cụm từ “MyRange” trở thành tên ẩn:

ActiveWorkbook.Names(“MyRange”).Visible = False

TÊN TRANG TÍNH

Tên trang tính được sử dụng cho từng trang tính cụ thể. Để tạo một tên trang tính, chỉ cần thêm tên bảng tính vào phía trước tên trang tính và ngăn cách bằng 1 dấu chấm than.

Để biết 1 tên bất kỳ liệu có phải là tên trang tính, chỉ cần xem trong thông số “Name” quy định nội dung của tên có dấu “!” hay không. Bạn có thể dùng lệnh “Like” để kiểm tra. Ví dụ, câu lệnh phía dưới sẽ cho ra kết quả là “True” nếu như cụm từ “MyRange” đúng là tên trang tính:

ActiveWorkbook.Names(“MyRange”).Name Like “*!*”

NAME RANGE CHỨA LIÊN KẾT

Tên cũng có thể sử dụng để truy cập đến một bảng tính khác. Đấy được gọi là tên chứa liên kết. Để biết 1 tên bất kỳ liệu có phải là tên chứa liên kết, hãy kiểm tra thông số “RefersTo” xem có dấu “[” hay không. Ví dụ, câu lệnh phía dưới sẽ cho ra kết quả là “True” nếu như cụm từ “MyRange” đúng là tên chứa liên kết.

ActiveWorkbook.Names(“MyRange”).RefersTo Like “*[[]*”

Lưu ý: Dấu mở ngoặc vuông là một ký tự đặc biệt, vì vậy trong lệnh “Like” bắt buộc phải sử dụng hai dấu [ và ] để đánh dấu kí tự.

NAME RANGE LỖI

Thường thì tên ít khi gắn với một giá trị không tồn tại (có thể lý do bởi một trang tính đã bị xóa mất). Nhưng những kiểu tên như thế này sẽ gây ra hiện tượng “liên kết ảo” , mỗi lần bạn mở 1 bảng tính lên là sẽ có 1 hộp thoại Excel xuất hiện yêu cầu cập nhật lại địa chỉ liên kết, mặc dù thực ra liên kết đó không hề tồn tại.

Để biết 1 tên bất kỳ liệu có phải là tên lỗi, hãy kiểm tra thông số “RefersTo” xem có kí tự “REF!” hay không. Ví dụ, câu lệnh phía dưới sẽ cho ra kết quả là “True” nếu như cụm từ “MyRange” đúng là tên lỗi:

ActiveWorkbook.Names(“MyRange”).RefersTo Like “*REF!*”