Ẩn hiện sheet theo ý muốn

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Em cảm ơn

Em chao các Anh/Chị
E bị kẹt chổ code nay ty mong các Anh xem giúp.
Vidụ: em muốn xóa sheet 27 thì code lại xóa sheet 26. em tìm mãi mà không biết lý do, mong Anh chị xem giúp. file đinh kèm ạ.
Em cảm ơn

Sửa lại một chút trên cơ sở code của bạn

Sub AnHien_Sheet()
Dim sheetname As String
Dim lr As Long
    lr = Sheets("Setting").Cells(Rows.Count, 1).End(xlUp).Row

Dim sodong As Long
'An/hien sheet
For sodong = 2 To lr
    sheetname = Sheets("Setting").Range("A" & sodong).Value
    On Error Resume Next
    'Mo an tat ca cac sheet
    Worksheets(sheetname).Visible = xlSheetVisible
    'An sheet duoc danh dau
    If Sheets("Setting").Range("B" & sodong).Value = "x" Then
        Worksheets(sheetname).Visible = xlSheetHidden
    End If
Next sodong

Sheets("Setting").Activate
End Sub

www.giaiphapexcel.com/diendan/threads/%E1%BA%A8n-hi%E1%BB%87n-sheet-theo-%C3%BD-mu%E1%BB%91n.165433/#post-1105598

Xây dựng Lương 3P, KPI cho Doanh nghiệp
Khóa học SprinGO phù hợp

Xây dựng Lương 3P, KPI cho Doanh nghiệp

Làm thế nào để trả lương cho nhân viên chính xác nhất? Đây là một trong những câu hỏi khó trong quản trị nhân...

Xem khóa học
★★★★★ 5 ★ 1 👤 2 ▥ 0
Quảng cáo

Bạn nên đọc

2 Responses

  1. hands says:

    Sửa lại một chút trên cơ sở code của bạn

    Sub AnHien_Sheet()
    Dim sheetname As String
    Dim lr As Long
        lr = Sheets("Setting").Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim sodong As Long
    'An/hien sheet
    For sodong = 2 To lr
        sheetname = Sheets("Setting").Range("A" & sodong).Value
        On Error Resume Next
        'Mo an tat ca cac sheet
        Worksheets(sheetname).Visible = xlSheetVisible
        'An sheet duoc danh dau
        If Sheets("Setting").Range("B" & sodong).Value = "x" Then
            Worksheets(sheetname).Visible = xlSheetHidden
        End If
    Next sodong
    
    Sheets("Setting").Activate
    End Sub

    Sửa thế này vẫn chưa ẩn, hiện được sheet "03"

    Theo bạn thì Worksheets(Sheets("Setting").Range("A" & sodong).Value) sẽ cho sheet nào?
    Cụ thể là Worksheets(Sheets("Setting").Range("A2").Value) với A2 =1 sẽ ra
    Worksheets(1)
    Muốn biết thì thêm câu lệnh sau liền sau câu lệnh For
    Debug.Print Worksheets(Sheets("Setting").Range("A" & sodong).Value).Name

    Khi rút ra kết luận thì phải biết nguyên nhân:
    Worksheets(a) với a là number sẽ cho sheet có thứ tự a từ trái qua phải
    Worksheets(a) với a là text sẽ cho sheet … (?)

    Biện pháp là gì? Chuyển value thành dạng text.

    Cuối cùng: cột A cũng phải chứa giá trị text. vì 3 khác với 03

    Vọc vẹo với ba cái mớ bảng tính thì tối thiểu cũng phải biết cách truy vấn chúng.

    Các bảng tính được chứa trong một collection gọi là WorkSheets. Lưu ý rằng GPE ở đây thường dùng collection Sheets; collection này bao gồm WorkSheets nhưng cũng bao gồm cả ChartSheets. Vì vậy, truy vấn bảng tính từ WorkSheets chính xác hơn.

    Collection WorkSheets cho phép truy vấn phần tử của nó (tức là bảng tính) theo hai phương cách:
    1. Phương pháp mặc định của collection: tức là theo chỉ số (giống như mảng 1 chiều). Chỉ số bắt buộc phải là một số nguyên.
    Ví dụ: WorkSheets(5) là sheet thứ 5 kể từ bên trái.
    2. Phương pháp chỉ định rõ rệt bằng tên sheet. Tên sheet bắt buộc phải là một chuỗi (string).
    Ví dụ: WorkSheets("BangA") là sheet mang tên là BangA.
    Làm vuệc với collectioon worksheets thì bắt buộc biết phân biệt hai kiểu truy vấn này. Không thể lẫn lộn.

    Hình dưới đây minh họa trường hợp bảng tính thứ 5 mang tên "BangA", và đối lại, bảng tính mang tên "BangA" mang chỉ số là 5:
    6831

  2. hands says:

    Vọc vẹo với ba cái mớ bảng tính thì tối thiểu cũng phải biết cách truy vấn chúng.

    Các bảng tính được chứa trong một collection gọi là WorkSheets. Lưu ý rằng GPE ở đây thường dùng collection Sheets; collection này bao gồm WorkSheets nhưng cũng bao gồm cả ChartSheets. Vì vậy, truy vấn bảng tính từ WorkSheets chính xác hơn.

    Collection WorkSheets cho phép truy vấn phần tử của nó (tức là bảng tính) theo hai phương cách:
    1. Phương pháp mặc định của collection: tức là theo chỉ số (giống như mảng 1 chiều). Chỉ số bắt buộc phải là một số nguyên.
    Ví dụ: WorkSheets(5) là sheet thứ 5 kể từ bên trái.
    2. Phương pháp chỉ định rõ rệt bằng tên sheet. Tên sheet bắt buộc phải là một chuỗi (string).
    Ví dụ: WorkSheets("BangA") là sheet mang tên là BangA.
    Làm vuệc với collectioon worksheets thì bắt buộc biết phân biệt hai kiểu truy vấn này. Không thể lẫn lộn.

    Hình dưới đây minh họa trường hợp bảng tính thứ 5 mang tên "BangA", và đối lại, bảng tính mang tên "BangA" mang chỉ số là 5:
    6831

    không phải là em không nghe anh gợi ý, mà thực tế là em chưa tìm ra gợi ý nào như gợi ý của anh để tham khảo thực hiện theo.

    Chỉ cần bạn định dạng cột A là TEXT trước khi chạy code "SheetList" hoặc định dạng trong code, thì khi chạy code " AnHien_Sheet" sẽ đúng.

    Sub SheetList()
    Dim ws As Worksheet
    Dim lr As Long
        lr = 2
       Columns("A:A").NumberFormat = "@"' Thêm dòng này
      For Each ws In ThisWorkbook.Worksheets
        Sheets("Setting").Range("A" & lr).Value = ws.Name
          lr = lr + 1
      Next ws
    End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm