Gọi giá trị Combobox trên Toolbars

  • Thread starter Thread starter voda
  • Ngày gửi Ngày gửi
Liên hệ QC

voda

Thành viên tiêu biểu
Thành viên danh dự
Tham gia
27/3/07
Bài viết
687
Được thích
1,028
Option Explicit
Sub vidu()
Dim lenh1 As CommandBarButton
Dim combo1 As CommandBarControl
Dim cb As CommandBar
Dim lenh(5), i
chibi giải thích dùm các biến lenh1, cb. Mình thấy trong code không sử dụng các biến này.
 
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().
 
Upvote 0
Đơn giản là thế này.
Mã:
Sub goi_lenh()
      MsgBox [COLOR="Blue"]Application.CommandBars.ActionControl.Text[/COLOR], , "Goi lenh thu "
End Sub
 
Upvote 0
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?
 
Upvote 0
chibi đã viết:
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.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom