Có ai biết grid control nào miễn phí không? (1 người xem)

Liên hệ QC

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

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,974
Tôi cần một đối tượng dạng lưới (đơn giản thôi) mà tìm hoài trên mạng không thấy cái nào miễn phí cả
Xin hỏi ở đây có ai từng dùng grid control trên UserForm không? Vui lòng gợi ý giúp tôi một cái phù hợp với
Tiêu chí là:
- Một dạng gird đơn giản (cầu kỳ như SpreadSheet Control thì thừa quá)
- Cài đặt đơn giản (như dạng OCX chỉ cần đăng ký là được)
- Miễn phí

Xin cảm ơn!
 
Anh dùng cái này thử xem sao, nhớ đăng ký thành viên mới down được.
https://www.codeproject.com/Articles/290/ATL-Grid-control
Mình download về rồi, đăng ký được rồi. Cũng lấy được đối tượng Grid ra ngoài Additional Controls rồi luôn nhưng... xài không được bạn à! Cứ rê chuột chọn đối tượng vẽ lên UserForm là Excel lập tức bị treo và thoát luôn
Chắc món này xài trên VB được thôi quá
 
Tôi cần một đối tượng dạng lưới (đơn giản thôi) mà tìm hoài trên mạng không thấy cái nào miễn phí cả
Xin hỏi ở đây có ai từng dùng grid control trên UserForm không? Vui lòng gợi ý giúp tôi một cái phù hợp với
Tiêu chí là:
- Một dạng gird đơn giản (cầu kỳ như SpreadSheet Control thì thừa quá)
- Cài đặt đơn giản (như dạng OCX chỉ cần đăng ký là được)
- Miễn phí

Xin cảm ơn!

Grid Control vừa đơn giản vừa miễn phí thì chỉ có cách : Tự chế mà xài :)
Những Grid Control viết sẵn cho VBA em chưa từng thử cái nào hết. Nhưng thiết nghĩ xài đồ của người khác có bảo đảm theo ý mình chăng ?
Thí dụ : muốn AutoComplete(gợi ý các dữ liệu liên quan khi đang gõ) từng cell trên Grid thì sao ? muốn Validate dữ liệu vừa nhập trên cell ?
Em có từng đi thiết kế Grid Control hoàn toàn bằng Class module để điều khiển mọi thứ theo ý mình.
Nhưng chắc không phù hợp với các tiêu chí của anh rồi. Tiếc thật.
 
MSFlexGrid ocx của VB6 thì sao anh ? Anh test thử đi.
Hay MSDATGRD.OCX, MS VB6 Datagrid control
Hay anh thử cái iGrid control Ocx này đi, support cho VBA
https://10tec.com/activex-grid/
 
Có lẻ Control viết = vb6 trong 1 số trường hợp không còn phù hợp với Office 2010 to 2016 nữa chăng ??! :D
 
Sao anh không dùng chính Sheet là Grid, nó là loại Grid ngon nhất thế giới, chỉ có điều không nằm trên Userform :). Nếu tìm được ActiveX thì anh chú ý nó có chạy trên Office 64-bit & Unicode không nhé, vì nhiều ActiveX Controls cũ không hỗ trợ hai cái đó, trong đó 64-bit là nghiêm trọng nhất.
 
Sao anh không dùng chính Sheet là Grid, nó là loại Grid ngon nhất thế giới, chỉ có điều không nằm trên Userform :). Nếu tìm được ActiveX thì anh chú ý nó có chạy trên Office 64-bit & Unicode không nhé, vì nhiều ActiveX Controls cũ không hỗ trợ hai cái đó, trong đó 64-bit là nghiêm trọng nhất.
Mình xây dựng chương trình đương nhiên mình biết Excel Sheet là thứ ngon nhất rồi. Có điều đôi khi không thể dùng Sheet được vì rất nhiều lý do:
- Sợ người ta xóa dòng, xóa cột làm "loạn" cấu trúc
- Sợ người ta nhập liệu sai
Cái chuyện nhập liệu sai còn dễ, nhưng cái vụ bị "loạn" cấu trúc thì rất mệt. Bẫy lỗi tùm lum tính ra còn phiền hơn là tìm 1 grid trên form
-----------------------------
MSFlexGrid ocx của VB6 thì sao anh ? Anh test thử đi.
Hay MSDATGRD.OCX, MS VB6 Datagrid control
Hay anh thử cái iGrid control Ocx này đi, support cho VBA
https://10tec.com/activex-grid/
Đã thử MSFlexGrid và kết quả là không dùng được
Còn iGrid quá ngon. Trước khi đưa bài lên hỏi mình đã thử rồi, hình như là có phí thì phải
Ca này căng! Nếu không tìm được chắc phải đi "đường vòng" quá!
 
Mình xây dựng chương trình đương nhiên mình biết Excel Sheet là thứ ngon nhất rồi. Có điều đôi khi không thể dùng Sheet được vì rất nhiều lý do:
- Sợ người ta xóa dòng, xóa cột làm "loạn" cấu trúc
- Sợ người ta nhập liệu sai
Cái chuyện nhập liệu sai còn dễ, nhưng cái vụ bị "loạn" cấu trúc thì rất mệt. Bẫy lỗi tùm lum tính ra còn phiền hơn là tìm 1 grid trên form
-----------------------------

Đã thử MSFlexGrid và kết quả là không dùng được
Còn iGrid quá ngon. Trước khi đưa bài lên hỏi mình đã thử rồi, hình như là có phí thì phải
Ca này căng! Nếu không tìm được chắc phải đi "đường vòng" quá!

Nếu dùng Sheet làm form hay như một Grid phải có trình độ bãy lỗi rất chặt và khéo + protect sheet thì mới an toàn.
Dùng Control ngon thường mất phí, và chưa chắc đx hộ trợ trong Office 64-bit.

-------------------------------------------
4. Important: 64-bit Environments and iGrid
-------------------------------------------
iGrid ActiveX exists only in the form of a 32-bit OCX control as the development environment it was developed in, Visual Basic 6, does not allow to produce 64-bit executable code. Unfortunately, Microsoft broke the backward compatibility for 32-bit OCX's with the release of the 64-bit Office 2010 (http://msdn.microsoft.com/en-us/library/ee691831.aspx), and iGrid ActiveX cannot be used in the 64-bit editions of Microsoft Office 2010/2013 because of that.

However, it works well in 32-bit editions of Microsoft Office, even in 64-bit versions of Microsoft Windows. We highly recommend that you use 32-bit editions of Microsoft Office for your real-world developments because of similar compatibility problems with many other components in 64-bit editions of Microsoft Office. There are many good resources regarding this issue in the Internet, and one of them is

http://social.technet.microsoft.com.../thread/f3a71d69-580b-4cdb-ae0b-d8189e6cfd40/

There is also just one demo installation of the product which installs the 32-bit iGrid OCX, its demo as a 32-bit exe and a set of VBA samples. The exe demo can be launched without any problems in 64-bit versions of Windows. If you open the VBA samples and do not see the iGrid OCX controls in forms or get error messages that the control is missing or not registered correctly, first of all check the edition of your Microsoft Office (32/64-bit). If it is a 64-bit one, open the iGrid VBA samples in a 32-bit edition of Microsoft Office.

Như vậy iGrid hình như không hỗ trợ Office/VBA 64-bit.
 
Hì hì, với em, cái iGrid control, trong vòng 1 nốt nhạc. Nhưng mà thôi, he he
 
Bác Tuân này cố tình không hiểu nhỉ, OCX chỉ dùng được trên VB, VBA 32bit. Thiết kế nó là vậy. Bác muốn nó chạy trên x64 là sao.
 
Bác Tuân này cố tình không hiểu nhỉ, OCX chỉ dùng được trên VB, VBA 32bit. Thiết kế nó là vậy. Bác muốn nó chạy trên x64 là sao.

Hihi. OCX mà build từ VB6 thì chỉ chạy cho 32-bit. Nếu làm từ Delphi 2009 trở lên thì được loại 64-bit đó bác.
 
OK, mình biết. Vấn đề mình nói là 1 đống OCX của MS và 3rd party software hồi xưa tới giờ chỉ build cho mode 32 bit.
Nội cái IDA Pro 7.0 giờ lên 64 bit, 1 mớ plugin hay mà mình hay dùng xưa giờ, build, code = C/C++, giờ chạy éo ược, muốn phát khùng bữa giờ rồi.
Plugin code = Python, IDAPython thì chạy tốt, nhưng vẫn sữa, modify code = tay mệt nghỉ.
 
Tôi cần một đối tượng dạng lưới (đơn giản thôi) mà tìm hoài trên mạng không thấy cái nào miễn phí cả
Xin hỏi ở đây có ai từng dùng grid control trên UserForm không? Vui lòng gợi ý giúp tôi một cái phù hợp với
Tiêu chí là:
- Một dạng gird đơn giản (cầu kỳ như SpreadSheet Control thì thừa quá)
- Cài đặt đơn giản (như dạng OCX chỉ cần đăng ký là được)
- Miễn phí

Xin cảm ơn!
Em thấy dùng ListBox cũng tương đối được, muốn được hơn chút thì dùng listview.
 
Em thấy dùng ListBox cũng tương đối được, muốn được hơn chút thì dùng listview.
Cụ thể mình đang làm cái form giống bài 15 ở đây:
http://www.giaiphapexcel.com/diendan/threads/tạo-và-đặt-tên-cho-hàng-loạt-label-texbox-bằng-code-vba.132566/#post-836303
Nếu dùng ListBox thì rất khó canh sao cho mấy checkbox bên cạnh nó nằm cùng dòng với ListBox lắm. Với lại ListBox mình thấy nó xấu banh nhà luôn á!
 
Cụ thể mình đang làm cái form giống bài 15 ở đây:
http://www.giaiphapexcel.com/diendan/threads/tạo-và-đặt-tên-cho-hàng-loạt-label-texbox-bằng-code-vba.132566/#post-836303
Nếu dùng ListBox thì rất khó canh sao cho mấy checkbox bên cạnh nó nằm cùng dòng với ListBox lắm. Với lại ListBox mình thấy nó xấu banh nhà luôn á!
Sao mình không cho nó vô list luôn mà phải tách nó ra thành control bên ngoài cho cực vậy sư phụ?
 
Sao mình không cho nó vô list luôn mà phải tách nó ra thành control bên ngoài cho cực vậy sư phụ?
Thôi để mình gửi lên cái form mình vừa thiết kế. Hai Lúa xem thử rồi cho mình ý kiến cải tiến tối ưu nhé
(form này chỉ mới viết phần giao diện, chưa có xuất nhập dữ liệu)
 

File đính kèm

Thôi để mình gửi lên cái form mình vừa thiết kế. Hai Lúa xem thử rồi cho mình ý kiến cải tiến tối ưu nhé
(form này chỉ mới viết phần giao diện, chưa có xuất nhập dữ liệu)
Theo em thì dùng Combobox để chọn từng workshop sẽ tiện lợi hơn. Code để fill dữ liệu chỉ vỏn vẹn 6 dòng.

upload_2018-1-8_16-10-37.png

 
Lần chỉnh sửa cuối:

File đính kèm

Cho em hỏi tí: tải file ở bài #16 về cho vào System32 rồi dăng ký cho nó phải không ah.
Em thấy file của Thầy Hai Lúa Miền Tây hay quá, mong Thầy chỉ em cách làm với.
 
Cho em hỏi tí: tải file ở bài #16 về cho vào System32 rồi dăng ký cho nó phải không ah.
Em thấy file của Thầy Hai Lúa Miền Tây hay quá, mong Thầy chỉ em cách làm với.
Nếu có nhu cầu thì hãy nghiên cứu. Mà nên chọn cái nào phù hợp với khả năng của mình. Bị bạn cho một vố ở đây rồi :D
 
Nãy giờ thử đi thử lại nhiều lần mà mình vẫn chưa hiểu cơ chế nào để iGrid tạo được mấy cái CheckBox ấy nữa
 
Phù... Mò từ sáng đến giờ (đọc help) mới tìm ra được cách chèn checkbox vào cell trong iGrid. Thậm chí chèn ComboBox cũng được
Ngoài ra, theo mô tả thì thấy hình như còn chèn được rất nhiều thứ thú vị khác (như Icon chẳng hạn), nhưng mình chưa cần tới nên chưa nghiên cứu
Các bạn khác thử iGrid đi, bảo đảm không thất vọng đâu
(có điều bắt buộc phải Office 32 bit nhé, Windows mấy bit không thành vấn đề)
-----------------------------------------------------------------------------------------------------
Một lần nữa cảm ơn tất cả mọi người. Đặc biết gửi lời cảm ơn đến bạn @ThangCuAnh đã giới thiệu iGrid và @Hai Lúa Miền Tây đã biểu diễn cách dùng để mình hoàn thiện chương trình

 
Phù... Mò từ sáng đến giờ (đọc help) mới tìm ra được cách chèn checkbox vào cell trong iGrid. Thậm chí chèn ComboBox cũng được
Ngoài ra, theo mô tả thì thấy hình như còn chèn được rất nhiều thứ thú vị khác (như Icon chẳng hạn), nhưng mình chưa cần tới nên chưa nghiên cứu
Các bạn khác thử iGrid đi, bảo đảm không thất vọng đâu
(có điều bắt buộc phải Office 32 bit nhé, Windows mấy bit không thành vấn đề)
-----------------------------------------------------------------------------------------------------
Một lần nữa cảm ơn tất cả mọi người. Đặc biết gửi lời cảm ơn đến bạn @ThangCuAnh đã giới thiệu iGrid và @Hai Lúa Miền Tây đã biểu diễn cách dùng để mình hoàn thiện chương trình
Cái này có phải cài iGrid trên máy user không anh.
 
Cái này có phải cài iGrid trên máy user không anh.

Vì iGrid là ActiveX Controls nên bắt buộc phải cài đặt bạn nhé. User phải có quyền Admin mới cài được để nó đăng ký vào Regisstry. Một số doanh nghiệp lớn, IT họ hay rất né tránh việc cho phép cài đặt ứng dụng ngoài. Nhưng nếu dụng thuyết phục và nguồn thư viện lập là "lành mạnh" thì Ok.
 
iGird hay quá đại ca ơi!
Chắc phải "đập hết xây lại" quá

Nếu ai đã từng dùng VB6.0, Delphi... thì không thể nào mà không vọc iGrid, MSFlexGrid bởi tính hữu dụng của nó so với "Grid đi theo". Năm 2004 em đã viết và ứng dụng thàng công vào công ty phần mềm quản lý đơn hàng bằng Access, phần mềm này được chạy trong mạng nội bộ công ty. Sau 2 năm dùng, em mạnh dạn "đập" nó để làm bằng VB6.0 với CSDL là Access, Năm 2008 thay đổi công việc và chuyển sang công ty mới, được tiếp xúc với ERP là làm việc trên nó. Mọi thứ đề có sẵn, không cần phải phát triển gì thêm. Tuy nhiên với lòng say mê nên đã củng cố và làm lại 1 chương trình cho riêng mình, sau 6 tháng làm việc, công ty tách ra và mình lại theo công ty mới tách, mới hoàn toàn, cơ hội được ứng dụng chương trình của mình. Năm 2010 thấy CSDL ngày càng phình to và lại 1 lần nữa "đập" để chuyển sang CSDL lớn hơn đó là SQLServer 2005. Nhưng vẫn dùng trong mạng nội bộ, mộng ước vẫn là dùng online (Kết nối và truy vấn qua Internet). Vẫn biết là để được kết nối qua mạng thì đòi hỏi phải có IP tĩnh, hoặc thuê Server, tuy nhiên do phần mềm đang sử dụng vẫn đảm bảo yêu cầu và chưa có nhu cầu về sử dụng online nên không mạnh dạn thay đổi. Mãi đến nặm 2013 em vẫn là tín đồ của VB6.0, và xụp đổ hoàn toàn khi mở đề tài http://www.giaiphapexcel.com/diendan/threads/Điểm-danh-thành-viên-sử-dụng-phần-mềm-vb6-0.76216/#post-468291

upload_2018-1-9_16-25-22.png

Bài viết của @kyo làm em mất lửa với VB6.0 và quyết định tìm hiểu nó. Càng tìm hiểu và càng thích. Ngày 30-04-2013 em quyết định "đập" một lần nữa, lần này rất đứt ruột, chuyển đổi hoàn toàn, mọi thứ đều mới mẽ, nhiều lúc muốn bỏ tất cả, làm chi cho cực... Nhưng không bỏ được. Lúc này công ty đã đăng ký gói cước Internet mạnh và được nhà cung cấp dịch vụ tặng cho IP tĩnh, vậy là mơ ước được thành hình. Xây dựng trên nền VB.Net 12.0 và DevExpress 12.0 và phần mền đã tương đối hoàn thiện cho đến ngày hôm nay.

Mạnh dạn "đập" để xây lại khi thấy cái cũ bị lỗi thời thì mới có phần mềm mới và công nghệ phần mềm mới phát triển sư phụ à.

Qua đề tài này cũng chân thành cảm ơn @kyo đã truyền lửa cho mình.
 
Lần chỉnh sửa cuối:
Nếu ai đã từng dùng VB6.0, Delphi, và sau này thì .Net thì không thể nào mà không vọc iGrid, MSFlexGrid bởi tính hữu dụng của nó so với "Grid đi theo". Năm 2004 em đã viết và ứng dụng thàng công vào công ty phần mềm quản lý đơn hàng bằng Access, phần mềm này được chạy trong mạng nội bộ công ty. Sau 2 năm dùng, em mạnh dạn "đập" nó để làm bằng VB6.0 với CSDL là Access, Năm 2008 thay đổi công việc và chuyển sang công ty mới, được tiếp xúc với ERP là làm việc trên nó. Mọi thứ đề có sẵn, không cần phải phát triển gì thêm. Tuy nhiên với lòng say mê nên đã củng cố và làm lại 1 chương trình cho riêng mình, sau 6 tháng làm việc, công ty tách ra và mình lại theo công ty mới tách, mới hoàn toàn, cơ hội được ứng dụng chương trình của mình. Năm 2010 thấy CSDL ngày cành phình to và lại 1 lần nữa "đập" để chuyển sang CSDL lớn hơn đó là SQLServer 2005. Nhưng vẫn dùng trong mạng nội bộ, mộng ước vẫn là dùng online (Kết nối và truy vấn qua Internet). Vẫn biết là để được kết nối qua mạng thì đòi hỏi phải có IP tĩnh, hoặc thuê Server, tuy nhiên do phần mềm đang sử dụng vẫn đảm bảo yêu cầu và chưa có nhu cầu về sử dụng online nên không mạnh dạn thay đổi. Mãi đến nặm 2013 em vẫn là tín đồ của VB6.0, và xụp đổ hoàn toàn khi mở đề tài http://www.giaiphapexcel.com/diendan/threads/Điểm-danh-thành-viên-sử-dụng-phần-mềm-vb6-0.76216/#post-468291

View attachment 189688

Bài viết của @kyo làm mình mất lửa với VB6.0 và quyết định tìm hiểu nó. Càng tìm hiểu và càng thích. Ngày 30-04-2013 em quyết định "đập" một lần nữa, lần này rất đứt ruột, chuyển đổi hoàn toàn, mọi thứ đều mới mẽ, nhiều lúc muốn bỏ tất cả, làm chi cho cực... Nhưng không bỏ được. Lúc này công ty đã đăng ký gói cước Internet mạnh và được nhà cung cấp dịch vụ tặng cho IP tĩnh, vậy là mơ ước được thành hình. Xây dựng trên nền VB.Net 12.0 và DevExpress 12.0 và phần mền đã tương đối hoàn thiện cho đến ngày hôm nay.

Mạnh dạn "đập" để xây lại khi thấy cái cũ bị lỗi thời thì mới có phần mềm mới và công nghệ phần mềm mới phát triển sư phụ à.

Qua đề tài này cũng chân thành cảm ơn @kyo đã truyền lửa cho mình.

Mình thì cũng có tư duy thay đổi nhưng không theo số đông khi gần như đi một đường trong nước. Không còn dùng VB6 để làm ứng dụng (chỉ đụng vào khi sửa cái cũ hoặc tham mã nguồn đâu đó). Đã nghiên cứ .NET, C# để sẵn sàng viết ứng dụng quy mô lớn nhưng từ bỏ để dùng Delphi trong khi ở Việt Nam hiếm hoi có người làm. Thực tế ở thế giới các nước vẫn làm rất mạnh Delphi. Và kết quả đã có nhiều công trình từ nó. Mình nghĩ lựa chọn công nghệ có nhiều hướng nhưng chúng ta phải tham khảo nguồn của thế giới chứ không phụ thuộc vào số đông trong nước, có hiểu biết nhất định về công nghệ đế biết cái "giống" đó có đẻ được con khỏe mạnh hay không? Nếu nó có khả năng thì sẽ có nhiều võ để làm ra.
delphi.png
 
Sao em đăng ký iGrid không được vậy các anh.
Em vào Start run gỏ: regsvr32 iGrid650_10Tec.OCX
 
Mạnh dạn "đập" để xây lại khi thấy cái cũ bị lỗi thời thì mới có phần mềm mới và công nghệ phần mềm mới phát triển sư phụ à.

.
Cá rằng sẽ có lúc đập nữa! Giờ thấy xu hướng viết phần mềm chạy trên nền web không hà. Phần mềm phải tương tác được với mọi smartphone, tức là ở bất cứ đâu, dùng hệ điều hành nào, miễn có internet là mở được phần mềm
(đang ghiền vụ này mà chưa có thời gian)
 
Cá rằng sẽ có lúc đập nữa! Giờ thấy xu hướng viết phần mềm chạy trên nền web không hà. Phần mềm phải tương tác được với mọi smartphone, tức là ở bất cứ đâu, dùng hệ điều hành nào, miễn có internet là mở được phần mềm
(đang ghiền vụ này mà chưa có thời gian)
Chắc chắn là thế rồi sư phụ, đã hơn 1 năm trôi qua rồi. Tuy nhiên winform vẫn là thế mạnh cho việc cập nhật và upload dữ liệu lớn, webform sẽ có tốc độ tương đối thôi. Sẽ phát triển song song chứ không bỏ đi winform đâu sư phụ.

14670668_10209362120963933_8897788529078406673_n.jpg 14908276_10209362121003934_4078387791622814293_n.jpg 14947844_10209452348299560_5726265974423463141_n.jpg
 
Sao em đăng ký iGrid không được vậy các anh.
Em vào Start run gỏ: regsvr32 iGrid650_10Tec.OCX

- Win 32bit: Copy *.ocx vào C:\Windows\System32
+ Chạy CMD với quyền admin
+ Nhập tiếp: regsvr32 *.ocx > Enter

- Win 64 bit: Copy *.ocx vào C:\Windows\SysWoW64 ( không phải C:\Windows\System32)
Chạy CMD với quyền admin
- Nhập lệnh: CD\Windows\syswow64 -> Enter
-Nhập tiếp: regsvr32 *.ocx > Enter

Lưu ý: * là tên thư viện .ocx
 
Làm xong chương trình khoảng tuần nay mà chỉnh sửa tùm lum, đến nay mới tạm xong!
Gửi lên cho bà con tham khảo, ai thích thì lấy về xài
Yêu cầu:
1> Máy tính cài Office 32 bit (Windows sao cũng được)
2> Đã cài Microsoft Windows Common Controls-2 6.0 (SP6) (file mscomct2.ocx)
3> Đã cài iGrid Control (file iGrid 650_10Tec.ocx)
Thiếu 1 trong 3 món trên ---> Khỏi xài
(Do chưa rành iGrid nên chắc còn nhiều chỗ xử lý hơi.. ngố. Nhưng thôi kệ, từ từ nghiên cứu tiếp)
 

File đính kèm

Làm xong chương trình khoảng tuần nay mà chỉnh sửa tùm lum, đến nay mới tạm xong!
Gửi lên cho bà con tham khảo, ai thích thì lấy về xài
Yêu cầu:
1> Máy tính cài Office 32 bit (Windows sao cũng được)
2> Đã cài Microsoft Windows Common Controls-2 6.0 (SP6) (file mscomct2.ocx)
3> Đã cài iGrid Control (file iGrid 650_10Tec.ocx)
Thiếu 1 trong 3 món trên ---> Khỏi xài
(Do chưa rành iGrid nên chắc còn nhiều chỗ xử lý hơi.. ngố. Nhưng thôi kệ, từ từ nghiên cứu tiếp)
Anh mở thử thì bị lỗi "không thể tìm thấy Project bị thiếu hoặc thư viện trên hệ thống".
Anh nghĩ do 1 biến nào đó thiếu hoặc chưa đúng Type, nhưng không xem lại.

Loi 1.JPG Loi 2.JPG
 
Lần chỉnh sửa cuối:
Bài 42 em nói rõ phải thỏa 3 điều kiện thì mới chạy được
Đoán là anh chưa cài mấy ocx liệt kê tại 2 điều kiện dưới
Do em nêu:
Mã:
2> Đã cài Microsoft Windows Common Controls-2 6.0 (SP6) (file mscomct2.ocx)
3> Đã cài iGrid Control (file iGrid 650_10Tec.ocx)

Nên anh tải File và xem thử thôi, chứ không có ý định dùng.
 
Làm xong chương trình khoảng tuần nay mà chỉnh sửa tùm lum, đến nay mới tạm xong!
Gửi lên cho bà con tham khảo, ai thích thì lấy về xài
Yêu cầu:
1> Máy tính cài Office 32 bit (Windows sao cũng được)
2> Đã cài Microsoft Windows Common Controls-2 6.0 (SP6) (file mscomct2.ocx)
3> Đã cài iGrid Control (file iGrid 650_10Tec.ocx)
Thiếu 1 trong 3 món trên ---> Khỏi xài
(Do chưa rành iGrid nên chắc còn nhiều chỗ xử lý hơi.. ngố. Nhưng thôi kệ, từ từ nghiên cứu tiếp)
Chào bác ndu
mình đã tải, đăng ký thành công igrid, còn mscomct2.ocx thì máy mình đã đăng ký sẵn rồi.
Khi mở lên thì bị báo lỗi như dưới
error1.PNG

Sau khi bấm ok, chạy thử button "Show Request" thì báo lỗi


error2.PNG

Bấm vài lần Ok thì hiện bảng nhưng bị lỗi font

error3.PNG
Bác xem giúp nha. Cảm ơn bác.
 
Chào bác ndu
mình đã tải, đăng ký thành công igrid, còn mscomct2.ocx thì máy mình đã đăng ký sẵn rồi.
Khi mở lên thì bị báo lỗi như dưới
View attachment 197114

Sau khi bấm ok, chạy thử button "Show Request" thì báo lỗi


View attachment 197115

Bấm vài lần Ok thì hiện bảng nhưng bị lỗi font

View attachment 197116
Bác xem giúp nha. Cảm ơn bác.
Hình như bạn đã đổi tên file thì phải? File của tôi Overtime_Request_V2.6.xlsb nhưng bạn sửa thành Overtime_Request_V2.6 (iGrid).xlsb, đúng không?
Nếu để nguyên tên file như cũ thì sẽ không việc gì. Tuy nhiên đây cũng là sơ sót của tôi. Câu lệnh:
Mã:
Application.Run ThisWorkbook.Name & "!........."
Sẽ bị lỗi với đường dẫn có ký tự đặc biệt. Lý ra câu lệnh "chắc ăn" phải vầy:
Mã:
Application.Run "'" & ThisWorkbook.Name & "'!......."
(thêm 2 dấu nháy đơn)
Bạn thử lại file mới xem sao nhé
 

File đính kèm

Hình như bạn đã đổi tên file thì phải? File của tôi Overtime_Request_V2.6.xlsb nhưng bạn sửa thành Overtime_Request_V2.6 (iGrid).xlsb, đúng không?
Nếu để nguyên tên file như cũ thì sẽ không việc gì. Tuy nhiên đây cũng là sơ sót của tôi. Câu lệnh:
Mã:
Application.Run ThisWorkbook.Name & "!........."
Sẽ bị lỗi với đường dẫn có ký tự đặc biệt. Lý ra câu lệnh "chắc ăn" phải vầy:
Mã:
Application.Run "'" & ThisWorkbook.Name & "'!......."
(thêm 2 dấu nháy đơn)
Bạn thử lại file mới xem sao nhé
Cảm ơn bác nhiều. Em đang ở ngoài đường chưa thử nhưng chắc sẽ hết lỗi.

Về phần igrid này em thấy nó rất thú vị, tuy nhiên nó quá xa lạ với em, tìm trên diễn đàn mình cũng không được chia sẻ nhiều.

Không biết bác có thể lập 1 topic chuyên về igrid để các anh em có thể tiếp cận thêm kiến thức mới này không ạ, thiết nghĩ biết đâu các cao thủ khác có thể chia sẻ thêm nhiều tuyệt chiêu nữa thì sao?

Biết đâu sau này nó sẽ thay thế, bù đắp những khiếm khuyết của listbox, listview luôn!!!

Chúc bác sức khỏe tốt nhé.
 
Lần chỉnh sửa cuối:
Cảm ơn bác nhiều. Em đang ở ngoài đường chưa thử nhưng chắc sẽ hết lỗi.
Về phần igrid này em thấy nó rất thú vị, tuy nhiên nó quá xa lạ với em, tìm trên diễn đàn mình cũng không được chia sẻ nhiều.
Không biết bác có thể lập 1 topic chuyên về igrid để các anh em có thể tiếp cận thêm kiến thức mới này không ạ, thiết nghĩ biết đâu các cao thủ khác có thể chia sẻ thêm nhiều tuyệt chiêu nữa thì sao?

Biết đâu sau này nó sẽ thay thế, bù đắp những khiếm khuyết của listbox, listview luôn!!!
Chúc bác sức khỏe tốt
Nếu bạn tải bộ cài đặt từ trang chủ thì bên trong sẽ thấy có file iGrid650_10Tec.chm, hướng dẫn toàn bộ cách dùng liên quan đến phương thức, thuộc tính của đối tượng
Tôi cũng đọc hướng dẫn từ file này rồi tự thí nghiệm thôi
 
Chào bác @ndu96081631,
Em có tải file của bác về ngâm cứu để áp dụng thử thì em gặp trục trặc, e đã được dữ liệu load lên form tuy nhiên phần header thì nó nằm ở 1 nơi khác, không trùng với các cột của dữ liệu.
Với lại em nghe các bác nói tốc độ Igrid rất nhanh nhưng sao em load thử 8000 dòng thì cũng như listview và listbox. Có thể do code tào lao nên Bác xem và sửa giúp em nhé.
Cảm ơn bác.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào bác @ndu96081631,
Em có tải file của bác về ngâm cứu để áp dụng thử thì em gặp trục trặc, e đã được dữ liệu load lên form tuy nhiên phần header thì nó nằm ở 1 nơi khác, không trùng với các cột của dữ liệu.
Với lại em nghe các bác nói tốc độ Igrid rất nhanh nhưng sao em load thử 8000 dòng thì cũng như listview và listbox. Có thể do code tào lao nên Bác xem và sửa giúp em nhé.
Cảm ơn bác.
Bác @ndu96081631 ơi, giúp em với.
 
Từ từ bạn à! Mấy hôm nay máy tính của tôi bị trục trặc, đang cài lại nên chưa giúp được. Để chiều về xem sao nhé.
Nói riêng về vụ nhanh chậm: nếu bạn add từng cell vào iGrid thì sẽ chậm. Muốn nhanh phải nạp iGrid từ mảng giống cách tôi đã làm
 
Từ từ bạn à! Mấy hôm nay máy tính của tôi bị trục trặc, đang cài lại nên chưa giúp được. Để chiều về xem sao nhé.
Nói riêng về vụ nhanh chậm: nếu bạn add từng cell vào iGrid thì sẽ chậm. Muốn nhanh phải nạp iGrid từ mảng giống cách tôi đã làm
Dạ, em cảm ơn bác trước, trong file em có add mảng luôn đấy ạ. Có điều cách add mảng của iGrid nó không giống với listview và listbox nên e mò tùm lum code, râu ông này cắm cằm bà kia khiến nó chạy lộn xộn, chậm và header column không đúng list items đã add ạ.
 
Dạ, em cảm ơn bác trước, trong file em có add mảng luôn đấy ạ. Có điều cách add mảng của iGrid nó không giống với listview và listbox nên e mò tùm lum code, râu ông này cắm cằm bà kia khiến nó chạy lộn xộn, chậm và header column không đúng list items đã add ạ.
Sửa toàn bộ code trong UserForm1 của bạn thành vầy:
Mã:
Private Sub UserForm_Initialize()
  Dim rngSource As Range
  Set rngSource = Sheet1.Range("A1", Sheet1.Range("F20000").End(xlUp))
  LoadData Me.iGrid1, rngSource
End Sub
Private Sub LoadData(ByVal iGrid As Control, ByVal SourceData As Range)
  Dim lGridRow As Long, lGridCol As Long
  Dim arrColWidth, arrColHRD, arrSource, aRes()
  On Error Resume Next
  arrSource = Intersect(SourceData, SourceData.Offset(1)).Value
  arrColWidth = Array(90, 150, 290, 410, 410, 410)
  arrColHRD = SourceData.Resize(1).Value
  ReDim aRes(1 To UBound(arrSource, 1), 1 To UBound(arrSource, 2))
  With iGrid
    .BeginUpdate
    .Font = "Times New Roman"
    .Header.Font = "Times New Roman"
    .Header.Font.Bold = True
    .Header.Height = 25
    .MultiSelect = True
    .RowMode = True
    .RowCount = UBound(arrSource, 1)
    For lGridCol = 1 To UBound(arrColHRD, 2)
      .AddCol lGridCol, arrColHRD(1, lGridCol), arrColWidth(lGridCol - 1), 1, 1, , 1
      .ColHeaderForeColor(lGridCol) = &H800000
      For lGridRow = 1 To .RowCount
        aRes(lGridRow, lGridCol) = arrSource(lGridRow, lGridCol)
      Next
    Next
    .LoadFromArray 1, 1, aRes, False
    .EndUpdate
  End With
  If Err.Number Then MsgBox Err.Description
End Sub
 

File đính kèm

Sửa toàn bộ code trong UserForm1 của bạn thành vầy:
Mã:
Private Sub UserForm_Initialize()
  Dim rngSource As Range
  Set rngSource = Sheet1.Range("A1", Sheet1.Range("F20000").End(xlUp))
  LoadData Me.iGrid1, rngSource
End Sub
Private Sub LoadData(ByVal iGrid As Control, ByVal SourceData As Range)
  Dim lGridRow As Long, lGridCol As Long
  Dim arrColWidth, arrColHRD, arrSource, aRes()
  On Error Resume Next
  arrSource = Intersect(SourceData, SourceData.Offset(1)).Value
  arrColWidth = Array(90, 150, 290, 410, 410, 410)
  arrColHRD = SourceData.Resize(1).Value
  ReDim aRes(1 To UBound(arrSource, 1), 1 To UBound(arrSource, 2))
  With iGrid
    .BeginUpdate
    .Font = "Times New Roman"
    .Header.Font = "Times New Roman"
    .Header.Font.Bold = True
    .Header.Height = 25
    .MultiSelect = True
    .RowMode = True
    .RowCount = UBound(arrSource, 1)
    For lGridCol = 1 To UBound(arrColHRD, 2)
      .AddCol lGridCol, arrColHRD(1, lGridCol), arrColWidth(lGridCol - 1), 1, 1, , 1
      .ColHeaderForeColor(lGridCol) = &H800000
      For lGridRow = 1 To .RowCount
        aRes(lGridRow, lGridCol) = arrSource(lGridRow, lGridCol)
      Next
    Next
    .LoadFromArray 1, 1, aRes, False
    .EndUpdate
  End With
  If Err.Number Then MsgBox Err.Description
