Xin hướng dẫn cách làm hoặc code ẩn /hiện sheet

Liên hệ QC

Bill group

Thành viên mới
Tham gia
6/8/17
Bài viết
37
Được thích
0
Em có nhu cầu thế này: Trong file của em có 15 sheet được đặt tên 1- 15. ở sheet tông hợp em có 3 ô lựa chon A; B; C.
Em muốn nếu chọn A thì hiện sheet từ 1-5 các sheet còn lại ẩn; B thì 6-10; C thì 11-15... ví dụ thế.
Mong các bác hướng dẫn cách làm ... vì em muốn ẩn bớt đi cho đơ rối.
 
Em có nhu cầu thế này: Trong file của em có 15 sheet được đặt tên 1- 15. ở sheet tông hợp em có 3 ô lựa chon A; B; C.
Em muốn nếu chọn A thì hiện sheet từ 1-5 các sheet còn lại ẩn; B thì 6-10; C thì 11-15... ví dụ thế.
Mong các bác hướng dẫn cách làm ... vì em muốn ẩn bớt đi cho đơ rối.
Đưa cái file của bạn lên đây, để giúp xong lại áp dụng vào file bạn không được nửa mất công.
 
Upvote 0
Mình gửi kèm file mong được bác giúp
 

File đính kèm

  • TONG HOP.xlsx
    15.6 KB · Đọc: 15
Upvote 0
Mã:
Private Const SHDELIM = ";"
Private Const GROUPA = "Sheet1;Sheet2;Sheet3;Sheet4;Sheet5"
Private Const GROUPB = "Sheet6;Sheet7;Sheet8;Sheet9;Sheet10"
Private Const GROUPC = "Sheet11;Sheet12;Sheet13;Sheet14;Sheet15"

Sub GiDo() ' tuỳ theo muốn thực hiện theo kiểu nào mà đặt sub thuôc loại nào
Select Case Sheets("TongHop").Range("A1").Value ' tuỳ theo muón chọn ô nào
  Case "A" ' hiện nhóm A, ẩn nhóm B, C
    HienGroup GROUPA, True
    HienGroup GROUPB & SHDELIM & GROUPC, False
  Case "B" ' hiện nhóm B, ẩn nhóm A, C
    HienGroup GROUPB, True
    HienGroup GROUPA & SHDELIM & GROUPC, False
  Case "C" ' hiện nhóm C, ẩn nhómAA, B
    HienGroup GROUPC, True
    HienGroup GROUPA & SHDELIM & GROUPB, False
  Case Else
    HienGroup GROUPA & SHDELIM & GROUPB & SHDELIM & GROUPC, True
End Select
End Sub

Sub HienGroup(lst As String, hien As Boolean) ' code ẩn/hiện các sheets có tên trong lst
Dim nm
For Each nm In Split(lst, SHDELIM)
  Sheets(nm).Vísible = hien
Next nm
End Sub
 
Upvote 0
Bác làm luôn vao file giúp em với. em đang mò code của bác mà vẫn chưa chạy được
 
Upvote 0
Mình gửi kèm file mong được bác giúp
Bạn dùng code này cho sheet TH.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D4" Then
    Dim i As Integer, k As Integer
    k = CInt((AscW(Right(Target.Value, 1)) - 65) * 5 + 1)
    For i = 1 To 15
        Sheets(CStr(i)).Visible = (i >= k) And (i <= k + 4)
    Next i
End If
End Sub
 
Upvote 0
Bạn dùng code này cho sheet TH.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D4" Then
    Dim i As Integer, k As Integer
    k = CInt((AscW(Right(Target.Value, 1)) - 65) * 5 + 1)
    For i = 1 To 15
        Sheets(CStr(i)).Visible = (i >= k) And (i <= k + 4)
    Next i
End If
End Sub
Cám ơn bác nhiều file đã chạy được rồi!
Nhưng có vấn đề là em đặt tên sheet từ 1-15 cho nhanh thôi
Chứ các sheet của em tên lung tung ý em muốn làm thế nào để em chủ động xử lý được sheet nào ở trong nhóm nào: Ví dụ bác gán tên sheet luôn đi. sau đó em chỉ bắt trước để sửa lại code của bác thôi
Bài đã được tự động gộp:

Mã:
Private Const SHDELIM = ";"
Private Const GROUPA = "Sheet1;Sheet2;Sheet3;Sheet4;Sheet5"
Private Const GROUPB = "Sheet6;Sheet7;Sheet8;Sheet9;Sheet10"
Private Const GROUPC = "Sheet11;Sheet12;Sheet13;Sheet14;Sheet15"

Sub GiDo() ' tuỳ theo muốn thực hiện theo kiểu nào mà đặt sub thuôc loại nào
Select Case Sheets("TongHop").Range("A1").Value ' tuỳ theo muón chọn ô nào
  Case "A" ' hiện nhóm A, ẩn nhóm B, C
    HienGroup GROUPA, True
    HienGroup GROUPB & SHDELIM & GROUPC, False
  Case "B" ' hiện nhóm B, ẩn nhóm A, C
    HienGroup GROUPB, True
    HienGroup GROUPA & SHDELIM & GROUPC, False
  Case "C" ' hiện nhóm C, ẩn nhómAA, B
    HienGroup GROUPC, True
    HienGroup GROUPA & SHDELIM & GROUPB, False
  Case Else
    HienGroup GROUPA & SHDELIM & GROUPB & SHDELIM & GROUPC, True
End Select
End Sub

Sub HienGroup(lst As String, hien As Boolean) ' code ẩn/hiện các sheets có tên trong lst
Dim nm
For Each nm In Split(lst, SHDELIM)
  Sheets(nm).Vísible = hien
Next nm
End Sub
Em sửa lại code của bác như này vào file đính kèm của em. sao nó ko chạy được nhỉ. Bác xem giúp em thế nào
Private Const SHDELIM = ";"
Private Const GROUPA = "1;2;3;4;5"
Private Const GROUPB = "6;7;8;9;10"
Private Const GROUPC = "11;12;13;14;15"

Sub GiDo()
Select Case Sheets("TH").Range("D4").Value
Case "A"
HienGroup GROUPA, True
HienGroup GROUPB & SHDELIM & GROUPC, False
Case "B"
HienGroup GROUPB, True
HienGroup GROUPA & SHDELIM & GROUPC, False
Case "C"
HienGroup GROUPC, True
HienGroup GROUPA & SHDELIM & GROUPB, False
Case Else
HienGroup GROUPA & SHDELIM & GROUPB & SHDELIM & GROUPC, True
End Select
End Sub

Sub HienGroup(lst As String, hien As Boolean)
Dim nm
For Each nm In Split(lst, SHDELIM)
Sheets(nm).Vísible = hien
Next nm
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng có vấn đề là em đặt tên sheet từ 1-15 cho nhanh thôi
Chứ các sheet của em tên lung tung ý em muốn làm thế nào để em chủ động xử lý được sheet nào ở trong nhóm nào: Ví dụ bác gán tên sheet luôn đi. sau đó em chỉ bắt trước để sửa lại code của bác thôi
Vì điều này tôi mới có bài viết #2. Lẽ dĩ nhiên bạn sẽ biết điều này chứ, muốn học hỏi thì nên đặt tên sheet ngay từ đầu. Bản thân bạn còn muốn làm cho nhanh thì tôi cũng muốn giúp cho nhanh. các tên Sheet khác nhau thì tham khảo bài #4 của @VetMini
 
Upvote 0
Cám ơn bác nhiều file đã chạy được rồi!
Nhưng có vấn đề là em đặt tên sheet từ 1-15 cho nhanh thôi
Chứ các sheet của em tên lung tung ý em muốn làm thế nào để em chủ động xử lý được sheet nào ở trong nhóm nào: Ví dụ bác gán tên sheet luôn đi. sau đó em chỉ bắt trước để sửa lại code của bác thôi
Bài đã được tự động gộp:


Em sửa lại code của bác như này vào file đính kèm của em. sao nó ko chạy được nhỉ. Bác xem giúp em thế nào
Private Const SHDELIM = ";"
Private Const GROUPA = "1;2;3;4;5"
Private Const GROUPB = "6;7;8;9;10"
Private Const GROUPC = "11;12;13;14;15"

Sub GiDo()
Select Case Sheets("TH").Range("D4").Value
Case "A"
HienGroup GROUPA, True
HienGroup GROUPB & SHDELIM & GROUPC, False
Case "B"
HienGroup GROUPB, True
HienGroup GROUPA & SHDELIM & GROUPC, False
Case "C"
HienGroup GROUPC, True
HienGroup GROUPA & SHDELIM & GROUPB, False
Case Else
HienGroup GROUPA & SHDELIM & GROUPB & SHDELIM & GROUPC, True
End Select
End Sub

Sub HienGroup(lst As String, hien As Boolean)
Dim nm
For Each nm In Split(lst, SHDELIM)
Sheets(nm).Vísible = hien
Next nm
End Sub
File bạn không muốn đưa lên.Mà muốn người khác viết cho bạn thế nào đây.Vậy bạn phải tự viết code rồi.Mình ví dụ bạn muốn ẩn sheets thì bạn tìm hiểu câu lệnh ẩn sheets là câu nào.Rồi viết cho từng sheets muốn ẩn là xong.Có thế thôi mà.Hoặc recode macro cũng được code nhé bạn.
 
Upvote 0
1. Người hỏi để học thì thường đưa ra vấn đề cụ thể, viết dễ hiểu.
2. Người hỏi để làm thứ gì đó thì thường thiếu kiến thức nhưng cũng không muốn học. Vấn đề đưa ra thường mơ hồ, khó hiểu, bản thân họ nôn nóng muốn
xong cái này để áp dụng ngay vào công việc của họ, nhưng không ai biết công việc của họ là gì, do đó làm mất thời gian của người khác.
Bạn ẩn sheet thì bạn đứng ở đâu để ẩn. Bạn không thể đứng ở sheet 1 và ẩn sheet 1.
Bạn muốn biết lệnh ẩn sheet là gì thì hỏi trực tiếp lệnh ẩn sheet là gì, tại sao phải đưa ra ví dụ chọn A thì sheet 1-> sheet 5 ẩn. Chọn B thì sheet 6 -> 10 ẩn.
Trong tương lai nếu cái này thay đổi thì lại phải code lại ah?

Mục đích của việc này là gì? Kịch bản của việc này là gì: Muốn làm gì, làm như thế nào?
Input của việc này là gì? file như thế nào, hình thù ra sao, có gì đặc biệt không, có chú ý gì về tên sheet không?
Output: ẩn sheet.
 
Upvote 0
Web KT
Back
Top Bottom