Code ẩn hiện vùng chọn (1 người xem)

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

buithanhlong

Thành viên hoạt động
Tham gia
8/6/10
Bài viết
176
Được thích
141
Chào các sư phụ! các sư phụ giúp em code ẩn hoặc hiện một vùng làm việc trong 1 sheet. Cụ thể: trong sheet 1 có 5 trang từ 1-5, khi cần làm việc với trang 1 để nhập dữ liệu thì gọi trang 1 ra, còn các trang 4-5 ẩn đi, khi làm việc với trang 3 thì các trang còn lại ẩn đi. Rất mong sự quan tâm giúp đỡ của các sư phụ (việc ẩn hiện này được sử dụng bằng nút lệnh trong ActiveX Controls) em là thành viên mới nên còn nhiều ấu trĩ rất mong được chỉ giáo. Trân trọng
 
Chào các sư phụ! các sư phụ giúp em code ẩn hoặc hiện một vùng làm việc trong 1 sheet. Cụ thể: trong sheet 1 có 5 trang từ 1-5, khi cần làm việc với trang 1 để nhập dữ liệu thì gọi trang 1 ra, còn các trang 4-5 ẩn đi, khi làm việc với trang 3 thì các trang còn lại ẩn đi. Rất mong sự quan tâm giúp đỡ của các sư phụ (việc ẩn hiện này được sử dụng bằng nút lệnh trong ActiveX Controls) em là thành viên mới nên còn nhiều ấu trĩ rất mong được chỉ giáo. Trân trọng
Không sử dụng ActiveX Control mà sử dụng sự kiện Worksheet_Change kết hợp với Data Validation có được không bạn?
Bạn xài tạm cách củ chuối này nhé, địa chỉ các trang thì bạn có thể chỉnh sửa lại cho phù hợp.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$I$1" Then Exit Sub
Application.ScreenUpdating = False
[10:200].EntireRow.Hidden = True
Select Case [I1].Value
Case "": [10:200].EntireRow.Hidden = False
Case 1: [10:20].EntireRow.Hidden = False
Case 2: [21:40].EntireRow.Hidden = False
Case 3: [41:80].EntireRow.Hidden = False
Case 4: [81:150].EntireRow.Hidden = False
Case 5: [151:200].EntireRow.Hidden = False
Case Else: MsgBox "Hong choi!"
End Select
Application.ScreenUpdating = True
End Sub[/GPECODE]
 

File đính kèm

Upvote 0
Cám ơn sư phụ nhiều quá vừa mới hỏi đã được sư phụ trả lời ngay, thật là đáng trân trọng, em làm thử có gì chưa rõ rất mong sư phụ tiếp tục chỉ giáo. Trân trọng cám ơn
 
Upvote 0
Chào sư phụ em đã tải file về và chạy thử, nhưng không thấy có hiệu ứng, sư phụ chỉ giáo thêm cho em được không. Trân trọng cám ơn
 
Upvote 0
Chào sư phụ em đã tải file về và chạy thử, nhưng không thấy có hiệu ứng, sư phụ chỉ giáo thêm cho em được không. Trân trọng cám ơn
Bạn đã Enable Macro chưa vậy nhỉ? Tôi chạy code thấy bình thường, khi chọn vùng tại ô I1 thì các hàng tương ứng (như tôi ví dụ trong file) sẽ hiện ra, các hàng còn lại (trong vùng 10:200) sẽ ẩn đi.
 
Upvote 0
Cám ơn sư phụ chiêu này của sư phụ quả là tuyệt vời, nhưng đệ tử xin lỗi đã nói chưa rõ, theo yêu cầu công việc phải chọn trang 1, hoặc 2, hoặc 2 và 3, hoặc 1,2,3 ... đệ tử đã chỉnh mã để đạt được yêu cầu này, nhưng khi chạy thì nó chạy toàn bộ dòng từ đầu đến hết, rất mong sư phụ giúp cho nó chỉ hiện trang cần dùng, ví dụ trang 1 từ a6:H30 chẳng hạn, và khi cần thì ta gọi ra all từ trang 1-n theo ý muốn. Rất mong sư phụ chỉ giáo. Trân trọng cám ơn
 
Upvote 0
Theo mình bạn nên để dạng danh sách chọn chứ đưa vào Valid thì mệt lắm (Tạo các tổ hợp tran chọn) còn gõ thì đưa số trang vào DS nhưng có thể sai sót. Giờ bạn chọn những trang nào thì đánh chữ x đánh dấu vào trang đó là xong)

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i
If Not Intersect(Target, [I2:I6]) Is Nothing Then
   Application.ScreenUpdating = False
   [10:200].EntireRow.Hidden = True
For i = 1 To 5
If UCase([I2:I6].Cells(i)) = "X" Then Range(Choose(i, _
"10:20", "21:40", "41:80", "81:150", "151:200")).EntireRow.Hidden = False
Next
End If
End Sub
 

File đính kèm

Upvote 0
Xem bài này mình lại nhớ đến phim Tây du ký: "Sưưưưư phụụ...."
 
Upvote 0
Theo mình bạn nên để dạng danh sách chọn chứ đưa vào Valid thì mệt lắm (Tạo các tổ hợp tran chọn) còn gõ thì đưa số trang vào DS nhưng có thể sai sót. Giờ bạn chọn những trang nào thì đánh chữ x đánh dấu vào trang đó là xong)

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i
If Not Intersect(Target, [I2:I6]) Is Nothing Then
   Application.ScreenUpdating = False
   [10:200].EntireRow.Hidden = True
For i = 1 To 5
If UCase([I2:I6].Cells(i)) = "X" Then Range(Choose(i, _
"10:20", "21:40", "41:80", "81:150", "151:200")).EntireRow.Hidden = False
Next
End If
End Sub
Thêm một phương án để tham khảo: Sử dụng Listbox:
Mã:
Private Sub LstTrang_Change()
    With LstTrang
        Range(.List(.ListIndex, 1)).EntireRow.Hidden = Not .Selected(.ListIndex)
    End With
End Sub
 

File đính kèm

Upvote 0
Cám ơn sư phụ nhiều lắm, nhưng vì trình độ còn rất hạn chế nên đệ tử không thể tắt chế độ đang soạn thảo để chạy ứng dụng được, khi tắt chế độ Disign Mode máy báo lỗi Macro, đệ tử đã vào Excel option để seting nhưng vẫn không được, nhờ sư phụ chỉ bảo đệ tử biết ơn. Trân trọng
 
Upvote 0
Cám ơn sư phụ nhiều lắm, nhưng vì trình độ còn rất hạn chế nên đệ tử không thể tắt chế độ đang soạn thảo để chạy ứng dụng được, khi tắt chế độ Disign Mode máy báo lỗi Macro, đệ tử đã vào Excel option để seting nhưng vẫn không được, nhờ sư phụ chỉ bảo đệ tử biết ơn. Trân trọng
Máy báo lỗi thế nào? Bạn chụp hình hộp thoại báo lỗi đưa lên đây xem sao.
 
Upvote 0
Chào các sư phụ! các sư phụ giúp em code ẩn hoặc hiện một vùng làm việc trong 1 sheet. Cụ thể: trong sheet 1 có 5 trang từ 1-5, khi cần làm việc với trang 1 để nhập dữ liệu thì gọi trang 1 ra, còn các trang 4-5 ẩn đi, khi làm việc với trang 3 thì các trang còn lại ẩn đi. Rất mong sự quan tâm giúp đỡ của các sư phụ (việc ẩn hiện này được sử dụng bằng nút lệnh trong ActiveX Controls) em là thành viên mới nên còn nhiều ấu trĩ rất mong được chỉ giáo. Trân trọng

Bạn thử File này. Máy sẽ tự động xác định số trang và tạo List Trang tại ô A1. Vùng dữ liệu tôi giả lập là các dòng tô màu, bạn thử thêm, bớt số dòng và tăng, giảm chiều cao dòng để test nhé.
 

File đính kèm

Upvote 0
Thêm một phương án để tham khảo: Sử dụng Listbox:
Mã:
Private Sub LstTrang_Change()
    With LstTrang
        Range(.List(.ListIndex, 1)).EntireRow.Hidden = Not .Selected(.ListIndex)
    End With
End Sub

Private Sub LstTrang_Change()
With LstTrang
Range(.List(.ListIndex, 1)).EntireRow.Hidden = Not .Selected(.ListIndex)
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I2:I6]) Is Nothing Then
Dim i
Application.ScreenUpdating = False
[10:200].EntireRow.Hidden = True
For i = 1 To 5
If UCase([I2:I6].Cells(i)) = "X" Then Range(Choose(i, _
"10:20", "21:40", "41:80", "81:150", "151:200")).EntireRow.Hidden = False
Next
End If
End Sub

Anh Nghĩa Phúc cho em hỏi với. Em đọc nhưng mãi không hiểu làm thế nào để liên kết 2 code này với nhau cả.
Tại code đầu tiên em không thấy có nội dung nào của code thứ 2.
Em đọc một vài bài khác thì có dòng gọi Sub khác nhưng file của anh thì không có.
Em mới tìm hiểu nên mong anh chỉ giáo

Em cảm ơn!
 
Upvote 0
Private Sub LstTrang_Change()
With LstTrang
Range(.List(.ListIndex, 1)).EntireRow.Hidden = Not .Selected(.ListIndex)
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I2:I6]) Is Nothing Then
Dim i
Application.ScreenUpdating = False
[10:200].EntireRow.Hidden = True
For i = 1 To 5
If UCase([I2:I6].Cells(i)) = "X" Then Range(Choose(i, _
"10:20", "21:40", "41:80", "81:150", "151:200")).EntireRow.Hidden = False
Next
End If
End Sub

Anh Nghĩa Phúc cho em hỏi với. Em đọc nhưng mãi không hiểu làm thế nào để liên kết 2 code này với nhau cả.
Tại code đầu tiên em không thấy có nội dung nào của code thứ 2.
Em đọc một vài bài khác thì có dòng gọi Sub khác nhưng file của anh thì không có.
Em mới tìm hiểu nên mong anh chỉ giáo

Em cảm ơn!
Theo mình hiểu hai cái này không liên quan, cái code thứ hai trong file, chắc anh Nghĩa Phúc thử Test code bác Sealand thôi
 
Upvote 0

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

Back
Top Bottom