Các câu hỏi về Form trong Excel VBA

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Xin mọi người giúp em với:

File của em có 2 sheet như sau:
- Sheet 1 là sheet Đơn hàng: là sheet tổng hợp các đơn hàng trong 1 năm hoặc nhiều năm. Các đơn hàng khác nhau sẽ có mã đơn hàng khác nhau. Nhưng 1 đơn hàng mà có nhiều sản phẩm thì mỗi sản phẩm lại nằm trên 1 dòng khác nhau và có chung nhau mã đơn hàng.
- Sheet 2 là sheet In đơn hàng: ở sheet này em có tạo 1 khung sẵn các dữ liệu cột cần lấy ra từ sheet Đơn Hàng. Em muốn là khi em nhập 1 mã đơn hàng bất kì thì nó sẽ tự động tìm kiếm trong sheet đơn hàng và điền thêm các dòng vào khung có sẵn.
Ví dụ: Đơn hàng mã ABC03 có 3 sản phẩm thì nó sẽ tự động thêm 3 dòng vào khung ở sheet 2, đơn hàng mã ABC01 có 1 sản phẩm thì thêm 1 dòng.

Chốt lại vấn đề là em muốn tạo 1 cái khung để in đơn hàng, nhưng số dòng thể hiện các sản phẩm đc linh hoạt theo thực tế chứ ko phải tạo sẵn để thừa rồi tìm kiếm dữ liệu điền vào sau.
Thật sự là do trình độ kém nên em cũng ko biết phải xử lý cái này kiểu gì luôn. Mong mọi người chỉ bảo giúp em.
Mọi người bớt chút thời gian giúp em vấn đề này với. Cảm ơn
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
Mọi người bớt chút thời gian giúp em vấn đề này với.
Chuyện của bạn không khó; Mà bạn tự làm khó mình bằng cách trộn ô (như [A3]của trang 'In . . "
Tất nhiên để vậy cũng không gây khó lắm, như bạn tự mang ách vào cổ.
Ngoài ra cũng xin góp thêm bạn vài ý, như sau:
a./ Mã đơn hàng của bạn quá dài & không cần thiết dài như vậy
(+) Mã có các ký tự hoàn toàn giống nhau là thừa những kí tự đó; Như vậy nhóm 'DH' & 04 ký tự "-" đang là thừa thải
(+) Nhóm từ 'NAQ' giống hệt nhau biểu thị cái chi? Có nhóm khác như 'NAW' hay 'NHU' không?
b./ Chưa rỏ chổ này: 'T4' có lẽ biểu thị mã ban hàng bỡi tháng 4; vậy tháng 10 bạn sẽ biểu thị làm sao?
Nếu biểu thị 'T10' thì độ dài mã không nhất quán & gây khó khi truy vấn sản lương ngày cụ thể nào đó trong tháng

Nếu là mình thì
1./ (Đương nhiên) bò hết các kí tự trùng nhau, như 'DH" & 4 ký tự ngăn cách
2./ Đơn hàng trong năm 2019 mình sẽ kí hiệu mỗi là kí tự 'H', năm sau sẽ là 'I'
Tháng 1 đến 9 sẽ là kí số tương ứng; tháng 10 sẽ là 'A', tháng 12 sẽ là 'C'
Ngày cũng vậy: ngày 12 sẽ là C, ngày 13 sẽ là 'D', & tiếp tục, . . . .
Tóm lại, mã ĐH của mình sẽ là 'NAQH5E00 cho mã ĐH đầu tiên trong ngày 14 thàng 5 năm nay
Cho dù 1 ngày gần 36*36 đơn hàng cũng vẫn không hề hấn gì đến rối loạn mã.
Nếu 1 ngày chỉ dưới 35 đơn hàng thì ta giảm được thêm 1 kí tự
Nếu trong tháng chỉ ngần ý ĐH thì giam thêm độ dài mã đơn hàng thêm nữa, . . .

Ta quay lại đề bài của bạn: Có thể có nhiều cách giải bằng VBA, như macro hay UDF
Bạn tiêu hóa hết ý tưởng của mình & có phản hồi thì mình sẽ giúp tiếp!
 
Lần chỉnh sửa cuối:

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Chuyện của bạn không khó; Mà bạn tự làm khó mình bằng cách trộn ô (như [A3]của trang 'In . . "
Tất nhiên để vậy cũng không gây khó lắm, như bạn tự mang ách vào cổ.
Ngoài ra cũng xin góp thêm bạn vài ý, như sau:
a./ Mã đơn hàng của bạn quá dài & không cần thiết dài như vậy
(+) Mã có các ký tự hoàn toàn giống nhau là thừa những kí tự đó; Như vậy nhóm 'DH' & 04 ký tự "-" đang là thừa thải
(+) Nhóm từ 'NAQ' giống hệt nhau biểu thị cái chi? Có nhóm khác như 'NAW' hay 'NHU' không?
b./ Chưa rỏ chổ này: 'T4' có lẽ biểu thị mã ban hàng bỡi tháng 4; vậy tháng 10 bạn sẽ biểu thị làm sao?
Nếu biểu thị 'T10' thì độ dài mã không nhất quán & gây khó khi truy vấn sản lương ngày cụ thể nào đó trong tháng

Nếu là mình thì
1./ (Đương nhiên) bò hết các kí tự trùng nhau, như 'DH" & 4 ký tự ngăn cách
2./ Đơn hàng trong năm 2019 mình sẽ kí hiệu mỗi là kí tự 'H', năm sau sẽ là 'I'
Tháng 1 đến 9 sẽ là kí số tương ứng; tháng 10 sẽ là 'A', tháng 12 sẽ là 'C'
Ngày cũng vậy: ngày 12 sẽ là C, ngày 13 sẽ là 'D', & tiếp tục, . . . .
Tóm lại, mã ĐH của mình sẽ là 'NAQH5E00 cho mã ĐH đầu tiên trong ngày 14 thàng 5 năm nay
Cho dù 1 ngày gần 36*36 đơn hàng cũng vẫn không hề hấn gì đến rối loạn mã.
Nếu 1 ngày chỉ dưới 35 đơn hàng thì ta giảm được thêm 1 kí tự
Nếu trong tháng chỉ ngần ý ĐH thì giam thêm độ dài mã đơn hàng thêm nữa, . . .

Ta quay lại đề bài của bạn: Có thể có nhiều cách giải bằng VBA, như macro hay UDF
Bạn tiêu hóa hết ý tưởng của mình & có phản hồi thì mình sẽ giúp tiếp!
Em rất cám ơn anh đã dành thời gian giúp đỡ em xin trả lời các vấn đề như sau:
1> Ở sheet In đơn hàng em phải chia nhỏ các ô rồi merge vào nhau như vậy không có mục đích gì khác ngoài vấn đề trình bày form sao cho đẹp và đúng mẫu của công ty, vì sau khi nhập đơn hàng vào Sheet Đơn Hàng để quản lý thì chuyển sang Sheet in Đơn hàng để in thành phiếu giấy để chuyển đi các phòng ban. Nếu không nhập các ô vào nhau thì thật sự em cũng ko biết làm cách nào để in ra đc 1 cái form giống như em đang làm hiện nay.

2> Mã đơn hàng đang sử dụng hiện nay là quy định của công ty nên thật sự cũng rất khó để thay đổi, thêm nữa nếu đổi thành các kí tự như anh tư vấn thì sẽ lại phải nhớ 1 bảng quy ước xem tháng 4 là chữ gì, 2019 là chữ gì, 2020 là chữ gì. Như vậy sẽ khó cho những người khác nhìn vào, và bắt cả công ty phải học bảng quy ước đó, như vậy hơi khó.
Mã đơn hàng hiện tại của em đang được quy ước gồm những phần sau:
- DH: viết tắt của từ đơn hàng
- NAQ: viết tắt tên của nhân viên, với nhân viên phụ trách đơn hàng khác nhau thì tên viết tắt này sẽ thay đổi
- T4: là tháng tạo đơn hàng, để cho đồng nhất độ dài ký tự thì có thể đổi thành: T04
- 2019: năm tạo đơn hàng
- "-01": là đơn hàng thứ 1 trong tháng, các đơn hàng tiếp theo sẽ là "-02", "-03" ... Do 1 nhân viên 1 tháng hầu như ko có trường hợp phát sinh từ 100 đơn hàng trở lên nên em chỉ định dạng có 2 chữ số thôi.

Mong anh nghĩ cách giúp em.
 
Lần chỉnh sửa cuối:

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
8,387
Được thích
8,147
Điểm
560
Tuổi
62
Nơi ở
Biên Hòa, Đồng Nai
Xin mọi người giúp em với:

File của em có 2 sheet như sau:
- Sheet 1 là sheet Đơn hàng: là sheet tổng hợp các đơn hàng trong 1 năm hoặc nhiều năm. Các đơn hàng khác nhau sẽ có mã đơn hàng khác nhau. Nhưng 1 đơn hàng mà có nhiều sản phẩm thì mỗi sản phẩm lại nằm trên 1 dòng khác nhau và có chung nhau mã đơn hàng.
- Sheet 2 là sheet In đơn hàng: ở sheet này em có tạo 1 khung sẵn các dữ liệu cột cần lấy ra từ sheet Đơn Hàng. Em muốn là khi em nhập 1 mã đơn hàng bất kì thì nó sẽ tự động tìm kiếm trong sheet đơn hàng và điền thêm các dòng vào khung có sẵn.
Ví dụ: Đơn hàng mã ABC03 có 3 sản phẩm thì nó sẽ tự động thêm 3 dòng vào khung ở sheet 2, đơn hàng mã ABC01 có 1 sản phẩm thì thêm 1 dòng.

Chốt lại vấn đề là em muốn tạo 1 cái khung để in đơn hàng, nhưng số dòng thể hiện các sản phẩm đc linh hoạt theo thực tế chứ ko phải tạo sẵn để thừa rồi tìm kiếm dữ liệu điền vào sau.
Thật sự là do trình độ kém nên em cũng ko biết phải xử lý cái này kiểu gì luôn. Mong mọi người chỉ bảo giúp em.
Tôi thiết kế lại cho gọn và đồng bộ, bạn xem thử, nếu thống nhất nội dung thì tôi gán code vào sau.
 

File đính kèm

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Tôi thiết kế lại cho gọn và đồng bộ, bạn xem thử, nếu thống nhất nội dung thì tôi gán code vào sau.
- Em rất cảm ơn anh đã thiết kế lại giúp em. Đây là sai sót của em khi tạo file dữ liệu để nhờ mọi người giúp. Trong thực tế file của em sẽ có thêm 1 sheet Thông tin khách hàng, và các dữ liệu như Tên, số đt, địa chỉ giao hàng sẽ được lấy ở đấy để cho vào sheet In Đơn Hàng.
- Ở Sheet Đơn Hàng cũng vậy khi tạo sẽ nhập mã khách hàng vào và Tên khách hàng có thể tự động lấy bằng hàm Vlookup ( Đây là cách thô sơ mà em vẫn đang dùng :D)
- Về mã KH thì đây cũng là quy định của công ty nên mọi người sẽ thấy nói hơi dài. Mã này gồm các phần:
+ LUHA: tên công ty
+ NAQ: tên nhân viên phụ trách khách hàng đó, cái này sẽ thay đổi với từng nhân viên khác nhau
+ 19: Năm hiện tại
+ 001: số thứ tự khách phát sinh trong năm.

Em xin up lại file để mọi người xem lại và giúp em.
 

File đính kèm

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Anh ơi, code của anh thật tuyệt, nhưng trình của em kém nên chỉ hiểu đc 1 ít không thể sửa để nó chạy theo ý mình được. Nhưng em thấy file của anh hiện có mấy vấn đề không hợp lắm:
1> Anh đang sử dụng 1 sheet tên GPE để lấy Mã đơn hàng vào combo box, nhưng mã khách hàng lại không chính xác theo đơn hàng đc tạo trong sheet Đơn Hàng.
2> Danh sách mã đơn hàng của anh sẽ ko đc tự động update khi thêm đơn hàng mới và có mã đơn hàng mới
3> Nếu được thì em chỉ cần có 1 ô ở bên ngoài cái khung in giống như em đã làm sẵn để nhập mã đơn hàng vào để tìm kiếm thôi, như vậy em nghĩ sẽ đơn giản hơn là dùng combo box
4> Cái này là quan trọng nhất:
1 đơn hàng có thể có 1 - 2 hoặc nhiều sản phẩm, và mỗi sản phẩm đc trình bày trên 1 dòng. Em muốn số dòng sản phẩm đó ở sheet In Đơn Hàng được thể hiện chính xác là 1 - 2 hoặc 3 dòng đó ... KHÔNG CÓ DÒNG TRẮNG THỪA BÊN DƯỚI. Và tiếp nối bên dưới các dòng sản phẩm là dòng Tổng cộng và VAT luôn.

Mong anh giúp em nhé.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
. . . . trình của em kém nên chỉ hiểu đc 1 ít không thể sửa để nó chạy theo ý mình được. Nhưng em thấy (0) file của anh hiện có mấy vấn đề không hợp lắm:
1> Anh đang sử dụng 1 sheet tên GPE để lấy Mã đơn hàng vào combo box, nhưng mã khách hàng lại không chính xác theo đơn hàng đc tạo trong sheet Đơn Hàng.
2> Danh sách mã đơn hàng của anh sẽ ko đc tự động update khi thêm đơn hàng mới và có mã đơn hàng mới
3> Nếu được thì em chỉ cần có 1 ô ở bên ngoài cái khung in giống như em đã làm sẵn để nhập mã đơn hàng vào để tìm kiếm thôi, như vậy em nghĩ sẽ đơn giản hơn là dùng combo box
4> Cái này là quan trọng nhất:
1 đơn hàng có thể có 1 - 2 hoặc nhiều sản phẩm, và mỗi sản phẩm đc trình bày trên 1 dòng. Em muốn số dòng sản phẩm đó ở sheet In Đơn Hàng được thể hiện chính xác là 1 - 2 hoặc 3 dòng đó ... KHÔNG CÓ DÒNG TRẮNG THỪA BÊN DƯỚI. Và tiếp nối bên dưới các dòng sản phẩm là dòng Tổng cộng và VAT luôn.
(0) Có` thể chưa hợp với bạn lúc này; Nhưng nếu thêm 1 công đoạn nữa, như lập danh sách duy nhất từ cột mả ĐH & đem qua cập nhật bên trang 'GPE' thì sao? Chuyện cập nhật này luôn sẩy ra khi ta dóng trang CSDL lại.
(1) Chuyện mã KH chưa chính xác vì mình chỉ hiểu mối liên quan với mã ĐH đến vậy; Nhưng theo mình 2 mã này phải liên hệ hữu cơ với nhau.
Bạn cần cho biết chưa chính xác trong mối quan hệ này chỗ nào để khác phục. Ta phải khắc phục chuyện này, không thể né tránh được.
(2) Xem lại đã viết ở mục (0)
(3) Cái ô bạn muốn sẽ tìm ra mã ĐH, còn mã khách hàng sẽ lấy nơi mô? Lấy bằng cách nào?
(4) Chuyện này đơn giản như đang dõn thôi; bạn khỏi lo: Ẩn các dòng trống giữa các dòng ghi mã hàng & dòng tính tổng là xong. Nhưng để sau đi
Chuyện quan trong theo mình là mối quan hệ giữa mã ĐH & mã KH kia. (4) sẽ giải quyết 1 khi (1) được giải quyết, mình hứa đấy!
 
Lần chỉnh sửa cuối:

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
(0) Có` thể chưa hợp với bạn lúc này; Nhưng nếu thêm 1 công đoạn nữa, như lập danh sách duy nhất từ cột mả ĐH & đem qua cập nhật bên trang 'GPE' thì sao? Chuyện cập nhật này luôn sẩy ra khi ta dóng trang CSDL lại.
(1) Chuyện mã KH chưa chính xác vì mình chỉ hiểu mối liên quan với mã ĐH đến vậy; Nhưng theo mình 2 mã này phải liên hệ hữu cơ với nhau.
Bạn cần cho biết chưa chính xác trong mối quan hệ này chỗ nào để khác phục. Ta phải khắc phục chuyện này, không thể né tránh được.
(2) Xem lại đã viết ở mục (0)
(3) Cái ô bạn muốn sẽ tìm ra mã ĐH, còn mã khách hàng sẽ lấy nơi mô? Lấy bằng cách nào?
(4) Chuyện này đơn giản như đang dõn thôi; bạn khỏi lo: Ẩn các dòng trống giữa các dòng ghi mã hàng & dòng tính tổng là xong. Nhưng để sau đi
Chuyện quan trong theo mình là mối quan hệ giữa mã ĐH & mã KH kia. (4) sẽ giải quyết 1 khi (1) được giải quyết, mình hứa đấy!
Em xin mô tả lại quy trình làm việc như sau để anh hiểu rõ hơn về mối liên kết này nhé:
- Khi nhân viên kinh doanh chốt được đơn hàng với khách và khách đặt hàng thì sẽ bắt đầu làm các thao tác sau:

1> Kiểm tra ở sheet Thông Tin KH xem đã có khách hàng này chưa, nếu chưa có thì tạo Mã KH mới và nhập các thông tin liên quan như: SĐT, địa chỉ ... vào các trường có sẵn. Toàn bộ thao tác này sẽ tạm thời thực hiện hoàn toàn bằng tay. ( có thể sử dụng form nhập liệu và nút tạo mới mã KH bằng VBA, cái này thì nhờ anh hướng dẫn em đã làm đc rồi)

2> Thao tác trên sheet ĐƠN HÀNG sẽ lần lượt như sau:
- Copy mã KH về sheet Đơn Hàng và paste vào ô Mã KH. Sau khi paste Mã KH vào thì có thể sử dụng hàm Vlookup để tự động điền tên KH ở ô bên cạnh
- Tạo Mã Đơn Hàng mới bằng tay hoặc dùng 1 nút để tự tạo mới Mã Đơn Hàng. Em muốn các đơn hàng mới sẽ luôn nằm trên cùng danh sách vì vậy nếu sử dụng nút để tạo Mã Đơn Hàng thì sẽ chỉ phải kiểm tra Mã Đơn Hàng đã tồn tại ở ô A3 - là mã cuối cùng và mới nhất rồi tăng lên 1 đơn vị, đồng thời insert 1 dòng mới lên phía trên.
- Nhập dữ liệu vào các ô liên quan để đầy đủ thông tin đơn hàng

3> Thao tác tên sheet IN ĐƠN HÀNG:
- Sau khi tạo xong đơn hàng thì sẽ copy Mã Đơn Hàng và paste vào 1 vị trí chỉ định ở Sheet In đơn hàng như vậy các thông tin sẽ được tìm kiếm ở 2 Sheet Đơn Hàng và Khách Hàng sẽ tự động điền đầy đủ như sau:
+ Mã Đơn hàng, Mã khách hàng, Tên khách hàng, Ngày đặt hàng, Ngày hẹn giao hàng, Tên sản phẩm, thông tin sản phẩm, ĐVT, Số lượng, Đơn giá, Thành tiền sẽ được lấy dữ liệu từ sheet Đơn Hàng
+ SĐT, Địa chỉ: sẽ được lấy từ sheet Thông tin khách hàng
+ NVKD - tên nhân viên kinh doanh thì nhập tay

- Các ô Tổng, VAT, và Tổng thanh toán sẽ được tự động tính toán khi các thông tin bên trên được điền đầy đủ.

Do lỗi của em không trình bày cụ thể cách hoạt động của file ngay từ đầu dẫn đến nhiều sự lòng vòng không rõ ràng, mong anh thông cảm. Nếu có gì chưa rõ anh post lại để em trả lời nhé.
Trân trọng!
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
Như vậy mã KH không ăn nhập gì với mã ĐH hết; Nhưng như trong file của bạn thì mình mường tượng chúng quan hệ khăn khít với nhau mới nên nổi.
& như vậy mình thấy mã KH thiệt là rối rắm
Nếu là mình thì đơn giản mã KH chì luôn có độ dài là 5, như:
PHP:
Mã KH     Tên KH
NVH00  Nguyễn Việt Hồng
NVH01  Ngô Thị Việt Hà
FFDOO  Đỗ Đình Dương
FJT00  Đinh Trọng
. . .     . . .
Mã như vậy có tính tương tác cao giữa người có mã & người sử dụng mã.
Tìm kiếm cũng tiện', muốn tự động hóa cũng được
. . .
 

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Như vậy mã KH không ăn nhập gì với mã ĐH hết; Nhưng như trong file của bạn thì mình mường tượng chúng quan hệ khăn khít với nhau mới nên nổi.
& như vậy mình thấy mã KH thiệt là rối rắm
Nếu là mình thì đơn giản mã KH chì luôn có độ dài là 5, như:
PHP:
Mã KH     Tên KH
NVH00  Nguyễn Việt Hồng
NVH01  Ngô Thị Việt Hà
FFDOO  Đỗ Đình Dương
FJT00  Đinh Trọng
. . .     . . .
Mã như vậy có tính tương tác cao giữa người có mã & người sử dụng mã.
Tìm kiếm cũng tiện', muốn tự động hóa cũng được
. . .
1> Mã khách hàng được công ty em quy đinh và định dạng theo quy tắc:
- LUHA: đây là tên công ty em, cái này vốn dĩ từ đầu lúc tạo mã em đã góp ý sếp bỏ đi để cho mã KH đỡ dài nhưng sếp ko nhất quyết ko đồng ý.
- NAQ: Tên viết tắt của nhân viên phụ trách khách hàng đó
- 19: là năm khách hàng đó bắt đầu làm việc có phát sinh đơn hàng với công ty
- 001: thứ tự khách hàng đó trong năm.

Với định dạng mã khách hàng như trên, công ty mong muốn khi người quản lý nhìn vào mã khách hàng có thể biết được đó là khách hàng mới hay cũ thông qua số năm, biết được ai đang quản lý khách hàng đó, và biết được trong năm nay nhân viên đó tìm được bao nhiêu khách hàng mới. Cái này là do quy định nên em ko có quyền thay đổi, chỉ góp ý nhưng sếp ko chịu nên cũng đành thôi

2> Trong CSDL thì mã KH sẽ key của bảng khách hàng, vì mã khách hàng sẽ luôn là duy nhất với 1 khách hàng, và ko bị trùng lặp, và từ nó ta có thể truy vấn được các thông tin khác của khách hàng đó để thêm vào các ô liên quan

3> Mã đơn hàng được sử dụng để quản lý đơn hàng, nên đúng như anh nói nó sẽ ko liên quan gì đến mã khách hàng, nhưng trong thực tế thì nó sẽ có sự liên kết với nhau. Vì 1 đơn hàng khi được tạo bắt buộc phải có 1 mã khách hàng trong đó để từ đó ta tìm đc tên KH điền vào sheet Đơn Hàng, và cũng từ mã KH ta sẽ tìm được SĐT, địa chỉ giao hàng để điền vào sheet In Đơn Hàng.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
Vậy bạn lấy macro này chép đè hết lên cái đã có là ẩn được những dòng trống:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
1 If Not Intersect(Target, [J3]) Is Nothing Then
    Dim WF As Object, Rng As Range, sRng As Range
3    ReDim Arr(1 To 9, 1 To 22)
    Dim Rws As Long, W As Integer
5   Dim MyAdd As String
   
    Set WF = Application.WorksheetFunction
7    [B12:w20].Value = Arr()
    Rows("11:20").Hidden = False                '** '
9    With Sheets("DHang")
        Rws = .[A2].CurrentRegion.Rows.Count
11        Set Rng = .[A2].Resize(Rws)
        Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
 13       If sRng Is Nothing Then
            MsgBox "Nothing"
 15       Else
            MyAdd = sRng.Address
  17          Do
                W = W + 1:                                          Arr(W, 1) = W
19                Arr(W, 2) = .Cells(sRng.Row, "F").Value
                Arr(W, 7) = .Cells(sRng.Row, "G").Value
 21               Arr(W, 14) = .Cells(sRng.Row, "H").Value
                Arr(W, 16) = .Cells(sRng.Row, "I").Value
 23               Arr(W, 19) = .Cells(sRng.Row, "J").Value
                Arr(W, 22) = .Cells(sRng.Row, "K").Value
 25               If W = 1 Then
                    [U6].Value = sRng.Offset(, 1).Value:        [U7].Value = sRng.Offset(, 2).Value
27                End If
                Set sRng = Rng.FindNext(sRng)
29            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            If W Then
31                [B12].Resize(W, 22).Value = Arr()
                Rows(W + 12 & ":20").Hidden = True              '** '
33            End If
        End If
35    End With
End If
End Sub
Thêm nữa: Lúc đó mã KH bạn phải nhập trực tiếp vô [F5]
Còn 2 ô dưới liền kế bạn cần gắn trước hàm VLOOKUP() có bẩy lỗi
 
Lần chỉnh sửa cuối:

HuuNghia2703

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
2
Được thích
1
Điểm
15
Tuổi
21
Chào mọi người, em là mem mới học vba, cho e hỏi một câu ạ. Form với dialog sheet khác nhau ntn v ạ, ứng dụng từng loại như sao ạ, e đọc sách r mà chưa hiểu phần này lắm. Cơn mọi người đã quan tâm.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
Excel dialog sheets

Last Updated on Thu, 10 Mar 2016 | Excel 2003 VBA

In Excel 5 and Excel 95, you created a custom dialog box by inserting a special dialog sheet. Excel 97 and later versions still support these dialog sheets, but a much better alternative is available: UserForms. You work with UserForms in the VBE.
When you open a workbook that contains an Excel 5/95 dialog sheet, the dialog sheet appears as a sheet in the workbook.
If, for compatibility purposes, you need to insert an Excel 5/95 dialog sheet, you won't find the command to do so on the Insert menu.The only way to add an Excel 5/95 dialog sheet is to right-click any sheet tab and select Insert from the shortcut menu.Then,in the Insert dialog box, click the MS Excel 5.0 Dialog icon.

[Tìm thấy trên mạng]
 

HuuNghia2703

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
2
Được thích
1
Điểm
15
Tuổi
21
Excel dialog sheets

Last Updated on Thu, 10 Mar 2016 | Excel 2003 VBA

In Excel 5 and Excel 95, you created a custom dialog box by inserting a special dialog sheet. Excel 97 and later versions still support these dialog sheets, but a much better alternative is available: UserForms. You work with UserForms in the VBE.
When you open a workbook that contains an Excel 5/95 dialog sheet, the dialog sheet appears as a sheet in the workbook.
If, for compatibility purposes, you need to insert an Excel 5/95 dialog sheet, you won't find the command to do so on the Insert menu.The only way to add an Excel 5/95 dialog sheet is to right-click any sheet tab and select Insert from the shortcut menu.Then,in the Insert dialog box, click the MS Excel 5.0 Dialog icon.

[Tìm thấy trên mạng]
Cám ơn a đã giúp e ạ, e đã hiểu về vấn đề này, nhưng cho e hỏi thêm là dialogsheet có sử dụng nhiều k ạ, e thấy e dùng userform ổn hơn :D :D
 

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Vậy bạn lấy macro này chép đè hết lên cái đã có là ẩn được những dòng trống:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [J3]) Is Nothing Then
    Dim WF As Object, Rng As Range, sRng As Range
    ReDim Arr(1 To 9, 1 To 22)
    Dim Rws As Long, W As Integer
    Dim MyAdd As String
  
    Set WF = Application.WorksheetFunction
    [B12:w20].Value = Arr()
    Rows("11:20").Hidden = False                '** '
    With Sheets("DHang")
        Rws = .[A2].CurrentRegion.Rows.Count
        Set Rng = .[A2].Resize(Rws)
        Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
        If sRng Is Nothing Then
            MsgBox "Nothing"
        Else
            MyAdd = sRng.Address
            Do
                W = W + 1:                                          Arr(W, 1) = W
                Arr(W, 2) = .Cells(sRng.Row, "F").Value
                Arr(W, 7) = .Cells(sRng.Row, "G").Value
                Arr(W, 14) = .Cells(sRng.Row, "H").Value
                Arr(W, 16) = .Cells(sRng.Row, "I").Value
                Arr(W, 19) = .Cells(sRng.Row, "J").Value
                Arr(W, 22) = .Cells(sRng.Row, "K").Value
                If W = 1 Then
                    [U6].Value = sRng.Offset(, 1).Value:        [U7].Value = sRng.Offset(, 2).Value
                End If
                Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            If W Then
                [B12].Resize(W, 22).Value = Arr()
                Rows(W + 12 & ":20").Hidden = True              '** '
            End If
        End If
    End With
End If
End Sub
Thêm nữa: Lúc đó mã KH bạn phải nhập trực tiếp vô [F5]
Còn 2 ô dưới liền kế bạn cần gắn trước hàm VLOOKUP() có bẩy lỗi
- Anh ơi, nhờ code của anh em đã chỉnh sửa được để nó chạy phù hợp với yêu cầu của em rồi. Em cám ơn anh nhiều
- Nhưng có 1 vấn đề là em đọc code vẫn cứ thấy lơ mơ không hiểu được. Lúc nào rảnh anh giải thích code giúp em với đc ko. Để có gì em còn áp dụng đc với cái khác nữa. Mà anh giải thích luôn giúp em mấy cái tên biến viết tắt của cái gì với ( WF, Rng, sRng,Rws ...) mấy cái đó viết tắt nên em đọc ko hiểu nó là gì cứ tẩu hỏa nhập ma hết :D
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,262
Được thích
10,331
Điểm
1,860
[#253]
D1: Điều kiện nếu bạn mó tới ô [J3] thì thực hiện các lệnh tiếp theo cho đến D36

D2: Khai báo 3 tham biến đối tượng
D3: Khai bào 1 biến mảng gồm 9 dòng & 22 cột.
D4: Khai báo 2 tham biến kiểu số Long & Integer
D5: Khai báo 1 tham biến chứa chuỗi kí tự

D6: Gán đối tượng hàm Excel vô tham biến
D7: Vùng ô [B12:W20] được gán tử mảng (chưa có dữ liệu; Thực chất là xóa trắng vùng dữ liệu)
D8: Cho hiện các dòng từ 11 – 20
D9: Tuyên cáo làm việc với trang tính có tên ‘DHang’
D10 Lấy số dòng của vùng dữ liệu xung quanh [B2] gán vô tham biến
D11: Lấy vùng từ [A2] mở rọng xuống dưới với số dòng vừa xác định gán vô biến đối tương (Range)
D12: Áp dụng phương thức tìm kiếm trị ta vừa nhập (vô ô [J3]), khu vực tìm là vùng dòng 11 vừa xác định
D13: Nếu tìm không thấy thì báo cho biết ở D14
D15 Bằng ngược lại thì thực hiện các lệnh dưới liền kề cho tới D34
D16: Lấy địa chỉ ô vừa tìm thấy gán vô tham biến (kiểu chuỗi)
D17: Tạo vòng lập thực hiện việc tìm kiếm; Vòng lặp kết thúc tại D29
D18: (mệnh đề đầu)Thêm 1 đơn vị cho biến đếm
(mệnh đề sau) Lấy chỉ số này gán ngay vô phần từ đầu tiên bên trái nhất của mảng
D19: Lấy trị trong ô có số dòng trùng với dòng tìm thấy & cột ‘F’ đem gán cho phần tử thuộc dòng W & cột là 2 của mảng
D20:D24: Tương tự D19 tương ứng

D25: Điều kiện khi biến đếm =1 thì thực hiện 2 câu lệnh của dòng tiếp sau
D26 M1: Ô [U6] được gán trị của ô liền kề bên phải ô tìm thấy
M2: Ô U7 thì lại gán tiếp ô bên phải kế tiếp
D27: Kết thúc Đ/K (dòng 25)
D28 Thực hiện phương thức tìm tiếp
D29 Điều kiện kết thúc vòng lặp (là địa chỉ tìm thấy đầu tiên đã được ghi vô biến chuỗi)
D30 Điều kiện là tìm thấy dữ liệu thì thực hiện 2 dòng lệnh tiếp sau ; Kết thúc ĐK ở D33
D31: Gán vùng dữ liệu đang có trên mảng lên trang tính
D32” Ẩn những dòng trống/rỗng dữ liệu trên dòng 21 của trang
 
Lần chỉnh sửa cuối:

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
[#253]
D1: Điều kiện nếu bạn mó tới ô [J3] thì thực hiện các lệnh tiếp theo cho đến D36

D2: Khai báo 3 tham biến đối tượng
D3: Khai bào 1 biến mảng gồm 9 dòng & 22 cột.
D4: Khai báo 2 tham biến kiểu số Long & Integer
D5: Khai báo 1 tham biến chứa chuỗi kí tự

D6: Gán đối tượng hàm Excel vô tham biến
D7: Vùng ô [B12:W20] được gán tử mảng (chưa có dữ liệu; Thực chất là xóa trắng vùng dữ liệu)
D8: Cho hiện các dòng từ 11 – 20
D9: Tuyên cáo làm việc với trang tính có tên ‘DHang’
D10 Lấy số dòng của vùng dữ liệu xung quanh [B2] gán vô tham biến
D11: Lấy vùng từ [A2] mở rọng xuống dưới với số dòng vừa xác định gán vô biến đối tương (Range)
D12: Áp dụng phương thức tìm kiếm trị ta vừa nhập (vô ô [J3]), khu vực tìm là vùng dòng 11 vừa xác định
D13: Nếu tìm không thấy thì báo cho biết ở D14
D15 Bằng ngược lại thì thực hiện các lệnh dưới liền kề cho tới D34
D16: Lấy địa chỉ ô vừa tìm thấy gán vô tham biến (kiểu chuỗi)
D17: Tạo vòng lập thực hiện việc tìm kiếm; Vòng lặp kết thúc tại D29
D18: (mệnh đề đầu)Thêm 1 đơn vị cho biến đếm
(mệnh đề sau) Lấy chỉ số này gán ngay vô phần từ đầu tiên bên trái nhất của mảng
D19: Lấy trị trong ô có số dòng trùng với dòng tìm thấy & cột ‘F’ đem gán cho phần tử thuộc dòng W & cột là 2 của mảng
D20:D24: Tương tự D19 tương ứng

D25: Điều kiện khi biến đếm =1 thì thực hiện 2 câu lệnh của dòng tiếp sau
D26 M1: Ô [U6] được gán trị của ô liền kề bên phải ô tìm thấy
M2: Ô U7 thì lại gán tiếp ô bên phải kế tiếp
D27: Kết thúc Đ/K (dòng 25)
D28 Thực hiện phương thức tìm tiếp
D29 Điều kiện kết thúc vòng lặp (là địa chỉ tìm thấy đầu tiên đã được ghi vô biến chuỗi)
D30 Điều kiện là tìm thấy dữ liệu thì thực hiện 2 dòng lệnh tiếp sau ; Kết thúc ĐK ở D33
D31: Gán vùng dữ liệu đang có trên mảng lên trang tính
D32” Ẩn những dòng trống/rỗng dữ liệu trên dòng 21 của trang
Anh ơi, cái lệnh này có tác dụng gì thế anh
[B12].Resize(W, 22).Value = Arr()
 
Top Bottom