Code làm ẩn hoặc hiện sheet (1 người xem)

  • Thread starter Thread starter NH_DK
  • Ngày gửi Ngày gửi
Liên hệ QC

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

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,203
Nghề nghiệp
Kế toán
Em có 1 file ví dụ đang làm cho ẩn sheet. File hiện tại em mới chỉ có 3 sheet thôi. Xin cho em hỏi thêm nếu em có nhiều sheet hơn nữa thì code của em phải viết như thế nào cho ngắn? Chứ hiện tại em đang phải viết:
PHP:
Sub bang1()
    Sheet1.Visible = xlSheetVisible
    Sheet2.Visible = xlSheetVeryHidden
    Sheet3.Visible = xlSheetVeryHidden
End Sub
Sub bang2()
    Sheet2.Visible = xlSheetVisible
    Sheet1.Visible = xlSheetVeryHidden
    Sheet3.Visible = xlSheetVeryHidden
End Sub
Sub bang3()
    Sheet3.Visible = xlSheetVisible
    Sheet1.Visible = xlSheetVeryHidden
    Sheet2.Visible = xlSheetVeryHidden
End Sub
'............
'Neu con sheet thi lai viet nhu the nua!
Như vậy sẽ rất dài. Có cách nào viết tổng hợp không?
 

File đính kèm

Lần chỉnh sửa cuối:
Em có 1 file ví dụ đang làm cho ẩn sheet. File hiện tại em mới chỉ có 3 sheet thôi. Xin cho em hỏi thêm nếu em có nhiều sheet hơn nữa thì code của em phải viết như thế nào cho ngắn? Chứ hiện tại em đang phải viết:
PHP:
Sub bang1()
    Sheet1.Visible = xlSheetVisible
    Sheet2.Visible = xlSheetVeryHidden
    Sheet3.Visible = xlSheetVeryHidden
End Sub
Sub bang2()
    Sheet2.Visible = xlSheetVisible
    Sheet1.Visible = xlSheetVeryHidden
    Sheet3.Visible = xlSheetVeryHidden
End Sub
Sub bang3()
    Sheet3.Visible = xlSheetVisible
    Sheet1.Visible = xlSheetVeryHidden
    Sheet2.Visible = xlSheetVeryHidden
End Sub
'............
'Neu con sheet thi lai viet nhu the nua!
Như vậy sẽ rất dài. Có cách nào viết tổng hợp không?

Ngọc quên dùng For Each...Next à?

Mã:
Sub ShowSheet(ByVal SheetForViewing As String)
    Dim wsh As Worksheet
    SheetForViewing = LCase(SheetForViewing)
    For Each wsh In ThisWorkbook.Sheets
        If LCase(wsh.Name) = SheetForViewing Then
            wsh.Visible = xlSheetVisible
        Else
            wsh.Visible = xlSheetVeryHidden
        End If
    Next
End Sub
 
Upvote 0
Ngọc quên dùng For Each...Next à?

Mã:
Sub ShowSheet(ByVal SheetForViewing As String)
    Dim wsh As Worksheet
    SheetForViewing = LCase(SheetForViewing)
    For Each wsh In ThisWorkbook.Sheets
        If LCase(wsh.Name) = SheetForViewing Then
            wsh.Visible = xlSheetVisible
        Else
            wsh.Visible = xlSheetVeryHidden
        End If
    Next
End Sub
Code này chưa chắc đúng đâu Tuân à!
Ví dụ trong Workbook có 6 sheet, tất cả đều ẩn, ngoại trừ sheet3
Giờ ta viết thêm code nữa để hiện sheet5, ta viết như sau:
PHP:
Sub Test()
  ShowSheet "Sheet5"
End Sub
Sẽ lỗi ngay lập tức. Lý do vì Sheet3 bị cho ẩn trước khi sheet5 hiện ra. Nguyên tắc phải có ít nhất 1 sheet được hiện cơ mà
Chính vì lẽ đó, ta phải hiện sheet cần hiện trước khi ẩn các sheet khác
Code sửa lại thế này:
PHP:
Sub ShowSheet(ByVal SheetForViewing As String)
  Dim wsh As Worksheet
  On Error Resume Next
  Sheets(SheetForViewing).Visible = xlSheetVisible
  For Each wsh In ThisWorkbook.Sheets
    If LCase(wsh.Name) <> LCase(SheetForViewing) Then
      If wsh.Visible = xlSheetVisible Then wsh.Visible = xlSheetVeryHidden
    End If
  Next
End Sub
 
Upvote 0
Em gà mờ nên nhờ các anh chị giúp đỡ. Khi ô A1 của sheet đó có giá trị là abcd chẳng hạn thì sheet đó hiện lên, còn không thì ẩn đi. Vậy code như thế nào? Xin cảm ơn các anh chị!
 
Upvote 0

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom