Thêm Item cho List box (Form Control-trên Sheet) bằng array (không xóa đi Item hiện có trên listBox)

Liên hệ QC

thnghiachau

Supreme Сasual Dating - Real-life Girls
Tham gia
14/9/09
Bài viết
837
Được thích
703
Giới tính
Nam
Nghề nghiệp
Health
Chào các thầy và ae trên GPE,
XIn cho em hỏi mình có cách nào thêm Item vào Listbox (Form control- On Sheet) bằng ARRAY nhưng mà không xóa đi dữ liệu các Item đang có trong listBox không ah?
Mình có cách nào mà không sử dụng "ListBox1.AddItem" (vì phải duyệt hết từng Item trong array ...) mà mình làm giống lệnh ListBox1.List = Array nhưng nối tiếp dữ liệu hiện có trong listbox mà không xóa đi dữ liệu hiện có đó??
Rất mong các thầy và các bạn giúp em .

Cám ơn cả nhà GPE nhiều.
 
Chào các thầy và ae trên GPE,
XIn cho em hỏi mình có cách nào thêm Item vào Listbox (Form control- On Sheet) bằng ARRAY nhưng mà không xóa đi dữ liệu các Item đang có trong listBox không ah?
Mình có cách nào mà không sử dụng "ListBox1.AddItem" (vì phải duyệt hết từng Item trong array ...) mà mình làm giống lệnh ListBox1.List = Array nhưng nối tiếp dữ liệu hiện có trong listbox mà không xóa đi dữ liệu hiện có đó??
Rất mong các thầy và các bạn giúp em .

Cám ơn cả nhà GPE nhiều.
Bạn có 2 cách:
1> Dùng AddItem như bạn đã biết
2> Tạo 1 array mới với các phần tử là các phần tử trong ListBox đang có + với các phần tử trong array mà bạn đang muốn gán vào. Cuối cùng gán array mới vào ListBox. Có thể cách này sẽ nhanh hơn AddItem chăng?
 
Upvote 0
Bạn có 2 cách:
1> Dùng AddItem như bạn đã biết
2> Tạo 1 array mới với các phần tử là các phần tử trong ListBox đang có + với các phần tử trong array mà bạn đang muốn gán vào. Cuối cùng gán array mới vào ListBox. Có thể cách này sẽ nhanh hơn AddItem chăng?
Cám ơn thầy nhiều.
Như vậy mình có cách nào lấy các phần tử đang có trong list box mà không phải duyệt từng phần tử trong list box đó không ah?
 
Upvote 0
Cám ơn thầy nhiều.
Như vậy mình có cách nào lấy các phần tử đang có trong list box mà không phải duyệt từng phần tử trong list box đó không ah?
Lúc đưa vô sao thì lấy ra vậy thôi bạn
- Đưa vô --> ListBox1.List = Array
- Lấy ra ---> Array = ListBox1.List
 
Upvote 0
Chào các thầy và ae trên GPE,
XIn cho em hỏi mình có cách nào thêm Item vào Listbox (Form control- On Sheet) bằng ARRAY nhưng mà không xóa đi dữ liệu các Item đang có trong listBox không ah?
Mình có cách nào mà không sử dụng "ListBox1.AddItem" (vì phải duyệt hết từng Item trong array ...) mà mình làm giống lệnh ListBox1.List = Array nhưng nối tiếp dữ liệu hiện có trong listbox mà không xóa đi dữ liệu hiện có đó??
Rất mong các thầy và các bạn giúp em .

Cám ơn cả nhà GPE nhiều.
Theo mình thì nên sử dụng chức năng AddItem cho đơn giản.
 
Upvote 0
Theo mình thì nên sử dụng chức năng AddItem cho đơn giản.
Nếu list lớn thì thường nên sắp xếp (tôi đọc cái list 20 dòng mà không sắp xếp thì hết dò nổi).
Mà nếu đã sắp xếp thì nên AddItem. Dùng kỹ thuật dò nhị phân để tìm chỗ chèn vào.
Trừ phi chỗ cần thêm vào rất nhiều thì cách giản dị nhất à đổ dữ liệu ra một vùng range tạm, sắp xếp lại nếu cần.

Diễn đàn này hình như không khuyến khích chuyện dùng range tạm thì phải.
Theo tôi thì diễn đàn có khuynh hướng "trùng máu". Cứ một kiểu, một đường lối code mà theo như tín đồ.
 
Upvote 0
Nếu list lớn thì thường nên sắp xếp (tôi đọc cái list 20 dòng mà không sắp xếp thì hết dò nổi).
Mà nếu đã sắp xếp thì nên AddItem. Dùng kỹ thuật dò nhị phân để tìm chỗ chèn vào.
Trừ phi chỗ cần thêm vào rất nhiều thì cách giản dị nhất à đổ dữ liệu ra một vùng range tạm, sắp xếp lại nếu cần.

Diễn đàn này hình như không khuyến khích chuyện dùng range tạm thì phải.
Theo tôi thì diễn đàn có khuynh hướng "trùng máu". Cứ một kiểu, một đường lối code mà theo như tín đồ.
Thường em mà "bí" gì là e dùng range vùng tạm để xử lý đễ hơn ah...
không giống gu của GPE nên hổng dám nói ... hic
 