End Sub
Cảm ơn bác nhiều
File load tốc độ nhanh hơn listview rất nhiều và hỗ trợ unicode rất tốt ạ. Em có post lên file, thử tốc độ load của igrid và listview, đúng là 1 trời 1 vực. Vì 1 phần listview phải convert sang bộ font windows 1258 nên bị chậm đáng kể,
Trong file em có nhu cầu muốn search các nội dung cột "Tên khách hàng" trong iGrid như listview, nhưng em viết code na ná listview không được, bác xem giúp em vụ này nha. Chỉ có bác rành vụ igrid nên em chỉ biết bám víu vào bác thôi, bác thông cảm nha.
Chúc bác tối vui vẻ ạ.
 

File đính kèm

Cảm ơn bác nhiều
File load tốc độ nhanh hơn listview rất nhiều và hỗ trợ unicode rất tốt ạ. Em có post lên file, thử tốc độ load của igrid và listview, đúng là 1 trời 1 vực. Vì 1 phần listview phải convert sang bộ font windows 1258 nên bị chậm đáng kể,
Trong file em có nhu cầu muốn search các nội dung cột "Tên khách hàng" trong iGrid như listview, nhưng em viết code na ná listview không được, bác xem giúp em vụ này nha. Chỉ có bác rành vụ igrid nên em chỉ biết bám víu vào bác thôi, bác thông cảm nha.
Chúc bác tối vui vẻ ạ.
Tôi sửa lại toàn bộ code của bạn
1> Đầu tiên là code khởi tạo và gọi UserForm
Mã:
Public rngSource As Range, arrSource()
Sub Button1_Click()
  RangeInitialize
  UserForm_iGrid.Show False
End Sub
Sub RangeInitialize()
  Set rngSource = Sheet1.Range("A1", Sheet1.Range("F20000").End(xlUp))
  arrSource = Intersect(rngSource.Offset(1), rngSource).Value
End Sub
2> Tiếp theo là code trong UserForm
Mã:
Private Sub UserForm_Initialize()
  Dim lGridCol As Long
  Dim arrColWidth
  If rngSource Is Nothing Then RangeInitialize
  'arrColWidth = Array(90, 150, 290, 410, 410, 410)
  arrColWidth = Array(49, 80, 150, 100, 170, 170)
  With Me.iGrid1
    .Font = "Times New Roman"
    .Header.Font = "Verdana"
    .Header.Font.Bold = True
    .Header.Height = 30
    .Header.Font.Size = 10
    .MultiSelect = True
    .RowMode = True
     For lGridCol = 1 To rngSource.Columns.Count
      .AddCol lGridCol, rngSource(1, lGridCol), arrColWidth(lGridCol - 1), 1, 1, , 1
      .ColHeaderForeColor(lGridCol) = &H800000
    Next
  End With
  LoadData Me.iGrid1, arrSource
End Sub
Private Sub LoadData(ByVal iGridObj As Object, ByVal SourceData As Variant)
  'SourceData không bao gom tiêu de
  Dim lGridRow As Long, lGridCol As Long, lGridRowCount As Long
  Dim aRes()
  On Error Resume Next
  aRes = SourceData
  lGridRowCount = UBound(aRes, 1)
  On Error GoTo 0
  With iGridObj
    .BeginUpdate
    .Clear
    If lGridRowCount Then
      .RowCount = lGridRowCount
      .LoadFromArray 1, 1, aRes, False
    End If
    .EndUpdate
  End With
  If Err.Number Then MsgBox Err.Description
End Sub
Private Sub Cmd_Search_Click()
  Dim aRes()
  On Error Resume Next
  aRes = Filter2DArray(arrSource, 3, TextBox1.Value & "*", False)
  LoadData Me.iGrid1, aRes
End Sub
Lần cải tiến này có 1 điểm khá quan trọng, đó là không cần đến vòng lập vẫn có thể nạp list vào iGrid (đố bạn nhận ra đó là chỗ thay đổi nào? Ẹc... Ẹc...)
===============
Lưu ý: Nếu bạn muốn canh lề phải cho cột STT, chỉ cần thêm đoạn:
Mã:
For lGridRow = 1 To .RowCount
  .CellAlignH(lGridRow, 1) = 2
Next
Code canh lề phải này đương nhiên phải dùng vòng lập (không giống như Excel có thể canh 1 lần cho nguyên cột)
===============
Tôi cũng nghi ngờ rằng bạn sẽ hỏi đến chuyện: "Làm sao lấy được dữ liệu từ iGrid xuống sheet?". Vậy tôi làm luôn
Mã:
Private Sub CommandButton1_Click()
  Sheet2.Range("A1").CurrentRegion.Clear
  With Me.iGrid1
    If .RowCount Then
      ReDim arr(1 To .RowCount, 1 To .ColCount)
      .LoadIntoArray 1, 1, arr, False
      Sheet2.Range("A1").Resize(.RowCount, .ColCount).Value = arr
    End If
  End With
End Sub
Thay Sheet2.Range("A1") thành tham chiếu khác phù hợp nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi sửa lại toàn bộ code của bạn
1> Đầu tiên là code khởi tạo và gọi UserForm
Mã:
Public rngSource As Range, arrSource()
Sub Button1_Click()
  RangeInitialize
  UserForm_iGrid.Show False
End Sub
Sub RangeInitialize()
  Set rngSource = Sheet1.Range("A1", Sheet1.Range("F20000").End(xlUp))
  arrSource = Intersect(rngSource.Offset(1), rngSource).Value
End Sub
2> Tiếp theo là code trong UserForm
Mã:
Private Sub UserForm_Initialize()
  Dim lGridCol As Long
  Dim arrColWidth
  If rngSource Is Nothing Then RangeInitialize
  'arrColWidth = Array(90, 150, 290, 410, 410, 410)
  arrColWidth = Array(49, 80, 150, 100, 170, 170)
  With Me.iGrid1
    .Font = "Times New Roman"
    .Header.Font = "Verdana"
    .Header.Font.Bold = True
    .Header.Height = 30
    .Header.Font.Size = 10
    .MultiSelect = True
    .RowMode = True
     For lGridCol = 1 To rngSource.Columns.Count
      .AddCol lGridCol, rngSource(1, lGridCol), arrColWidth(lGridCol - 1), 1, 1, , 1
      .ColHeaderForeColor(lGridCol) = &H800000
    Next
  End With
  LoadData Me.iGrid1, arrSource
