Hỏi về ComboBox

  • Thread starter adam_tran
  • Ngày gửi
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#1
Thuộc tính ColumnCount của ComoBox cho phép hiển thị 2 cột khi RowSource có hơn 2 cột. Vật khi dùng Method AddItem, làm sao Add cả 2 cột này.
Thí dụ tôi muốn duyệt qua danh sách vật tư gồm mã và tên, tôi chỉ Add vào một số đủ điều kiện thôi. Nếu Add mã không thỉ dễ, nhưng tôi muốn Add cả tên kèm theo ở cột thứ 2.

Tương tự khi tôi muốn đề cập đến đối tượng nhóm của các item (items) trong 1 combobox thì cú pháp như thế nào? Tôi thữ code sau nhưng nó báo lỗi:

Dim Item
For each Item in ComboBox.Items
''''''''''''''''''''''''''''
Next
 
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#2
Giới thiệu cho các bạn biết với!

adam_tran nói:
Thuộc tính ColumnCount của ComoBox cho phép hiển thị 2 cột khi RowSource có hơn 2 cột. Thí dụ tôi muốn duyệt qua danh sách vật tư gồm mã và tên, tôi chỉ Add vào một số đủ điều kiện thôi. Nếu Add mã không thỉ dễ, . . .
Bạn có quyền đưa kèm files mà, Bạn có thể đưa lện đây cho bọn này tham khảo được không? Xin cảm ơn trước!
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#3
Dear chàng adam,
-----------------
Mỗi khi gặp khó khăn như thế này, em thường hỏi bác Office Assistant. Với câu hỏi của bác thì "bác ấy" trả lời như thế này (không biết có vừa ý bác không):

Office Assistant nói:
Dim MyArray(6, 3)
____________________________
Private Sub UserForm_Initialize()
Dim i As Single
'Box contains 6 data columns
ComboBox1.ColumnCount = 6
'Load integer values into first column of MyArray
For i = 0 To 5
MyArray(i, 0) = i
Next i
'Load columns 2 and three of MyArray
MyArray(0, 1) = "Zero"
MyArray(1, 1) = "One"
MyArray(2, 1) = "Two"
MyArray(3, 1) = "Three"
MyArray(4, 1) = "Four"
MyArray(5, 1) = "Five"
MyArray(0, 2) = "Zero"
MyArray(1, 2) = "Un ou Une"
MyArray(2, 2) = "Deux"
MyArray(3, 2) = "Trois"
MyArray(4, 2) = "Quatre"
MyArray(5, 2) = "Cinq"
'Load data into ComboBox1 and ListBox2
ComboBox1.Column() = MyArray
End Sub
Còn cái này:
adam_tran nói:
Tương tự khi tôi muốn đề cập (hay truy cập?) đến đối tượng nhóm của các item (items) trong 1 combobox thì cú pháp như thế nào? Tôi thử code sau nhưng nó báo lỗi:

Dim Item (As CÁI GÌ nữa chứ nhỉ!!!)
For each Item in ComboBox.Items
''''''''''''''''''''''''''''
Next
Theo em hiểu thì bác muốn truy cập đến một mục nào đó trong danh sách (gọi là Item cũng được). Tuy vậy ComboBox không có thuộc tính này (Items). Muốn truy vấn đến một hạng mục trong danh sách, ta dùng thuộc tính ListIndex(<index>)
Chúc bác thành công!
:hacker:
 
Sửa lần cuối:
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#4
Đào Việt Cường nói:
ComboBox1.Column() = MyArray
Chưa thử nhưng đây đúng là cái tôi cần đây. Cám ơn bạn nhiều!
 
K

khuenguyen.tran

Thành viên sơ cấp
3/12/05
40
0
0
37
HCM
#5
Mình đã thử đọan Code của bạn Đào Việt Cường về cách add một mảng gồm 2 cột vào ListBox hay ComboBox, nhưng bị báo lỗi, Lỗi báo do khai báo mảng MyArray(i,0) = i
Bạn giúp lại mình nhé, hay bạn gửi cho mình File hướng dẫn vể khuenguyen.tran@gmail.com
Cám ơn bạn nhiều
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#6
Dear khuenguyen.tran,
---------------------
Trước khi đưa đoạn mã chương trình, mình luôn kiểm tra rất kỹ. Bạn kiểm tra lại xem có copy đủ hết chưa.
Lỗi báo do khai báo mảng MyArray(i,0) = i
Khả năng bạn đã copy thiếu dòng:
Dim MyArray(6, 3)
Thôi để mình đưa lên đây, các bạn cùng xem nhé!
 
Sửa lần cuối:
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#7
À, thực sự, nếu áp dụng đọan Code của Cường vào một Form có một ComboBox, và dùng thủ tục Private Sub UserForm1_Initialize() thì sẽ không Add được các Item có nhiều cột vào List Box hay ComboBox. Chị chỉ thực hiện được qua một CommandButton thôi, giống như File em đưa lên, dù thiết kế trên Form hay trên Worksheet cũng vậy.
Cường thử xem, nếu không cần CommandButton mà chỉ cần khi Load Form lên là các Item tự cập nhật vào ComboBox có cách nào không ?
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#8
Thêm 1 chú ý nhỏ: :)

Đây là ComboBox, ListBox nằm trong bộ thư viện MS Form 2.0 (fm20.dll) của bộ ms office. Không phải các Controls khác. Dĩ nhiên là Excel thì làm với công cụ này rồi (Limit của FM20's ComboBox, ListBox là hình như chỉ support 20 columns thôi - ko nhớ lắm vì lâu quá rồi ko dùng đến món này)

Cách thức add items này ngoài việc dùng mảng như Cường thì hình như (cũng ko nhờ nốt vì chỉ còn tý thông tin nằm trong đầu) là đầu tiên thì add item (col 0), sau đó thì dùng thuộc tính List(...ko nhớ...) hay là item(...) gì đó để update các columns còn lại - hơi phiền vì phải dùng đến 2 lệnh trong vòng lặp. Tuy nhiên, nếu dùng trong Excel thì làm như Cường (dùng mảng) là ổn rồi.

chidung nói:
Cường thử xem, nếu không cần CommandButton mà chỉ cần khi Load Form lên là các Item tự cập nhật vào ComboBox có cách nào không ?
Chị chỉ cần viết 1 thủ tục kiểu như (Dựa theo cách lấy dữ liệu từ mảng)

Public Function LoadDataToComBo(cboName As Object, arrDataSource As Variant) As Boolean
'//*********************************************************************
'// Purpose: Load 1 mang vao ComboBox hoac Listbox cua MS Form 2
'// Parameters:
'// 1. cboName: ComboBox hoac ListBox can load du lieu
'// 2. arrDataSource: Mang n chieu - nguon du lieu can load len combobox hay listbox
'// Return:
'// - True If load successfull, False if failed.
'// Samples:
'// Dim Dim myArray(6, 3)
'// Fill myArray data here...
'// iRet = LoadDataToComBo(ComboBox1, myArray)
'// Written by: VNUNI Development team
'// Histories....
'// ...
'//*********************************************************************
On Error Goto Proc_Error
Dim ....
'// Asumes function failed.
LoadDataToComBo = False
'// Identify number of columns
cboName.ColumnCount = Ubound(arrDataSource,...) --> Làm thế nào để lấy chiều của mảng, tương ứng với số cột

'// Loading data to controls
cboName.Column() = MyArray
'// Continue your code here....

Done:
-----LoadDataToComBo = True
-----Exit Function

Proc_Error:
'// Raise error description here....
'//...
-----....
End Function

Trong sự kiện Form_Load hay Gì gì đó_Load :) (Form đó có cái Combo, listbox của FM20.dll nhé) thì Call cái hàm như mô tả trong phần samples ở trên

Tóm lại là viết kiểu như vậy, còn code cụ thể thì lâu lắm rồi ko viết. Đoạn trên chỉ là viết chay thôi (ko viết trong môi trường lập trình)
 
Sửa lần cuối:
H

handung107

Thành viên thân thiết
28/8/04
576
13
0
VN
www.giaiphapexcel.com
#9
Chị chỉ muốn nhờ các em xem lại một tí xíu này thôi. Như File ví dụ của Cường là ComboBox được đặt trên Worksheet và dùng một Button để thi hành thủ tục
Nếu thiết kế trên một UserForm, có một ComboBox và cũng dùng Button để thi hành thủ tục sau khi load Form lên thì cũng không có gì để nói cả. Nhưng chị lại muốn khi Load Form lên bằng thủ tục :
Private Sub UserForm1_Initialize()
Code của Cường
End Sub
thì ComboBox sẽ tự cập nhật các Item trong mảng vào lại không được.
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#10
Dear HanDung107
-----------------
Chị ơi, em áp dụng trên User form có thấy sao đâu. Em không biết hiện tượng "và dùng thủ tục Private Sub UserForm1_Initialize() thì sẽ không Add được các Item có nhiều cột vào List Box hay ComboBox" là như thế nào ạ?
Em gửi file đính kèm chị xem xem có đúng như ý chị muốn không! Em vẫn sử dụng đoạn code đó, chỉ sửa một chút là bổ sung tham số Combo Box thôi.
 
Sửa lần cuối:

Thành viên trực tuyến

Không có thành viên trực tuyến.

Xem nhiều