Ẩn hiện sheet theo ý muốn

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

phanngoctrai1981

Thành viên chính thức
Tham gia
16/4/23
Bài viết
60
Được thích
0
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
 

File đính kèm

  • bao cao ngay 1.xlsm
    91.5 KB · Đọc: 11
Sửa lại một chút trên cơ sở code của bạn
Rich (BB code):
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
 
Upvote 0
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
 
Lần chỉnh sửa cuối:
Upvote 0
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:
1685176849374.png

Hình dưới đây cho thấy, bảng tính thứ nhất (chỉ số 1) mang tên là 100, và bảng tính có tên là 1 thì mang chỉ số 2.
1685177243203.png
 
Upvote 0
Sửa lại một chút trên cơ sở code của bạn
Rich (BB code):
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
em cam ơn anh đã đúng ý em rồi, em sửa lại 03 thành 3 là OK.
 
Upvote 0
Upvote 0
Sửa đúng ý mà chưa chắc đã đúng cách. Chọn cách đúng ý mà không nghe chỉ dẫn đúng cách, thì sẽ suốt đời không biết và phải đi hỏi.
Bác "dìm tài" tuổi trẻ quá đi thôi. Làm gì có chuyện "suốt đời đi hỏi".
Người ta sẽ phấn đấu lên bậc cao, bắt lính đi hỏi.
 
Upvote 0
Sửa đúng ý mà chưa chắc đã đúng cách. Chọn cách đúng ý mà không nghe chỉ dẫn đúng cách, thì sẽ suốt đời không biết và phải đi hỏi.
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.
 
Upvote 0
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.

Mã:
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
 
Upvote 0
Web KT

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

Back
Top Bottom