Lấy item từ listbox ?

Liên hệ QC

romehero

Thành viên mới
Tham gia
26/9/07
Bài viết
28
Được thích
1
Tôi có một file: View attachment Listbox to combobox.xls

Tôi muốn hỏi làm thể nào để

Tại một trong 3 combobox theo từng vị trí nhập dữ liệu. Tại listbox chuyển tới item có giá trị = giá trị đã nhập tại combobox và 2 combobox còn lại trả giá trị tương ứng với 2 column còn lại của listbox.

Xin mọi người chỉ dẫn
 
romehero đã viết:
Tôi có một file: View attachment 5788

Tôi muốn hỏi làm thể nào để

Tại một trong 3 combobox theo từng vị trí nhập dữ liệu. Tại listbox chuyển tới item có giá trị = giá trị đã nhập tại combobox và 2 combobox còn lại trả giá trị tương ứng với 2 column còn lại của listbox.

Xin mọi người chỉ dẫn

Có ai chỉ cho tôi biết thêm chút kinh nghiệm không ạ ?
 
Upvote 0
theo kinh nghiệm access ,mình không dùng listbox mà dùng combbox1 có 3 column cụ thể là trong property của combobox1 sửa lại:
- bound column: 1
- column count: 3
- column widths: 120pt, 40pt, 40pt (tùy độ dài dữ liệu) hoặc 120pt, 0pt, 0pt (ẩn 2 cột sau)
- Rowsource: DS (trong file của bạn là 3 côt
- trong cửa sổ code chọn event ComboBox1_Change:

code:

Private Sub ComboBox1_Change()
ComboBox2 = ComboBox1.Column(1)
ComboBox3 = ComboBox1.Column(2)
End Sub

Ghi chú: số thứ tự cột trong column() bắt đầu từ 0 đến 2.

Mình làm thử và đã chạy tốt. Nếu bạn thấy được thì có thể delete listbox1 được.

Chúc thành công
 
Upvote 0
romehero đã viết:
Tại một trong 3 combobox theo từng vị trí nhập dữ liệu. Tại listbox chuyển tới item có giá trị = giá trị đã nhập tại combobox và 2 combobox còn lại trả giá trị tương ứng với 2 column còn lại của listbox.

Xin mọi người chỉ dẫn

ví dụ cho cụm combobox1,2,3.

Mã:
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] ComboBox1_Change()
    ListBox1.Value = ComboBox1.Value
    ComboBox2.Value = ListBox1.Column(1)
    ComboBox3.Value = ListBox1.Column(2)
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
 
Upvote 0
SoiBien đã viết:
Private Sub ComboBox1_Change()
ListBox1.Value = ComboBox1.Value
ComboBox2.Value = ListBox1.Column(1)
ComboBox3.Value = ListBox1.Column(2)
End Sub
Mình đã làm thử như vậy rồi, dù chọn dòng nào của ComboBox1 thì ComboBox2 và ComboBox3 cũng đều lấy giá trị của listbox ở dòng đầu tiên. Trừ khi bạn thêm đk tìm kiếm.
Chết, quên để ý câu trên cùng, có đk tìm kiếm rồi, sorry nha!
Cơ mà mình vẫn muốn xóa cái listbox, nó chiếm chỗ nhiều quá. hơn nữa dữ liệu chắc không chỉ có 6 dòng mà lại có sẵn ở work sheet rồi, để dư tốn chỗ.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bài tập này giải đến đây thì phải ngừng, không thể giải quyết phần tiếp theo cho combo2_change được. Lý do: (Giả sử tạo đoạn code2 ứng với sự kiện này):
1. Không gán giá trị cho listbox hoặc combobox ở giá trị column #0 được.

2. Nếu tìm cách chọn dòng cho listbox được (thỏa câu trên) thì sẽ xảy ra:
chạy code 2 --> cb2 change --> gán giá trị cho cb1 --> cb1 change --> chạy code 1 --> gán giá trị cho cb2 --> cb2 change --> chạy code2 . . .

Thực ra chạy 1 lần là đã bị báo lỗi rồi.

3. Dữ liệu ngày sinh không phải là tương ứng 1-1 với họ tên, vậy nếu chọn 1 ngày sinh bị trùng trong cb2 (2 người sinh cùng ngày chẳng hạn), list box (nếu gán giá trị được), sẽ lấy dòng nào? Nhất là khi xử lý cb3, quá trời nhân viên, biết chọn ai?

Đây chắc là 1 bài tập chứ không phải là 1 yêu cầu thực của công việc hàng ngày của bất cứ ai.
 
Upvote 0
SoiBien đã viết:
ví dụ cho cụm combobox1,2,3.

Mã:
[COLOR=darkblue]Private[/COLOR] [COLOR=darkblue]Sub[/COLOR] ComboBox1_Change()
    ListBox1.Value = ComboBox1.Value
    ComboBox2.Value = ListBox1.Column(1)
    ComboBox3.Value = ListBox1.Column(2)
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]

Cảm ơn các bác đã hướng dẫn. Tôi xin hỏi, không hiểu khi giá trị đã trả đủ về 1 list và 2 combo nhưng nếu tôi xóa hoặc sửa lại thì bị lỗi. chắc chắn giá trị ComboBox1_Change này không tìm thấy trong listbox nên mới như vậy. Không biết nên viết như thế nào để xử lý vấn đền này. Có thể dùng điều kiện phải tìm thấy dữ liệu = dữ liệu tại listbox ?

Rất mong nhận được sự giúp đỡ. Thanks
 
Upvote 0
bạn đổi sub combobox1_change thành combobox_afterUpdate. lúc này bạn có thể gõ 1 vài ky tự, combobox sẽ hiện lên record có nội dung gần nhất cho bạn, nếu đúng thì enter. Nhưng nếu bạn gõ vào 1 tên không có trong DS thì cũng bị lỗi. Muốn chữa lỗi thì thêm 1 bẫy lỗi:
PHP:
Private Sub cb1_afterupdate()
On Error GoTo Err_cb1err
 ListBox1.Value = cb1.Value
cb2.Value = ListBox1.Column(1)
  cb3.Value = ListBox1.Column(2)
Err_cb1err:
   MsgBox "Chon trng danh sach!", vbOKOnly, "Not in list"
cb1.SetFocus
  
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bạn thử sửa lại.
Các combobox chọn lại Style là 2-fmDropdrowlist-->chỉ cho phép chọn giá trị trong vùng dữ liệu nguồn.
Tất cả các combobox chọn tabstop= false--> không thể dùng nút tab để chuyển qua lại giữa các combobox
Bắt sự kiện keydown của từng combobox. Nếu phím Enter được nhấn và giá trị trong combobox khác rỗng thì nhảy qua ô tiếp theo
Mã:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (keycode = 13) and (Combobox1.value<>"") then
Listbox1.Value= combobox1.value
Combobox2.setfocus
End Sub
Như vậy ta phải nhập dữ liệu vào Combobox và dữ liệu đó phải trong vùng dữ liệu thì mới có thể nhảy qua ô tiếp theo.
 
Upvote 0
Web KT

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

Back
Top Bottom