Upvote 0
Dạ, e dùng " modFastArray " của anh @Nguyễn Duy Tuân tuân ah.
Theo tôi cái modFastArray chỉ dùng khi có lợi thực sự. Bạn có cảm nhận được là code 1 nhanh hơn code 2 vài phần triệu, vài phần nghìn giây? Nếu không thì cứ FOR thôi. Nhưng khi bạn viết code chuyên dùng, khi mà thao tác có thể lặp lại hàng nghìn, hàng triệu lần thì sự nhanh hơn vài nghìn giây / lần là đáng kể. Vậy trừ phi bạn viết code cho hệ điều hành gì đó thì lợi nhuận vài phần nghìn giây là đáng kể. Còn nếu chỉ là làm vài việc trong Excel thì quên đi.
 
Upvote 0
Theo tôi cái modFastArray chỉ dùng khi có lợi thực sự. ...
Nếu tôi không lầm thì cái Module ấy sử dụng rtlMoveMemory. rtlMoveMemory thì dùng kỹ thuật memcpy (macro của C, viết bằng mã máy và đưa giao diện qua C) để làm việc trên các vùng nhớ liên tục. Mảng là vùng nhớ liên tục cho nên có thể áp dụng.
Nếu hiểu nó làm gì và sẵn sàng đeo thêm một cái module để tiết kiệm vài dòng code bên module chính thì cứ việc làm.

Nguyên tắc lập trình hướng đối tượng: cái gì đã có sẵn một class (nhóm code thư viện) thực hiện giúp mình thì cứ vệc xài class ấy.
Thực tế của lập trình hướng đối tượng: cái gì đơn giản thì đừng hướng đối tượng. :p :p :p
 
Upvote 0
Nói về cái gu dùng cái gì để xử lý (thí dụ range tạm):
- Trường hợp cụ thể của bài này: Dữ liệu có sẵn của Listbox lấy từ đâu? chắc chắn là lấy từ sheet/ range. Dữ liệu thêm vào lấy từ đâu? Cũng là từ sheet/ range nốt. Vậy thì sử dụng range tạm sẽ là ưu tiên. Trường hợp dữ liệu mới và cũ chưa có cùng cấu trúc phải xử lý lại thì mới dùng mảng, khi đã có mảng thì dùng vòng lặp add item từ mảng cũng được, nối xuống range tạm rồi lấy lên hết cũng được.
- Nói chung thì đừng có đọc từng cells lấy lên hoặc ghi xuống từng cell thì mới chậm còn bất kỳ cách nào thuận tiện thì dùng, đối với từng đề bài cụ thể sẽ khác nhau. Tôi thấy nhiều chủ đề hỏi nhờ xử lý nhưng lại ghi chú là đừng dùng cái này, đừng dùng cái kia, tại sao vậy? Vòng lặp có gì xấu?
Thậm chí nếu sử dụng được công cụ có sẵn như Advanced filter, Pivot table, power query thì tôi cũng ưu tiên, lập trình là tuỳ chọn cuối cùng.

Thế là tôi không có gu. Không biết không có gu có gì xấu không nhỉ?
 
Upvote 0
Nói về cái gu dùng cái gì để xử lý (thí dụ range tạm):
- Trường hợp cụ thể của bài này: Dữ liệu có sẵn của Listbox lấy từ đâu? chắc chắn là lấy từ sheet/ range. Dữ liệu thêm vào lấy từ đâu? Cũng là từ sheet/ range nốt. Vậy thì sử dụng range tạm sẽ là ưu tiên. Trường hợp dữ liệu mới và cũ chưa có cùng cấu trúc phải xử lý lại thì mới dùng mảng, khi đã có mảng thì dùng vòng lặp add item từ mảng cũng được, nối xuống range tạm rồi lấy lên hết cũng được.
- Nói chung thì đừng có đọc từng cells lấy lên hoặc ghi xuống từng cell thì mới chậm còn bất kỳ cách nào thuận tiện thì dùng, đối với từng đề bài cụ thể sẽ khác nhau. Tôi thấy nhiều chủ đề hỏi nhờ xử lý nhưng lại ghi chú là đừng dùng cái này, đừng dùng cái kia, tại sao vậy? Vòng lặp có gì xấu?
Thậm chí nếu sử dụng được công cụ có sẵn như Advanced filter, Pivot table, power query thì tôi cũng ưu tiên, lập trình là tuỳ chọn cuối cùng.

Thế là tôi không có gu. Không biết không có gu có gì xấu không nhỉ?
Cái đó cũng là cái "gu" của anh mà :victory:
 
Upvote 0
Cái đó cũng là cái "gu" của anh mà :victory:
Cái gu phải do mình đã trải nghiệm nhiều thứ rồi túm lại, và sẵn sàng khách quan thì mới lành mạnh.
Cái gu do theo một đường lối mà từ đầu mình đã được nhồi sọ bởi từ "hiệu quả nhất" là loại gu chủ quan. Chủ quan thì khó lành mạnh.
 
Upvote 0
Làm vậy xem lấy nguồn tạm duyệt for lọc hay gì đó tuỳ xong chạy tới đâu add vào tới đó cho khỏe
 
Upvote 0
Cũng là Listbox ....
1/ Trên VB6 sản phẩn Bill keo ( À quên Google dịch là : tài liệu đã nghỉ hưu trên 10 năm tuổi ) thế mà nó hổ trợ nhiều thứ hơn trên Lisbox của Office 2019

2/ Listbox trên Office 2019 là sản phần còn đang phát triển mà listbox lại ko thấy hổ trợ nhiều thứ như Listbox trên VB6

thấy cũng lao sao ý -0-0-0-
 
Upvote 0
Web KT
Back
Top Bottom