Tổng hợp các Code hiện 1 NHÓM SHEET (2 người xem)

Liên hệ QC

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

hoangtrong_vbnd

Thành viên hoạt động
Tham gia
14/1/11
Bài viết
156
Được thích
7
Giới tính
Nam
Vài ngày trước e có lập mây topic về cách hiện 1 nhóm sheet cùng chủ đề trong file làm việc excel ( file có nhiều chủ đề làm việc khác nhau). Nay e lập topic này để tổng hợp lại và tìm thêm các ý tưởng mới về cách hiện 1 nhóm sheet
Hôm trước bác VetMini có giúp em đoạn code này:
Option Explicit
Const NAMESTRDELIM = "|"

Sub AnSheets()
Const SHEETCHU = "DieuKhien" ' tên sheet chủ, bạn sửa tên sheet chủ ở đây
Const VUNGTENSHEETS = "A1:A10" ' vùng chứa tên các sheet cần chừa lại, không ẩn. Nếu cần sửa thì sửa ở đây

Dim rg As Range

Dim danhSach As String ' lap danh sach cac sheet se khong bi an
danhSach = SHEETCHU ' luon luon chua sheet chu khong an

For Each rg In Sheets(SHEETCHU).Range(VUNGTENSHEETS)
If rg.Value <> "" Then
danhSach = danhSach & NAMESTRDELIM & Trim(rg.Value)
End If
Next

danhSach = NAMESTRDELIM & danhSach & NAMESTRDELIM

AnChuaLaiSheets danhSach
End Sub


Sub AnChuaLaiSheets(ByVal danhSach As String)
' an tat ca cac sheet, tru nhom sheet trong danhSach
danhSach = LCase(danhSach)
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Visible = (InStr(danhSach, LCase(NAMESTRDELIM & sh.Name & NAMESTRDELIM)) > 0)
Next End Sub
Để có bạn nào đang có ý định tìm hiểu về chủ đề này giống mình, hoặc có bác nào có ý tưởng mới thì chia sẻ luôn nhé.
Thanks các bác quan tâm !!!
 
Bạn muốn bàn về code trên thì tôi sẵn tiện giải thích về cách viết code (coding style) của tôi cho các bạn dễ sửa, và nếu sử dụng thì tránh nhầm lẫn.

1. Tôi luôn luôn cẩn thận với chữ hoa, chữ thường. Lúc khai báo (dim hoặc const) thì đặt tên đàng hoàng. Lúc sử dụng thì gõ chữ thường. Nếu gõ đúng thì VBE tự động đổi nó ra hoa nếu có. Như vậy, gõ xong chỉ cần nhìn lại thấy nó không đổi là biết gõ sai.

2. Tôi luôn luôn đặt hằng số (Const) là từ viết hoa tất cả mọi ký tự. Các biến khác thì theo quy luật lạc đà (camel), tên bắt đầu bằng chứ thường, cứ tới mỗi từ khác thì viết hoa ký tự - vd, dấnhch, viết hoa ký tự S. Riêng hàm và sub thì viết hoa cả ký tự đầu tiên.

3. Công việc ẩn các sheets là một công việc chỉ cần biết tên các sheet cần chừa lại. Như vậy nó là công việc đọc lập với các công việc khác. Tôi cho vào hàm riêng. Như vậy nó đọc lập với code tìm những sheets cần chừa lại.

4. Ký tự ngăn giữa các nhóm từ (NAMESTRDELIM) là ký tự chung. Như vậyk đặt nó làm hằng toàn cục.

5. Tên của sheet chủ và vùng cần tham khảo để lấy tên các sheets cần chừa lại là những trị có thể thay đổi tuỳ theo trường hợp cho nên xác định chúng trong các hằng, và đặt ngay đầu sub. Như vậy chỉ cần thuật toán giống thì ta có thể cóp nguyên cả code vào, sửa trị hằng là chạy được. Lưu ý là tôi rất ít khi dùng kiểu viết tắt với lệnh evaluate ([A1:A10]), vì cách này tuy viết code gọn không dặt theo hằng số được.

6. Code trên là code viết vội. Không có các phần dọn rác, mở đóng screen update, nothing các objects, vv...

Và cũng như trong thớt kia, tôi có nói rằng có hai giải thuật hoàn hảo hơn cho truờng hợp này:

(A) cho một vòng lặp duyệt hết tên các sheets trong workbook, lập lên một form với check boxes. Người dùng sẽ tick vào các sheet cần chừa lại. Xong click button submit trong form.

(B) chia các sheets ra thành nhiều nhóm, và dùng một drop down list để người dùng chọn nhóm.

Lưu ý: cách viết code trên là sì tin của cá nhân. Tôi không hề nói nó hay hơn các sì tin khác.
 
Upvote 0
và đây là một đoạn code khác mình sưu tập được, chạy cũng khá ổn các bạn có thể tham khảo
Sub Group1_Click()
Dim WS As Worksheet
MySheets = Array("D110", "D120")
Call Hide_Show(MySheets)
End Sub

Sub Group2_Click()
MySheets = Array("D210", "D220")
Call Hide_Show(MySheets)
End Sub

Sub Group3_Click()
MySheets = Array("G110", "G120")
Call Hide_Show(MySheets)
End Sub

Sub Hide_Show(MySheets)
Dim WS As Worksheet
Application.ScreenUpdating = False
For Each WS In Worksheets(MySheets)
X = Application.Match(WS.Name, MySheets, 0)
If WS.Visible = False Then
WS.Visible = True
Else
WS.Visible = False
End If
Next
Worksheets(MySheets(UBound(MySheets))).Activate
Application.ScreenUpdating = True
End Sub
 
Upvote 0

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

Back
Top Bottom