Giúp code ẩn nhiều sheet cùng 1 lúc (2 người xem)

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

congnguyen88

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/7/14
Bài viết
355
Được thích
31
Mình có 1 file excel gồm 50 sheet, mình muổn ẩn 49 sheet chỉ chừa lại 1 sheets("home") thì mình làm như sau

Sub an()
Sheet1.Visible = 2
Sheet2.Visible = 2
............
Sheet49.Visible = 2
Endsub


NhƯ vậy code dài quá, anh em giúp mình với
 
PHP:
Option Explicit
Sub AnCacTrangTinh()
 Dim Sh As Worksheet
 On Error Resume Next
 
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Home" Then Sh.Visible = False
 Next Sh
End Sub
 
Upvote 0
PHP:
Option Explicit
Sub AnCacTrangTinh()
 Dim Sh As Worksheet
 On Error Resume Next
 
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Home" Then Sh.Visible = False
 Next Sh
End Sub
Nếu mình thay cái câu lệnh On Error Resume Next bởi câu lệnh Sheets("Home").Visible = True thì hay hơn đấy chú ChanhTQ@ nhỉ. Nghĩa là mình cho sheet Home hiện lên trước, rồi sau đó mới ẩn các sheet còn lại, như vậy thì đảm bảo rằng câu lệnh trong vòng For sẽ không gặp lỗi, khỏi cần Resume Next luôn.
 
Upvote 0
Nếu mình thay cái câu lệnh On Error Resume Next bởi câu lệnh Sheets("Home").Visible = True thì hay hơn đấy chú ChanhTQ@ nhỉ. Nghĩa là mình cho sheet Home hiện lên trước, rồi sau đó mới ẩn các sheet còn lại, như vậy thì đảm bảo rằng câu lệnh trong vòng For sẽ không gặp lỗi, khỏi cần Resume Next luôn.

Em không nghĩ sẽ hết lỗi nếu sheet Home hiện trước mà vòng lặp duyệt qua gặp thì vẫn ẩn sheet đó, Trong đoạn code của Bác ChanhTQ đã bẫy lỗi rồi khỏi cần On Error Resume Next
 
Upvote 0
Nếu mình thay cái câu lệnh
On Error Resume Next
bởi câu lệnh
Sheets("Home").Visible = True
thì hay hơn đấy chú nhỉ.

Nghĩa là mình cho sheet Home hiện lên trước, rồi sau đó mới ẩn các sheet còn lại, như vậy thì đảm bảo rằng câu lệnh trong vòng For sẽ không gặp lỗi, khỏi cần Resume Next luôn.

(âu lệnh On Error Resume Next
để đề fòng trang tính "Home" không tồn tại;
Nếu nó không tồn tại thì trông thấy hay không trông thấy có gì khác nhau đâu anh bạn?!

Câu lệnh này khi không có "Home", nó sẽ để lại, không cho ẩn "Vợ" của "Home" đó nha!
 
Upvote 0
Em không nghĩ sẽ hết lỗi nếu sheet Home hiện trước mà vòng lặp duyệt qua gặp thì vẫn ẩn sheet đó, Trong đoạn code của Bác ChanhTQ đã bẫy lỗi rồi khỏi cần On Error Resume Next
Vì trong For có câu lệnh If nên sẽ không gặp vấn đề sheet Home sẽ bị ẩn lại nữa. Hơn nữa, nếu không cho hiện lên trước thì nếu sheet Home đã bị ẩn trước đó thì sau khi chạy code sẽ cũng còn 1 sheet hiện ra nhưng không phải là sheet Home, vậy là không thỏa mãn yêu cầu của tác giả.
(âu lệnh On Error Resume Next
để đề fòng trang tính "Home" không tồn tại;
Nếu nó không tồn tại thì trông thấy hay không trông thấy có gì khác nhau đâu anh bạn?!

Câu lệnh này khi không có "Home", nó sẽ để lại, không cho ẩn "Vợ" của "Home" đó nha!
Trường hợp sheet Home không tồn tại là có trong thực tế nhưng có vẻ như không phù hợp lắm với thực tế của tác giả, vì trong yêu cầu có chỗ này: "chỉ chừa lại 1 sheets("home")" nên nếu không có sheet Home thì hơi vô lý. Nhưng dù sao thì code cũng phải tổng quát, phòng mọi trường hợp có thể, do đó "em" đồng ý với "chị" HYen17 ở chỗ vẫn để On Error Resume Next, còn câu lệnh để hiện sheet Home thì vẫn nên thêm vào.
 
Upvote 0
...
Trường hợp sheet Home không tồn tại là có trong thực tế nhưng có vẻ như không phù hợp lắm với thực tế của tác giả, vì trong yêu cầu có chỗ này: "chỉ chừa lại 1 sheets("home")" nên nếu không có sheet Home thì hơi vô lý. Nhưng dù sao thì code cũng phải tổng quát, phòng mọi trường hợp có thể, do đó "em" đồng ý với "chị" HYen17 ở chỗ vẫn để On Error Resume Next, còn câu lệnh để hiện sheet Home thì vẫn nên thêm vào.

Nếu là tôi thì tôi chỉ gõ dòng này vào cửa sổ Immediate rối enter:
for each s in worksheets: s.visible = (s.name="home"): next s
Nếu không có sheet "home" thì nó tự động bị lỗi và chừa lại cái sheet cuối cùng. Và vì nó chạy xong rồi nên lỗi cũng chả chết ai. Kết quả in hệt như bạn.

Còn nếu muốn làm cách thực sự đúng đắn thì bắt buộc phải test sheet "home" ngay từ đầu. Nếu không có "home" thì phải hỏi xem người dùng có muốn tiếp tục, và nếu tiếp tục thì chừa lại sheet đầu, sheet cuối hay sheet nào đó.
 
Upvote 0
Nếu mình thay cái câu lệnh On Error Resume Next bởi câu lệnh Sheets("Home").Visible = True thì hay hơn đấy chú ChanhTQ@ nhỉ. Nghĩa là mình cho sheet Home hiện lên trước, rồi sau đó mới ẩn các sheet còn lại, như vậy thì đảm bảo rằng câu lệnh trong vòng For sẽ không gặp lỗi, khỏi cần Resume Next luôn.
THÊM CÁI NÀY NỮA HỎNG BIẾT CÓ NGON KHÔNG. ĐẢM BẢO KHÔNG CẦN BẪY LỖI
Mã:
 Sub HIDDEN_SHEET()
  Dim i As Long
  Application.ScreenUpdating = False
  Sheets("HOME").Move before:=Sheets(1)
   For i = 2 To Sheets.Count
    Sheets(i).Visible = False
   Next
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
THÊM CÁI NÀY NỮA HỎNG BIẾT CÓ NGON KHÔNG. ĐẢM BẢO KHÔNG CẦN BẪY LỖI
Mã:
 Sub HIDDEN_SHEET()
  Dim i As Long
  Application.ScreenUpdating = False
  Sheets("HOME").Move before:=Sheets(1)
   For i = 2 To Sheets.Count
    Sheets(i).Visible = False
   Next
 Application.ScreenUpdating = True
End Sub
Nếu sheet Home không tồn tại thì nó vẫn gặp lỗi như thường anh à.
 
Upvote 0
Nếu sheet Home không tồn tại thì nó vẫn gặp lỗi như thường anh à.
ĐƯƠNG NHIÊN CODE TRÊN ĐÃ ĐÁP ỨNG YÊU CẦU CỦA TÁC GIẢ RỒI .
HTML:
Mình có 1 file excel gồm 50 sheet, mình muổn ẩn 49 sheet chỉ chừa lại 1 sheets("home")
TUY NHIÊN NẾU CÓ 50 SHEETS MÀ CHỈ TRỪ 1 SHEET LẠI THÌ For i = 1 To Sheets.Count - 1
THÌ LUÔN CÒN SHEET CUỐI CÙNG --=0--=0
 
Upvote 0

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

Back
Top Bottom