leduonghung
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 12/11/10
- Bài viết
- 10
- Được thích
- 2
Các bác ơi, hôm em có xem 1 file nhập xuất tồn của ai đó. khi mình click vào 1 ô nó hiện ra cả mã hàng và tên hàng, khi mình chọn 1 trong số đó thì nó tự động nhảy vào bảng nhập xuất
Em đưa 1 file của em, các bác giúp em với nhé
Nhưng bác ơi, bảng của em không đơn giản là thế này, nó còn nhiều nữa cơ, có khoảng 1000 mặt hàng. nên không thể nhớ được hết "mã hàng". Em muốn click vào nó hiện ra cả mã và tên hàng
Bác xem file rồi chỉ cho em các làm nhé
Cai như của bác cũng hay thật. Em muốn hỏi cách làm cơ, giống như file của bác nào đây này.
http://www.mediafire.com/view/?7edrezfz1xq3dmi
![]()
Em muốn nó xổ thẳng xuống bên dưới giống như cái ảnh này thì tiện hơn
Cái gì cũng làm được nhưng bạn nói có hơn 1000 mặt hàng nên mình làm thế cho bạn dễ tìm mặt hàng, còn nếu cho nó xổ xuống rồi lại phải đi tìm nữa à? Cái combobox cũng chỉ hiện ra vài chục dòng.
Còn muốn biết cách làm thì phải học cơ bản, mà cơ bản thì đầy trên diễn đàn, chịu khó tìm nhé.
Vâng em thấy làm như bác tiện hơn thật. Em cũng đang học cơ bản, em đang thiết kế 1 bảng nhập xuất tồn, và xác định kết quả kinh doanh trên những mặt hàng đó. Em thiết kế 1 cái khung của em rồi bác làm như của bác hộ em nhéCái gì cũng làm được nhưng bạn nói có hơn 1000 mặt hàng nên mình làm thế cho bạn dễ tìm mặt hàng, còn nếu cho nó xổ xuống rồi lại phải đi tìm nữa à? Cái combobox cũng chỉ hiện ra vài chục dòng.
Còn muốn biết cách làm thì phải học cơ bản, mà cơ bản thì đầy trên diễn đàn, chịu khó tìm nhé.
Hy vọng cái này chắc là ok
Cái gì cũng làm được nhưng bạn nói có hơn 1000 mặt hàng nên mình làm thế cho bạn dễ tìm mặt hàng, còn nếu cho nó xổ xuống rồi lại phải đi tìm nữa à? Cái combobox cũng chỉ hiện ra vài chục dòng.
Còn muốn biết cách làm thì phải học cơ bản, mà cơ bản thì đầy trên diễn đàn, chịu khó tìm nhé.
Combobox cũng cho tìm kiếm luôn, lại còn đỡ phải lập trình giống listbox - vì nó được tự động lun
Thật tình mình chỉ mới tìm hiểu VBA vài tháng nay, cũng nghiên cứu code trên diễn đàn rồi chắp vá xài cho công việc nên không biết làm như bạn gợi ý. Hay là bạn làm 1 cái cho mình tham khảo và bổ sung kiến thức về mảng này
Hy vọng cái này chắc là ok
Set dic = CreateObject("scripting.dictionary")
Set DM = Sheets("DANHMUC")
dulieu = DM.Range(DM.[a4], DM.[d65536].End(3)).Value
ReDim arr(1 To UBound(dulieu, 1), 1 To 4)
tim = UCase(UserForm1.TextBox1.Value)
If tim <> "" Then
...
end if
UserForm1.ListBox1.List = arr
Trước mắt tôi thấy bạn nên tất cả các dòng
Mã:Set dic = CreateObject("scripting.dictionary") Set DM = Sheets("DANHMUC") dulieu = DM.Range(DM.[a4], DM.[d65536].End(3)).Value ReDim arr(1 To UBound(dulieu, 1), 1 To 4)
cho vào block IF ... END IF
Vì hiện nay lúc đầu hoặc trong quá trình tìm kiếm người dùng xóa TextBox (viết nhầm xóa để viết lại từ đầu chẳng hạn) thì code vẫn "cần cù" làm các việc: Set dic, Set DM, dulieu, Redim để rồi khi tới IF thì hóa ra là không cần thiết (vì tìm = "" mà) mà lại tốn "điện nước" và thời gian
Tóm lại thì:
Mã:tim = UCase(UserForm1.TextBox1.Value) If tim <> "" Then ... end if UserForm1.ListBox1.List = arr
Tức nếu tìm <> "" thì ta "chơi tiếp" còn không chả làm gì cả.
Bài này có lẽ không cần DIC gì cả vì nó là chọn lựa --> dữ liệu từ đầu đã là duy nhất rui (trường hợp nhiều cột mà tìm chỉ trùng 1 cột nào, thì lại cần nhặt vào)
Không hiểu quanghai dùng DIC có mục đích gì?
ReDim arr(1 To UBound(dulieu, 1), 1 To 4)
...
UserForm1.ListBox1.List = arr
For n = 1 To 4
arr(j, n) = dulieu(i, n)
Next
Đúng là nên để LISTBOX vừa vặn đúng số item cần tìm của nó,....
thì thấy arr luôn có số dòng bằng số dòng trong bảng DANHMUC. Tức nếu DANHMUC có 2000 dòng và kết quả tìm thấy 3 mục thì trong ListBox có 3 dòng đầu có dữ liệu còn 1997 dòng trống - nhìn nó kỳ kỳ thế nào ấy.
Có thể quanghai chỉ muốn nhập vào ListBox những mục tìm thấy (vd. 3), vì thế nên dùng dic (có thể dùng mảng thứ hai) để nhớ các mục này (thực ra chỉ cần nhớ các chỉ số dòng). Sau khi đã duyệt qua mảng dulieu thì ta có số các dòng của các mục phải có trong Arr. Lúc đó mới Redim Arr()
Tức theo ý tưởng thì không có Redim Arr() lúc đều mà sau khi duyệt dulieu thì ta mới Redim Arr() rồi đọc từ dic (hoặc mảng thứ hai) các chỉ số dòng của các mục để nhập vào Arr.
Vậy:
1. Không có Redim ban đầu.
2. Trong khi duyệt dulieu thì không có
3. Sau khi duyệt xong duliệu thì Redim Arr(1 tới số mục trong dic)
4. Đọc lần lượt key trong dic ta có chỉ số các dòng phải có trong Arr, có chỉ số thì đọc các dòng từ dulieu
Đúng là nên để LISTBOX vừa vặn đúng số item cần tìm của nó,
TUY THẾ:
Nếu ý tưởng thế, thì chỉ cần một mảng trung gian TMP nào đó lưu lại CHỈ SỐ DÒNG là được thay vì dùng DIC, switom ah,
như vậy đỡ nặng hơn và không phải tạo một object DIC làm chi
???
Có thể quanghai chỉ muốn nhập vào ListBox những mục tìm thấy (vd. 3), vì thế nên dùng dic (có thể dùng mảng thứ hai) để nhớ các mục này (thực ra chỉ cần nhớ các chỉ số dòng).
Ơ, thế vodoi2x không nhìn thấy ghi chú đỏ đỏ của tôi à?