End Sub
Private Sub LoadData(ByVal iGridObj As Object, ByVal SourceData As Variant)
  'SourceData không bao gom tiêu de
  Dim lGridRow As Long, lGridCol As Long, lGridRowCount As Long
  Dim aRes()
  On Error Resume Next
  aRes = SourceData
  lGridRowCount = UBound(aRes, 1)
  On Error GoTo 0
  With iGridObj
    .BeginUpdate
    .Clear
    If lGridRowCount Then
      .RowCount = lGridRowCount
      .LoadFromArray 1, 1, aRes, False
    End If
    .EndUpdate
  End With
  If Err.Number Then MsgBox Err.Description
End Sub
Private Sub Cmd_Search_Click()
  Dim aRes()
  On Error Resume Next
  aRes = Filter2DArray(arrSource, 3, TextBox1.Value & "*", False)
  LoadData Me.iGrid1, aRes
End Sub
Lần cải tiến này có 1 điểm khá quan trọng, đó là không cần đến vòng lập vẫn có thể nạp list vào iGrid (đố bạn nhận ra đó là chỗ thay đổi nào? Ẹc... Ẹc...)
===============
Lưu ý: Nếu bạn muốn canh lề phải cho cột STT, chỉ cần thêm đoạn:
Mã:
For lGridRow = 1 To .RowCount
  .CellAlignH(lGridRow, 1) = 2
Next
Code canh lề phải này đương nhiên phải dùng vòng lập (không giống như Excel có thể canh 1 lần cho nguyên cột)
===============
Tôi cũng nghi ngờ rằng bạn sẽ hỏi đến chuyện: "Làm sao lấy được dữ liệu từ iGrid xuống sheet?". Vậy tôi làm luôn
Mã:
Private Sub CommandButton1_Click()
  Sheet2.Range("A1").CurrentRegion.Clear
  With Me.iGrid1
    If .RowCount Then
      ReDim arr(1 To .RowCount, 1 To .ColCount)
      .LoadIntoArray 1, 1, arr, False
      Sheet2.Range("A1").Resize(.RowCount, .ColCount).Value = arr
    End If
  End With
End Sub
Thay Sheet2.Range("A1") thành tham chiếu khác phù hợp nhé
Cảm ơn bác
Bác quả thật đi guốc trong bụng em rồi. Em đã add code đưa dữ liệu vào sheet cho cả listview và igrid. Ở dưới là 1 vài yêu cầu, tuy có hơi phiền bác nhưng quả thật là nhu cầu khá cơ bản ạ.
Trong file em mới đính kèm, em nhờ bác hỗ trợ các nội dung sau:
- Khi chọn dòng nào trong igrid thì dữ liệu sẽ hiển thị trong các text box tương ứng ở dưới.
- Button "Add New" lấy dữ liệu gõ từ textbox vào trong igrid
- Button "Save Edit" lưu dữ liệu đã chỉnh sửa từ các textbox vào igrid và sheet1
- Button "Delete" xóa luôn dòng đã chọn trong igrid và refresh lại bảng igrid dồn lấp đi vòng vừa bị xóa.
Em nghĩ bấy nhiêu đó tính năng đã đủ nhu cầu cơ bản của mọi người cần dùng đến userform. Có lẻ sau khi bác hoàn thành xong phần này thì mọi người có thể rời xa cả listbox và listview để dùng igrid với đầy đủ tính năng "đẹp, hỗ trợ unicode, có thể cuộn chuột, sort theo tiêu đề, format tiêu đề, ...".
Cảm ơn bác đã khai sáng cho em và mọi người 1 control tuyệt vời như vậy. Hy vọng bác sẽ tiếp tục hỗ trợ em ạ.
Chúc bác buổi tối vui vẻ.
 

File đính kèm

Cảm ơn bác
Bác quả thật đi guốc trong bụng em rồi. Em đã add code đưa dữ liệu vào sheet cho cả listview và igrid. Ở dưới là 1 vài yêu cầu, tuy có hơi phiền bác nhưng quả thật là nhu cầu khá cơ bản ạ.
Trong file em mới đính kèm, em nhờ bác hỗ trợ các nội dung sau:
- Khi chọn dòng nào trong igrid thì dữ liệu sẽ hiển thị trong các text box tương ứng ở dưới.
- Button "Add New" lấy dữ liệu gõ từ textbox vào trong igrid
- Button "Save Edit" lưu dữ liệu đã chỉnh sửa từ các textbox vào igrid và sheet1
- Button "Delete" xóa luôn dòng đã chọn trong igrid và refresh lại bảng igrid dồn lấp đi vòng vừa bị xóa.
Em nghĩ bấy nhiêu đó tính năng đã đủ nhu cầu cơ bản của mọi người cần dùng đến userform. Có lẻ sau khi bác hoàn thành xong phần này thì mọi người có thể rời xa cả listbox và listview để dùng igrid với đầy đủ tính năng "đẹp, hỗ trợ unicode, có thể cuộn chuột, sort theo tiêu đề, format tiêu đề, ...".
Cảm ơn bác đã khai sáng cho em và mọi người 1 control tuyệt vời như vậy. Hy vọng bác sẽ tiếp tục hỗ trợ em ạ.
Chúc bác buổi tối vui vẻ.
Bài toán dạng này tôi đã từng làm cách đây không lâu. Nói chung là không khó nhưng cũng không dễ.
- Dễ: bởi toàn những code thông thường
- Khó: bẫy lỗi cũng như phải tính hết được những tình huống có thể xảy ra
Lấy ví dụ 1 tình huống: Bạn gõ vào các textbox và bấm Save Edit thì ta có 2 trường hợp xảy ra:
1> Số ID No chưa tồn tại, ta tiến hành lưu giá trị mới vào dòng cuối cùng của dữ liệu.
2> Số ID No đã tồn tại, phải cảnh báo người dùng tùy chọn bằng MsgBox Yes-No. Nếu bấm Yes nghĩa là sửa lại dòng có số ID No vừa gõ theo giá trị mới hoặc bấm No thì không làm gì cả
Nói sơ qua 1 tình huống như vậy cho bạn hình dung và hiểu rằng muốn hoàn thành nó phải cần nhiều thời gian
 
MSFlexGrid ocx của VB6 thì sao anh ? Anh test thử đi.
Hay MSDATGRD.OCX, MS VB6 Datagrid control
Hay anh thử cái iGrid control Ocx này đi, support cho VBA
https://10tec.com/activex-grid/

Thằng này mất phí mà, viết cho VB6, dùng rất ngon. Nhưng bác ndu không thích c r a c k :)
Bài đã được tự động gộp:

Phù... Mò từ sáng đến giờ (đọc help) mới tìm ra được cách chèn checkbox vào cell trong iGrid. Thậm chí chèn ComboBox cũng được
Ngoài ra, theo mô tả thì thấy hình như còn chèn được rất nhiều thứ thú vị khác (như Icon chẳng hạn), nhưng mình chưa cần tới nên chưa nghiên cứu
Các bạn khác thử iGrid đi, bảo đảm không thất vọng đâu
(có điều bắt buộc phải Office 32 bit nhé, Windows mấy bit không thành vấn đề)
-----------------------------------------------------------------------------------------------------
Một lần nữa cảm ơn tất cả mọi người. Đặc biết gửi lời cảm ơn đến bạn @ThangCuAnh đã giới thiệu iGrid và @Hai Lúa Miền Tây đã biểu diễn cách dùng để mình hoàn thiện chương trình

Bác dùng Grid như VflexGrid thì cũng phải đọc nó mới có thể sử dụng, từ phương thức đến thuộc tính vì nó là đối tượng bên ngoài, không kèm theo VBA hay VB6.
 
Bài toán dạng này tôi đã từng làm cách đây không lâu. Nói chung là không khó nhưng cũng không dễ.
- Dễ: bởi toàn những code thông thường
- Khó: bẫy lỗi cũng như phải tính hết được những tình huống có thể xảy ra
Lấy ví dụ 1 tình huống: Bạn gõ vào các textbox và bấm Save Edit thì ta có 2 trường hợp xảy ra:
1> Số ID No chưa tồn tại, ta tiến hành lưu giá trị mới vào dòng cuối cùng của dữ liệu.
2> Số ID No đã tồn tại, phải cảnh báo người dùng tùy chọn bằng MsgBox Yes-No. Nếu bấm Yes nghĩa là sửa lại dòng có số ID No vừa gõ theo giá trị mới hoặc bấm No thì không làm gì cả
Nói sơ qua 1 tình huống như vậy cho bạn hình dung và hiểu rằng muốn hoàn thành nó phải cần nhiều thời gian
Dạ, vì phần bẫy lỗi ngốn nhiều thời gian của bác nên bác có thể xem xét bỏ qua nó và viết códe bình thường được không ạ? Còn phần bẫy lỗi tùy nhu cầu của mọi người khác nhau nên sẽ tùy biến theo cách riêng của mọi người ạ.
 
Lần chỉnh sửa cuối:
Cảm ơn bác
Bác quả thật đi guốc trong bụng em rồi. Em đã add code đưa dữ liệu vào sheet cho cả listview và igrid. Ở dưới là 1 vài yêu cầu, tuy có hơi phiền bác nhưng quả thật là nhu cầu khá cơ bản ạ.
Trong file em mới đính kèm, em nhờ bác hỗ trợ các nội dung sau:
- Khi chọn dòng nào trong igrid thì dữ liệu sẽ hiển thị trong các text box tương ứng ở dưới.
- Button "Add New" lấy dữ liệu gõ từ textbox vào trong igrid
- Button "Save Edit" lưu dữ liệu đã chỉnh sửa từ các textbox vào igrid và sheet1
- Button "Delete" xóa luôn dòng đã chọn trong igrid và refresh lại bảng igrid dồn lấp đi vòng vừa bị xóa.
Em nghĩ bấy nhiêu đó tính năng đã đủ nhu cầu cơ bản của mọi người cần dùng đến userform. Có lẻ sau khi bác hoàn thành xong phần này thì mọi người có thể rời xa cả listbox và listview để dùng igrid với đầy đủ tính năng "đẹp, hỗ trợ unicode, có thể cuộn chuột, sort theo tiêu đề, format tiêu đề, ...".
Cảm ơn bác đã khai sáng cho em và mọi người 1 control tuyệt vời như vậy. Hy vọng bác sẽ tiếp tục hỗ trợ em ạ.
Chúc bác buổi tối vui vẻ.
hỏi lại một câu: Tại sao bạn lại cần mấy cái TextBox bên dưới trong khi bạn hoàn toàn có thể Edit trực tiếp trên iGrid?
 
hỏi lại một câu: Tại sao bạn lại cần mấy cái TextBox bên dưới trong khi bạn hoàn toàn có thể Edit trực tiếp trên iGrid?
Dạ, em đang tính cho các trường hợp dữ liệu có nhiều cột thì thiết kế nhiều textbox theo khu vực em thấy có lẻ sẽ cần thiết, đỡ phải kéo qua kéo lại trong igrid ạ, với lại textbox còn dùng để nhập liệu mới nữa mà bác.
 
Dạ, em đang tính cho các trường hợp dữ liệu có nhiều cột thì thiết kế nhiều textbox theo khu vực em thấy có lẻ sẽ cần thiết, đỡ phải kéo qua kéo lại trong igrid ạ, với lại textbox còn dùng để nhập liệu mới nữa mà bác.
Nhập liệu mới hay sửa, tất cả đều có thể nhập trực tiếp trên iGrid mà không cần phải đi đường vòng thông qua các textbox
 
Nhập liệu mới hay sửa, tất cả đều có thể nhập trực tiếp trên iGrid mà không cần phải đi đường vòng thông qua các textbox
Dạ em không rành Igrid nên không biết ưu điểm của nó nên em cứ đi theo lối mòn của listview, listbox là cứ phải có textbox để sửa và thêm mới ạ. Nếu được thì nhờ bác làm 2 phương án xử trực tiếp trên igrid và thông qua textbox để mọi người có thể tự do lựa chọn phù hợp với nhu cầu nhé.
Về button "Add New":
Em có viết xong code và kèm phần bẫy lỗi nếu Id No bị trùng sẽ xuất hiện thông báo như bác nói, mọi thứ chạy ổn rồi. Em không biết refresh lại igrid có kèm dữ liệu mới vừa add được vào sheet, em có copy lại code UserForm_Initialize để nó lấy dữ liệu mới vô nhưng nó cứ trơ trơ ra bác ạ.
Về button "Save Edit": phần này có lẻ phải có bác hướng dẫn cách click vào dòng trên igrid thì hiện nội dung trong các textbox sau đó mới có hướng viết code tiếp ạ.
Mong bác hướng dẫn nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào bác @ndu96081631
Em cập nhật lại file mới, file cũ em chỉ kiểm tra người dùng nhập đủ 5 textbox nó mới bẫy lỗi, sáng nay em nhập thử chỉ 1 textbox id no bấm yes hết thì nó không bẫy lỗi.
File mới đã sửa lại lỗi đó ạ.
 

File đính kèm

Chào bác @ndu96081631,
Chắc các mod or admin thấy em chúc sức khỏe mỗi ngày với bác cảm thấy giống như đang spam hoặc làm phiền bác quá nên đã xóa các bài post đó rồi.
Hôm nay em cũng mò được cách khi chọn vào dòng nào trên igrid thì các textbox sẽ hiện nội dung ương ứng của dòng đó rồi ạ. Còn button Save Edit, Delete thì em chưa biết làm. Bác hướng dẫn em thêm nhé.

Mặc dù như bác nói, có thể thêm, sửa ,xóa trực tiếp trên igrid luôn nhưng em không biết làm ạ. Em làm kiểu truyền thống như listview và listbox thôi và kiểu này cũng giúp cho em và mọi người tùy sở thích và nhu cầu để lựa chọn áp dụng nha bác.

Bác xem file đính kèm nhé.
Mong bác dành chút thời gian để hỗ trợ làm 2 cách ạ.
Chúc bác sức khỏe
 

File đính kèm

Cho em hỏi chút các an!
Cái IGrid này có load được data từ Access không? Nếu được cho em xin ví dụ với ạ
 
Dùng được bạn à, cứ VBA là xài được tuốt. Trong bộ cài nó có thư mục ví dụ đó. Vào đó mà xem.
 

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

Back
Top Bottom