Tạo khung viền ô theo số trong ô (4 người xem)

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

Nguyễn Xuân Sơn

Thành viên thường trực
Tham gia
23/4/07
Bài viết
344
Được thích
220
Chào cả nhà. Lâu lắm mới quay lại 4r. Mình đang loay hoay với một bài toán sau: Trong một vùng có nhiều ô. Mình muốn viết một đoạn mã mà trong ô đó: Nếu chỉ số 1 thì kẻ viền ở đáy. Nếu chỉ số 2 thì kẻ viền đáy và viền đứng bên trái. Nếu số 3 thì kẻ viền đáy, viền đứng bên trái và viền ngang trên. Nếu số 4 thì kẻ viền xung quanh. Nếu số 5 thì kẻ viền xung quanh và kẻ một đường chéo ô đó.
Vậy bạn nào xử lý được bài toán này hãy giúp tôi với nhé.
Xin trân trọng cảm ơn!
 
Chào cả nhà. Lâu lắm mới quay lại 4r. Mình đang loay hoay với một bài toán sau: Trong một vùng có nhiều ô. Mình muốn viết một đoạn mã mà trong ô đó: Nếu chỉ số 1 thì kẻ viền ở đáy. Nếu chỉ số 2 thì kẻ viền đáy và viền đứng bên trái. Nếu số 3 thì kẻ viền đáy, viền đứng bên trái và viền ngang trên. Nếu số 4 thì kẻ viền xung quanh. Nếu số 5 thì kẻ viền xung quanh và kẻ một đường chéo ô đó.
Vậy bạn nào xử lý được bài toán này hãy giúp tôi với nhé.
Xin trân trọng cảm ơn!
Tham khảo code trong file đính kèm
 

File đính kèm

Upvote 0
Chào cả nhà. Lâu lắm mới quay lại 4r. Mình đang loay hoay với một bài toán sau: Trong một vùng có nhiều ô. Mình muốn viết một đoạn mã mà trong ô đó: Nếu chỉ số 1 thì kẻ viền ở đáy. Nếu chỉ số 2 thì kẻ viền đáy và viền đứng bên trái. Nếu số 3 thì kẻ viền đáy, viền đứng bên trái và viền ngang trên. Nếu số 4 thì kẻ viền xung quanh. Nếu số 5 thì kẻ viền xung quanh và kẻ một đường chéo ô đó.
Vậy bạn nào xử lý được bài toán này hãy giúp tôi với nhé.
Xin trân trọng cảm ơn!
Hà hà. Bài toán khá rẻ và tất nhiên là có đáp án tức thì
 
Upvote 0
Chỉ cần conditional formating thôi

1769784786635.png
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Làm thành hàm cho nó cẩn thẩn. FIle cung cấp cho chủ thớt 3 hàm.
1. AllBorder không sử dụng Settimer và killtimer
2. mBorder có sử dụng settimer và killtimer. đáp ứng các yêu cầu của chủ thớt và cẩn thận thêm 1 số 0 để xóa mọi đường kẻ
3. zBorders có sử dụng settimer và killtimer định dạng tùy ý cả mầu sắc, đường nét độ dầy, loại đường ở tất cả các phía. Cái này chủ thớt phải tự tìm hiểu để đưa ra được lựa chọn mong muốn
P/s Em không thành thạo settimer và killtimer lắm. nhưng test mấy chục lần ko thấy văng tí nào chắc là ổn!
 

File đính kèm

Upvote 0
Làm thành hàm cho nó cẩn thẩn. FIle cung cấp cho chủ thớt 3 hàm.
1. AllBorder không sử dụng Settimer và killtimer
2. mBorder có sử dụng settimer và killtimer. đáp ứng các yêu cầu của chủ thớt và cẩn thận thêm 1 số 0 để xóa mọi đường kẻ
3. zBorders có sử dụng settimer và killtimer định dạng tùy ý cả mầu sắc, đường nét độ dầy, loại đường ở tất cả các phía. Cái này chủ thớt phải tự tìm hiểu để đưa ra được lựa chọn mong muốn
P/s Em không thành thạo settimer và killtimer lắm. nhưng test mấy chục lần ko thấy văng tí nào chắc là ổn!
Dùng settimer và killtimer để làm gì vậy bạn? Thực tình là tôi có thấy mấy lần nhưng không hiểu
 
Upvote 0
Các hàm tự tạo thông thường (UDF) chỉ trả về giá trị kết quả tại chính ô đó. Excel nghiêm cấm việc trả về các định dạng, thay đổi giá trị của ô khác, xóa thêm sheet.....
Để lách luật trên, có 1 số kỹ thuật mà các anh chị trong diễn đàn hay dùng. Một trong những kỹ thuật tiêu biểu mà làm hết được các yêu cầu bị cấm trên là dùng kỹ thuật "Thực thi trễ"
Cái này em thấy tác giả Hesanbi thực hiện nhiều. Buổi sáng khi viết hàm cho chủ thớt (hàm AllBorder) tô viền toàn bộ ô thì được nhưng khi xóa đường viên hoặc chỉ vẽ 1 phần đường viền thì không được. Khi đó em mới thử viết kiểu của Hesanbi. e thấy quy luật như sau:
1. ở hàm chính: thay vì thực hiện lệnh luôn thì chỉ gọi Settimer với độ chễ 10 mili giây sau đó chạy Sub call back ở sau
2. Trong 10ms đó excel thực hiện quy trình tính toán và mở khóa giao diện
3. Hết 10ms window thực hiện sub Call back. Lúc này exel đã tính toán xong, còn rảnh nên code vba ở sub call back lúc này được phép thay đổi định dạng (kẻ khung, tô màu....) thoải mái mà không bị chặn.

Note1: Việc dùng settimer rất nguy hiểm vì tạo ra một vòng lặp liên tục theo chu kỳ (giống như kim giây đồng hồ, cứ mỗi X ms nó gõ 1 cái). Do đó cặp Settimer và Killtimer luôn đi kèm với nhau kiểu tạo vòng lặp và xóa vòng lặp đó. Em thấy tác giả Hesanbi tạo luôn Killtimer ở đầu thủ tục call back để thủ tục không chạy lại mỗi 10s 1 lần. (gọi liên tục như thế excel sẽ đơ lag, treo ......)

P/s đấy là em rút ra sau nhiều lần đọc code của tác giả trên, còn cần chia sẻ chi tiết phải chờ tác giả chia sẻ
Dùng settimer và killtimer để làm gì vậy bạn? Thực tình là tôi có thấy mấy lần nhưng không hiểu
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom