cb không sử dụng - Mình copy từ đoạn code khác vào nên quên bỏ đi
lenh(5) chứa nội dung các dòng trong combobox
lenh(1)="Lệnh 1", ...,lenh(5)="Lệnh 5"
Ý mình muốn khi chọn "Lệnh 1" trong combobox thì trả về "Lệnh 1" qua MsgBox().
Tôi cũng đã nhập "Application.CommandBars.ActionControl.", nhưng trong list để chọn thuộc tính/sự kiện của ActionControl nó không hiện Text hoặc ListIndex nên tôi nghĩ nó không có. Nguyên nhân tại sao nó không hiện?
Tôi cũng đã nhập "Application.CommandBars.ActionControl.", nhưng trong list để chọn thuộc tính/sự kiện của ActionControl nó không hiện Text hoặc ListIndex nên tôi nghĩ nó không có. Nguyên nhân tại sao nó không hiện?
ActionControl là Class CommandBarControl. Như vậy nó chỉ hiện ra những sự kiện và thuộc tính của loại CommandBarControl mà thôi. Macro goi_lenh() được gọi từ một điều khiển có Class là ControlComboBox (được tạo bởi tham số Type:=msoControlComboBox), ControlComboBox có thuộc tính và sự kiện gì thì chúng ta có thể gọi được với ActionControl mặc dù không nhìn thấy.
Một nguyên tắc khai thác đối tượng như sau.
Nếu Class2 được tạo ra từ Class1 (Class1 là mẹ của Class2)
Dim cls1 As New Class1
Dim cls2 As New Class2
Set cls2=cls1
'Tình huống khác có thể gán Set cls1=cls2
Trong VBA, class ControlComboBox được thừa kế từ CommandBarControl, theo nguyên tắc trên tôi có hàm goi_lenh() thứ 2 như sau.
Mã:
Sub goi_lenh()
Dim cb As CommandBarComboBox
Set cb = Application.CommandBars.ActionControl '(Đúng theo nguyên tắc Set cls2=cls1)
MsgBox cb.Text, , "Goi lenh thu "
End Sub
Cách làm trên, sau khi bạn gõ cb. sẽ hiện ra các property và các method/sub của CommandBarComboBox. Cách này dễ hiểu.
Trong các ngôn ngữ lập hướng đối tượng khác thì vấn đề này rất dễ hiểu, nó là dạng TypeCast.
Nói chung để khai thác tốt các đối tượng mình cần nắm tốt bản chất của đối tượng, các Class được tạo ra như thế nào, tính thừa kế giữ chúng ra sao, phương pháp TypeCast.