Giải thích hộ về ListBox!

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có tham khảo ListBox của Thầy Phạm Duy Long và Anh Hiếu (Mr OkeBab). Có vài vấn đề cần tham khảo thêm.
1/ Khi chọn dòng đầu tiên trong ListBox thì nút ghi không enable. Mà chỉ cho Double Click. Nút ghi chỉ có tác dụng từ dòng 2 ListBox.
2/ ListBox cố định là Range("DMHH"). Nếu không cần tìm theo mã hàng có thể
set HHList.RowSource = Range("DMHH"). Đã thử mà không được. Có thể đơn giản hơn code sau, không for i
PHP:
Private Sub CapNhatHHList()
For r = 2 To rc01
  HHList.AddItem r - 1
  HHList.List(r - 2, 1) = S01.Cells(r, 1)
  HHList.List(r - 2, 2) = S01.Cells(r, 2)
  HHList.List(r - 2, 3) = S01.Cells(r, 3)
Next
End Sub
3/ Trong DMHH có tính đơn giá theo từng loại, hiện tại chỉ mới dừng ở chỗ, chọn xong mã hàng, quay lại chọn loại, dùng vlookup ra đơn giá. Nhờ HD cách nào khoa học hơn, thao tác ngay trên ListBox luôn.
4/ Tôi muốn khống chế chỉ có A2:A10 là nhận dữ liệu, nếu trong ListBox mà chọn > 9 thì chỉ gán vào 9 (gán vào dòng trống từ row 2 -> row 10).
Cám ơn nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
From Po_Pikachu:
Đã bổ sung thêm cho khoa học rồi!
Bác test lại xem có OK chưa? Xin lỗi em hết tài nguyên rồi. Sorry.
File: http://www.mediafire.com/?co2jmz4jgfi Thân.

Phải chi có thêm List loại bên cạnh MaHHList, khi chọn mahh thì bắt buộc phải nhập lọai tương ứng, mỗi mã là lọai khác nhau. Đằng nào ta cũng phải mở DM, mà phải gán vlookup thì chưa pro lắm Po_Pikachu nghiên cứu tiếp hộ. Hay là ta gán cho choose(Di,{gia1;gia2;gia3}) nhưng thấy kỳ kỳ.
Cám ơn nhiều!
Phần 1 và 2 theo #1 đã chỉnh với sự giúp đỡ của Po_Pikachu đã OK.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mục số 3/ thì chỉ có thể làm được như vậy thôi. Không thể chọn loại ngay trên Listbox được đâu. Mục số 4/ bác nói lại rõ hơn được không? Em vẩn chưa hình dung được không chế nhập liệu là sao? Vậy nếu đầy rồi thì sao? "nếu trong ListBox mà chọn > 9 thì chỉ gán vào 9" dòng này có liên quan gì trong việc khống chế nhập liệu? File: http://www.mediafire.com/?mj15qreueaq Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Mục số 3/ thì chỉ có thể làm được như vậy thôi. Không thể chọn loại ngay trên Listbox được đâu.
Mục số 4/ bác nói lại rõ hơn được không? Em vẩn chưa hình dung được không chế nhập liệu là sao? Vậy nếu đầy rồi thì sao? "nếu trong ListBox mà chọn > 9 thì chỉ gán vào 9" dòng này có liên quan gì trong việc khống chế nhập liệu?
File: http://www.mediafire.com/?mj15qreueaq
Thân.
Cám ơn nhiều! Ví dụ ta sẽ gán vào A2:A10, thì dù ta chọn thế nào thì vẫn chỉ gán đến A10 thôi.
 
Upvote 0
Dùng HHList.List = (Range("DMHH")) thì có 1 điểm không đúng là chọn dòng trong list không được. Vì nó dựa vào STT để chọn. Nên em sẽ để nó lại không sữa nữa. Cái này dùng tốt cho Combobox hơn vì không cần vòng lặp và không cần chọn số dòng trong List. Đây là file chỉ sửa lần cuối. File: http://www.mediafire.com/?zqdzalyanc5 Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn nhiều, OK rồi, sửa 1 vài cái nhỏ nữa là OK. Đại khái như bỏ chọn select multi, nếu chưa nhập lọai thì chưa gán...Tôi tự sửa được rồi. Có điều đang cân nhắc là có nên lập 1 form riêng chọn từng mã bằng comboBox rồi thêm lọai, SL, tiền... rồi đưa vào 1 list nào đó trên form, OK là gán luôn.
Vậy là được rồi. 1 lần nữa Tks!
 
Upvote 0
Vậy chúc bác thành công nha! Vạn sự như ý. Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
1/ Khi chọn dòng đầu tiên trong ListBox thì nút ghi không enable. Mà chỉ cho Double Click. Nút ghi chỉ có tác dụng từ dòng 2 ListBox.
Do biến i chạy thiếu đó bác ạ

PHP:
Private Sub HHList_Change()
Ghi.Enabled = False
For i = 1 To HHList.ListCount - 1
  If HHList.Selected(i) = True Then
    Ghi.Enabled = True
    Exit For
  End If
Next
End Sub
Bác đổi thành :


PHP:
Private Sub HHList_Change()
Ghi.Enabled = False
For i = 0 To HHList.ListCount - 1
  If HHList.Selected(i) = True Then
    Ghi.Enabled = True
    Exit For
  End If
Next
End Sub
2/ ListBox cố định là Range("DMHH"). Nếu không cần tìm theo mã hàng có thể
set HHList.RowSource = Range("DMHH"). Đã thử mà không được. Có thể đơn giản hơn code sau, không for i
Listbox của bác chỉ có 4 cột, Name DMHH của bác lại có 6 cột, vì vậy nó không tương thích.

