Sử khác nhau giữa DropDownList và ComboBox
Adam_tran 1. Các anh chị cho em hỏi làm thế nào để sort các item trong Listbox hay Combobox theo thứ tự ABC, cách nào đơn giản nhất. Nếu dùng qua 1 Array thì phiền phức quá, vì ListBox em dùng có hơn 1 cột.
2. Cách nào để kiểm tra Listbox, ComboBox chưa được chọn, thí dụ khi chưa chọn 1 giá trị trong ListBox, nhưng reffer thuộc tính ListBox.Value thì nó sẽ báo lỗi.
3. Thuộc tính Selected của ListBox-ComBoBox có nghĩa là gì? Chỉnh sửa lần cuối bởi điều hành viên: 14/12/21
Đào Việt Cường Post : Em thấy bác có vẻ không thích chị VBA Assistant nhỉ! Các thắc mắc của bác đều được chị ấy hướng dẫn rất tỉ mỉ đây này: object.Selected( index ) [= Boolean] IF ListBox.ListIndex= -1 Then Debug.Print "Chưa có Item nào được chọn" Còn việc kiểm tra Item nào được chọn thì: - Với ComboBox:IF ComboBox.ListIndex= 0 Then Debug.Print "Item đầu tiên được chọn" - Với ListBox:IF ListBox.ListIndex= 0 Then Debug.Print "Item đầu tiên được chọn" hoặcIF ListBox.Selected(0) Then Debug.Print "Item đầu tiên được chọn" Chúc bác thành công!
Tuanktcdcn Post :
1. Các anh chị cho em hỏi làm thế nào để sort các item trong Listbox hay Combobox theo thứ tự ABC, cách nào đơn giản nhất. Nếu dùng qua 1 Array thì phiền phức quá, vì ListBox em dùng có hơn 1 cột. If Obj.Listindex<0 then MsgBox "Xin hãy chọn đối tượng!" Exit Sub End if Kiểm tra xem có item nào trong list được chọn không (Obj.Selected=True). Chi tiết Mr Cường đã nói ở trên.
Adam_tran Post : Thanks các sư huynh! Đoạn mã sau dùng để chuyển các Item từ 2 list, thí dụ 1 List là danh mục TK, 1 list là DM tài khoản được chọn cần để in. For i = 0 to Obj.ListCount - 1 if Obj.Selected(i) then Obj2.AddItem Obj.List(i) Obj.RemoveItem(i) Next
Đào Việt Cường Post : Cụ thể hoá cái Obj với thuộc tính Selected của các bác, em cho rằng nó chính là ListBox. Thuộc tính này một lần nữa lại cho thấy sự khác biệt giữa ListBox và ComboBox. Hiểu theo nghĩa ứng dụng thì tại một thời điểm, ComboBox chỉ cho phép người dùng chọn duy nhất một đối tượng và đưa vào phần TextBox (chúng ta hiểu ComboBox gồm 3 thành phần). Còn ListBox lại cho phép người sử dụng "select" cùng lúc nhiều Item (users can make multiple selections). Vì vậy có thể nói Obj trong đoạn mã lệnh của bác adam_tran chính là một ListBox chứ không thể là ComboBox(!?) Em hiểu thế đúng hay sai?
Tuanktcdcn Post :
Dear all, -------- ...trong đoạn mã lệnh của bác adam_tran chính là một ListBox chứ không thể là ComboBox(!?) Em hiểu thế đúng hay sai? Đúng rồi và trước phải có lệnh tiền đề là ListBox1.MultiSelect = fmMultiSelectMulti
Hai2Hai Post :
Thanks các sư huynh! Đoạn mã sau dùng để chuyển các Item từ 2 list, thí dụ 1 List là danh mục TK, 1 list là DM tài khoản được chọn cần để in. For i = 0 to Obj.ListCount - 1 if Obj.Selected(i) then Obj2.AddItem Obj.List(i) Obj.RemoveItem(i) Next "Obj" nên đổi là olstUsers (hay olstAccount gì đó) hoặc clstUsers (o = object; c = control; lst = listbox; Users, Account - phần tên của biến, tùy theo tên đối tượng mà đặt cái tên cho rõ nghĩa). Như thế chẳng còn ai thắc mắc được nữa. Nếu trong project mà có hàng nghìn forms, modules, classes (dĩ nhiên chia thành projects nhỏ) thì cứ Obj, ListBox1.... như thế có mà loạn. Nếu ko người khác đọc vào ko hiểu, 3 tháng sau chính mình đọc lại cũng chịu (trừ dự án quá nhỏ). Sau khi đã học mấy cái "ngữ nghĩa" trong lập trình VB rồi thì phải chuyển đến chuyện học viết sao cho sáng sủa và chuyên nghiệp.
Adam_tran Post : Đúng là 2 Listbox trên 1 form cùng với các Button Add, AddAll, Remove và RemoveAll. Thuộc tính MultiSelected thì đã set khi design rồi. Đúng là chỉ cần đọc Help là giải quyết được nhiều chuyện, nhưng đôi lúc không được tập trung lắm thành ra không tìm ra được cái cần tìm vì Help nó cho ra nhiều thứ quá. Thank for All!
Đào Việt Cường Post : Dear hai2hai, ------------ Em thì lại hiểu Obj của các bác í là một đối tượng tượng trưng cho cả LisBox và ComboBox. Nghĩa là đoạn code này chưa thể chạy được ngay mà chỉ diễn giải một thủ tục muốn minh hoạ cho cả ListBox và ComboBox. Nếu hiểu như vậy là sai nên muốn phân biệt cho những mới tiếp cận VBA khỏi bị nhầm. Bác TuanKTCDCN cũng đã công nhận thế và còn bổ sung một thi hành rất quan trọng: ListBox1.MultiSelect = fmMultiSelectMulti Nếu thuộc tính MultiSelect không được thiết lập là fmMultiSelectMulti hoặc fmMultiSelectExtenden (cho phép lựa chọn nhiều Item) thì thủ tục thi hành bên dưới không chính xác, có thể Runtime Error(?) Tìm hiểu về hai điều khiển này thật nhiều thứ đáng để bàn quá bác nhỉ!
Hai2Hai Post :
Dear hai2hai, ------------ Em thì lại hiểu Obj của các bác í là một đối tượng tượng trưng cho cả LisBox và ComboBox. Nghĩa là đoạn code này chưa thể chạy được ngay mà chỉ diễn giải một thủ tục muốn minh hoạ cho cả ListBox và ComboBox. Nếu hiểu như vậy là sai nên muốn phân biệt cho những mới tiếp cận VBA khỏi bị nhầm. Nếu viết là olstObjectName thì hầu như ai cũng hiểu là Listbox object. Đó là coding conventions rồi. Nếu mà ko rõ và nhầm sang Combobox obj thì .... thôi đành chịu vậy. . Anh đang nhấn mạnh chuyện coding convension hơn là chuyện có set cái propery multiselect gì đó lúc runtime hay design time và chuyện runtimetime error.
"Điều khiển" ở đây nghĩa là gì hả Cường? có phải là control ko?
Các A/C cho em hỏi chút liên quan tới combobox với ạ. Vấn đề là em muốn combobox show ra listbox như trong hình đính kèm thì phải làm sao để viết được ạ? Em xem hình thì đoán là cobobox đó show ra listbox thôi chứ không nghĩ combobox set được nhiều column như listbox. |