Nhập xuất (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

leduonghung

Thành viên mới
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é
 

File đính kèm

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é

Tìm cách Enable macros lên nha, nếu không thì hoà cả làng
 

File đính kèm

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é
 

File đính kèm

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é

Hy vọng cái này chắc là ok
 

File đính kèm

Vâng em cảm ơn bác ! Nếu bác ở HN thì em mời bác đi coffe để cảm ơn
Nếu có gì thắc mắc thêm em nhờ bác quanghai1969 nua nhe
 
Lần chỉnh sửa cuối:
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

excelz.png


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é.
 
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é.

Nhưng làm luôn thế mà vừa search như cái của pac và nhiều cột thì càng tốt, không có trước mắt 1 cột (list) thì hay biết mấy

Pác thử làm xem thế nào? sẽ rất có ích, có thể cùng trao đổi ở đây, tôi cũng đang hứng thú cái chủ đề này
 
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é.

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
 
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
 
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

Pác cứ thử là biết ngay mà, combo box khi xổ xuống ta gõ vài từ khóa đầu, thì nó tự động di chuyển / liệt kê đến các thành phần trong list có tên bắt đầu bằng chữ cái đó ==> ta cũng dễ dàng chọn được luôn
 
Hy vọng cái này chắc là ok

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ả.
 
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ì?
 
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ì?


Tôi có thể đoán ý tưởng của quanghai1969 nhưng nếu thế thì khi thực hiện thì quanghai1969 lại "quên".

vodoi2x nhìn

Mã:
ReDim arr(1 To UBound(dulieu, 1), 1 To 4)
...
UserForm1.ListBox1.List = arr

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ể quanghai1969 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ó

Mã:
For n = 1 To 4
                  arr(j, n) = dulieu(i, n)
Next
còn .Add dulieu(i, 1), j thì chuyển thành .Add i, ""

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

Tất nhiên "If Not .exists(dulieu(i, 1)) Then" là bỏ đi được vì đk luôn đúng - khi duyệt các dòng của mảng "duy nhất" dulieu thì dòng hiện hành tất nhiên vẫn chưa có trong DIC.
 
Lần chỉnh sửa cuối:
....
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
???
 
Đú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 à?
 
Ơ, thế vodoi2x không nhìn thấy ghi chú đỏ đỏ của tôi à?

Ah vậy tôi đọc nhanh nên không chú ý thấy,
Vậy thì cái này dùng phương án mảng 2 là chuẩn

Tuy nhiên với topic này thì nên dùng COMBO BOX ở tại cell thì tiện hơn, xong có vấn đề là làm sao thành Addins thì mới hay, còn ở 1 file cụ thể thì không khó
 
Web KT

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

Back
Top Bottom