Bác hãy đổi lại để số cột của cả hai bằng nhau là OK thôi mà.

Hai vấn đề dưới bác đã giải quyết rồi nên em thôi:-=

Thân!
 
Upvote 0
2/ ListBox cố định là Range("DMHH"). Nếu không cần tìm theo mã hàng có thể
set HHList.RowSource = Range("DMHH"). Đã thử mà không được. Có thể đơn giản hơn code sau, không for i
Listbox của bác chỉ có 4 cột, Name DMHH của bác lại có 6 cột, vì vậy nó không tương thích.
Bác hãy đổi lại để số cột của cả hai bằng nhau là OK thôi mà.
Hai vấn đề dưới bác đã giải quyết rồi nên em thôi:-=
Không phải là không tương thích, nếu listbox có 4 cột mà Name có nhiều hơn bốn cột thì Listbox ưu tiên lấy các cột từ trái sang phải.

Vấn đề là cú pháp sai, đúng ra phải là:
 
Upvote 0
Tôi có tham khảo ListBox của Thầy Phạm Duy Long và Anh Hiếu (Mr OkeBab). Có vài vấn đề cần tham khảo thêm.
1/ Khi chọn dòng đầu tiên trong ListBox thì nút ghi không enable. Mà chỉ cho Double Click. Nút ghi chỉ có tác dụng từ dòng 2 ListBox.
2/ ListBox cố định là Range("DMHH"). Nếu không cần tìm theo mã hàng có thể
set HHList.RowSource = Range("DMHH"). Đã thử mà không được. Có thể đơn giản hơn code sau, không for i
3/ Trong DMHH có tính đơn giá theo từng loại, hiện tại chỉ mới dừng ở chỗ, chọn xong mã hàng, quay lại chọn loại, dùng vlookup ra đơn giá. Nhờ HD cách nào khoa học hơn, thao tác ngay trên ListBox luôn.
4/ Tôi muốn khống chế chỉ có A2:A10 là nhận dữ liệu, nếu trong ListBox mà chọn > 9 thì chỉ gán vào 9 (gán vào dòng trống từ row 2 -> row 10).
Cám ơn nhiều.

1. Muốn nút ghi chỉ có tác dụng từ dòng 2 của ListBox thì:

Mã:
[FONT=Verdana][SIZE=2]Private Sub HHList_Click()[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]If HHList.ListIndex = 0 Then[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]  Ghi.Enabled = False[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]Else[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]  Ghi.Enabled = True[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]End If[/SIZE][/FONT]
  [FONT=Verdana][SIZE=2]End Sub[/SIZE][/FONT]
3. Thêm 2 cột vào HHList (Loại và Đơn giá) và TextBox Loai để nhập đơn giá, Label LabSelect để đếm số dòng đã nhập Loai theo yêu cầu câu 4 (chọn không quá 9 dòng).
Chú ý: cách này chỉ thực hiện được khi đưa dữ liệu vào HHList bằng For … Next. Dùng lệnh HHList.RowSource = "DMHH" thì không thay đổi dữ liệu trên HHList khi đang chạy chương trình.
- TextBox Loai chỉ cho phép nhập 1,2 hoặc 3 (tương ứng loại 1, 2, 3)
Mã:
  [FONT=Verdana][SIZE=2][FONT=Verdana]Private Sub TxtLoai_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]If Val(Chr(KeyAscii)) < 1 Or Val(Chr(KeyAscii)) > 3 Or Len(TxtLoai) = 1 Then[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  KeyAscii = 0[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]End If[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]End Sub[/FONT][/SIZE][/FONT]
- TexBox Loai sẽ lấy Đơn giá vào HHList, Nếu LabSelect=9 không cho nhập tiếp.
Mã:
  [FONT=Verdana][SIZE=2][FONT=Verdana]Private Sub TxtLoai_Change()[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]Id = HHList.ListIndex[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]If Val(LabSelect) = 9 Then Exit Sub[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]If TxtLoai = "" Then[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  If HHList.List(Id, 4) <> "" Then LabSelect = Val(LabSelect) - 1[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  HHList.List(Id, 4) = ""[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  HHList.List(Id, 5) = ""[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]Else[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  HHList.List(Id, 4) = TxtLoai[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  HHList.List(Id, 5) = S01.Cells(Id + 2, Val(TxtLoai + 3))[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]  LabSelect = Val(LabSelect) + 1[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]End If[/FONT][/SIZE][/FONT]
  [FONT=Verdana][SIZE=2][FONT=Verdana]End Sub[/FONT][/SIZE][/FONT]
Để ghi vào sheet NHAP. Viết vòng lặp duyệt HHList, dòng nào HHList.List(Id, 4) <>"" thì ghi.
http://i45.photobucket.com/albums/f78/phong_lam/a.jpg
a.jpg
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cách tạo listbox trong file bán hàng

Em mới làm hai file excel quản lý bán hàng. Chỉ đơn thuần dùng hàm VLOOK giữa các sheet với nhau. Em muốn khi vào Sheet chính bán hàng thì nơi nhập dữ liệu vào, thay vì phải nhớ các mã sản phẩm để nhập vào thì đây em muốn có thể kích vào và hiện ra danh sách sản phẩm và chỉ việc chọn. Các bác giúp em tạo dùm Macro này với.
Thank! mấy bác nhiều.&&&%$R
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom