Giúp tôi dấu(hide) và hiện thị các sheet từ combobox

Liên hệ QC

trungnt

Thành viên hoạt động
Tham gia
2/2/07
Bài viết
135
Được thích
88
Tôi làm tất cả là 4 sheet (sheet1, sheet2, sheet3, sheet4) và trong mỗi sheet này tôi có thiết kế 1 nút combobox dùng để hiển thị 1 sheet nào đó (trong 4 sheet) khi đã chọn và các sheet còn lại thì dấu (hide) đi. Đến nay, tôi đã làm thử bằng cách quay lại macro nhưng chưa đạt (có sheet dấu được, có cái báo lỗi) do trình độ bèo quá nên chưa có cách khắc phục mong các anh chị cao thủ chỉ giúp tôi cách viết ......... xin cảm ơn rất nhiều!!!!!
 
Đây là code dùng để ẩn sheet có tên là Dulieu, bạn có thể sữa lại tên theo ý bạn.
PHP:
Sheets("Dulieu").Visible = xlSheetHidden
 
Lần chỉnh sửa cuối:
Bạn cho địa chỉ mail tôi gởi vi dụ cho bạn
 
Ko biết file này có giống ý bạn ko?
Chú ý: List sheetname tại cột N tôi làm thêm phòng trường hợp thêm sheet thì list này dc cập nhật... Nếu như số sheet cũa bạn ko thay đổi thì bạn có thể bỏ cột này (lúc đó bạn phải tự tạo 1 listrange cho ComboBox bằng tay nhé)
------
Code này còn có thể rút gọn dc thêm nửa.. bạn cứ từ từ nghiên cứu nhé!
ANH TUẤN
 

File đính kèm

  • HideSheet.zip
    11.4 KB · Đọc: 156
Lần chỉnh sửa cuối:
Sửa lại thế này thì ngon lành hơn:
PHP:
Sub ShowAll()
  Dim NoSs As Integer
  NoSs = Evaluate("NoSs")
  For i = 1 To NoSs
     Sheets(i).Visible = -1
     Sheets(i).Range("B2").Value = 0
  Next i
End Sub
Sub HideSheet()
  Dim K As Integer, NoSs As Integer
  Application.ScreenUpdating = False
  K = Range("B2").Value
  NoSs = Evaluate("NoSs")
  If Sheets(K).Visible = 2 Then Sheets(K).Visible = -1
  For i = 1 To NoSs
     If i <> K Then Sheets(i).Visible = 2
  Next i
  Range("B2") = K
End Sub
ANH TUẤN
 

File đính kèm

  • HideSheet_by_ComboBox.zip
    11.6 KB · Đọc: 143
Địa chỉ mail của tôi là: trung76gmail@yahoo.com.vn Tôi rất cám ơn các anh đã nhiệt tình chỉ giúp, hiện nay tôi đang dùng cách viết của anh anhtuan1066 đã gợi ý.
 
Trích Anhtuan1066
Application
.ScreenUpdating = False
K
= Range("B2").Value
NoSs
= Evaluate("NoSs")
If
Sheets(K).Visible = 2 Then Sheets(K).Visible = -1
For i = 1 To NoSs
If i <> K Then Sheets(i).Visible = 2
Next i
Range
("B2") = K

Đoạn code trên của anh viết rất hay nhưng trình độ tôi còn hạn chế nên chưa hiểu lắm, anh có thể giải thích thêm ý nghĩa những dòng code trên được không? Nếu được thì cảm ơn anh nhiều lắm!
 
anhtuan1066 đã viết:
Sửa lại thế này thì ngon lành hơn:
PHP:
Sub ShowAll()
  Dim NoSs As Integer
  NoSs = Evaluate("NoSs")
  For i = 1 To NoSs
     Sheets(i).Visible = -1
     Sheets(i).Range("B2").Value = 0
  Next i
End Sub
ANH TUẤN

Bác có vẻ khoái Macro4 nhỉ ???, và lại hơi lạm dụng name nữa.
Đã VBA thì cần gì đến Macro4 nữa, cả name cũng vậy (trong TH này)

Thế này đơn giản hơn nhiều

PHP:
Sub UnhideSheet()
    On Error Resume Next
    Application.ScreenUpdating = False
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Sheets
        If Not sh.Visible = xlSheetVisible Then sh.Visible = xlSheetVisible
    Next
    Application.ScreenUpdating = True
End Sub

Tương tự cho Sub sau thôi. Hạn chế name bác nhé.

Thân!
 
Ah... ko... tại Bắp ko hiểu thôi... Trong file này, chuyện đầu tiên là phải lấy dc list range cho ComboBox, đúng ko? Và trong tất cã các giãi pháp, tôi thấy macro 4 là nhanh nhất...
Vì cái name NoSs nó có sẳn rồi, mình tận dụng thôi chứ đâu phải là lạm dụng... hi.. hi...
Bắp có cách nào khác đễ làm list range cho ComboBox ko?
ANH TUẤN
 
trungnt đã viết:
Đoạn code trên của anh viết rất hay nhưng trình độ tôi còn hạn chế nên chưa hiểu lắm, anh có thể giải thích thêm ý nghĩa những dòng code trên được không? Nếu được thì cảm ơn anh nhiều lắm!
Chào bạn!
Cụ thể là bạn ko hiểu chổ nào?
Code này cũng đơn giãn lắm mà...
Đặt K là cell B2: chính là số thứ tự cũa sheet
NoSs là số sheet có trong Workbook, cái này đã dc đặt trong Define name
If Sheets(K).Visible = 2 Then Sheets(K).Visible = -1: Nếu Sheet K (là sheet bạn chọn trong ComboBox) mà đang ẩn thì làm cho nó hiện lên trước...
For i = 1 To NoSs.... Quét từ sheet đầu đến sheet cuối, sheet nào có số thứ tự khác K (i<>K) thì cho nó ẩn tất tần tật
Range("B2") = K : Bỏ đi cũng ko sao.. chủ yếu nó làm cho Item đang có trong ComboBox trùng với tên sheet hiện hành... Bạn bỏ dòng này thử và thí nghiệm nhé
ANH TUẤN
 
anhtuan1066 đã viết:
Ah... ko... tại Bắp ko hiểu thôi... Trong file này, chuyện đầu tiên là phải lấy dc list range cho ComboBox, đúng ko? Và trong tất cã các giãi pháp, tôi thấy macro 4 là nhanh nhất...
Vì cái name NoSs nó có sẳn rồi, mình tận dụng thôi chứ đâu phải là lạm dụng... hi.. hi...
Bắp có cách nào khác đễ làm list range cho ComboBox ko?
ANH TUẤN
Bác thử đoạn code sau xem nhé (đưa vào module).
PHP:
Sub Combo()
Dim Sh As Worksheet
ActiveSheet.ComboBox1.Clear
For Each Sh In ThisWorkbook.Sheets
    ActiveSheet.ComboBox1.AddItem Sh.Name
Next
End Sub
Và đoạn này nữa
PHP:
Private Sub ComboBox1_Change()
Range("B2") = ComboBox1.Value
End Sub
 
Private Sub ComboBox1_GotFocus()
Combo
End Sub
 
Lần chỉnh sửa cuối:
Hình như cái bạn đang hướng dẩn là dùng ComboBox thuộc thanh Control Toolbox thì phải... cái của tôi là Form mà..
Còn nữa... nếu dùng ComboBox của Control Toolbox thì phải chú ý thêm 1 chuyện, đó là việc cập nhật... Thêm sheet nó có cập nhật list range ko?
Xin đưa luôn file đã sửa lên luôn đại ca ơi!
ANH TUẤN
 
anhtuan1066 đã viết:
Hình như cái bạn đang hướng dẩn là dùng ComboBox thuộc thanh Control Toolbox thì phải... cái của tôi là Form mà..
Đúng là code của em dùng cho ComboBox.
anhtuan1066 đã viết:
Còn nữa... nếu dùng ComboBox của Control Toolbox thì phải chú ý thêm 1 chuyện, đó là việc cập nhật... Thêm sheet nó có cập nhật list range ko?
Xin đưa luôn file đã sửa lên luôn đại ca ơi!
ANH TUẤN
Cái đoạn code này
PHP:
Private Sub ComboBox1_GotFocus()
Combo
End Sub
là để gọi Sub Combo khi đưa chuột vào ComboBox
Trong Sub này có đoạn code For Each.... là để đưa tên của các sheet có sẵn trong Workbook vào ComboBox. Cho nên nếu bác có thêm sheet thì nó vẫn cập nhật được tên sheet đó vào trong ComboBox bác ạ.
(Phông chữ làm sao ấy, gõ mãi mới được 1 đoạn ngắn.)
 

File đính kèm

  • Show&HideSheet.rar
    13.8 KB · Đọc: 53
Lần chỉnh sửa cuối:
Hôm qua, tôi có xem chương trình chạy dự toán viết bằng VBA chạy trên Excel của 1 người bạn. Trong chương trình cũng có 1 số việc dấu sheet nhưng ở chương trình này tôi thấy có 1 điểm lạ mặc dù đã dấu sheet nhưng khi vào Format --> sheet --> Unhide thì chẳng thấy 1 sheet nào trong đó cả. Tôi nghĩ người viết ra chương trình đó không biết họ dấu sheet bằng cách nào mà hay vậy?......và cảm thấy Excel có rất nhiều cái hay chứ không đơn thuần chỉ là những bảng tính khô khan. Cảm ơn các anh đã nhiệt tình giúp đỡ tôi.
 
Đó là do họ dùn thuộc tính xlSheetVeryHidden khi dấu sheet mà. Bạn xem file sau nhé.
 

File đính kèm

  • Show&HideSheet.rar
    13.9 KB · Đọc: 58
trungnt đã viết:
Hôm qua, tôi có xem chương trình chạy dự toán viết bằng VBA chạy trên Excel của 1 người bạn. Trong chương trình cũng có 1 số việc dấu sheet nhưng ở chương trình này tôi thấy có 1 điểm lạ mặc dù đã dấu sheet nhưng khi vào Format --> sheet --> Unhide thì chẳng thấy 1 sheet nào trong đó cả. Tôi nghĩ người viết ra chương trình đó không biết họ dấu sheet bằng cách nào mà hay vậy?......và cảm thấy Excel có rất nhiều cái hay chứ không đơn thuần chỉ là những bảng tính khô khan. Cảm ơn các anh đã nhiệt tình giúp đỡ tôi.
Thì bạn xem mấy file trong topic này, có file nào Unhide bình thường dc đâu! Hài lòng chứ!
----------------
File của bạn minhlev rất hay, tuy nhiên khi thêm sheet, chọn ẩn tất cả, chừa lại sheet mới này thì khi Showall sẽ bị lổi... Bạn sửa lại tí nữa vụ này là xem như hoàn hảo
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
Bạn chú ý nhé :
PHP:
Sub Combo()
Dim Sh As Worksheet
ActiveSheet.ComboBox1.Clear
For Each Sh In ThisWorkbook.Sheets
    ActiveSheet.ComboBox1.AddItem Sh.Name
Next
End Sub
Thêm đoạn kiểm tra xem ComboBox1 có tồn tại không ??

PHP:
Sub ShowAll()
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Sheets
        If Sh.Visible = xlSheetHidden Then Sh.Visible = xlSheetVisible
    Next
End Sub
Nếu Sheet không ở chế độ xlSheetHidden thì sao nhỉ ???

PHP:
Private Sub ComboBox1_Change()
Range("B2") = ComboBox1.Value
End Sub

Đoạn này để làm gì nhỉ ???
PHP:
 Private Sub ComboBox1_GotFocus()
Combo
End Sub

Mỗi lần GotFocus là chạy Combo sao ???

tuy nhiên khi thêm sheet, chọn ẩn tất cả, chừa lại sheet mới này thì khi Showall sẽ bị lổi... Bạn sửa lại tí nữa vụ này là xem như hoàn hảo
Chọn ẩn là ở chế độ nào vậy bác ?? ShowAll chỉ có tác dụng với chế độ xlSheetHidden thôi. Vì vậy bác sửa lại được mà.

Thân!
 
Vậy sửa lại làm sao đây đại ca? Đưa file lên luôn đi... món này tôi đang học nên có cái cũng ko hiểu mấy!
ANH TUẤN
 
Web KT
Back
Top Bottom