Code hide và unhide cột có điều kiện

Liên hệ QC

mhung12005

Thành viên chậm chạm
Tham gia
20/7/11
Bài viết
1,598
Được thích
1,261
Nghề nghiệp
Đâu có việc thì làm
Chào các anh, chị GPE,

Em muốn viết 1 đoạn code có chức năng auto hide và unhide cột mà VBA thì yếu mong các anh chị giúp đỡ. Yêu cầu em đã comment trong file đính kèm. Chân thành cảm ơn các anh, chị.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chèn cái này vào sheet Dec (C1 là ô bạn điền tháng, bạn có thể hiệu chỉnh theo ý muốn)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$C$1" Then Exit Sub
If Target.Value > 12 Then
    MsgBox "Khong ton tai thang " & Target.Value
    Exit Sub
End If
Call CheckMonth
End Sub

Cèn cái này vào 1 module (để nó check xem có phải năm nhuận không, bạn điền năm vào ô D1 nha)
PHP:
Sub CheckMonth()
Dim mth As Integer, yr As Integer
mth = Sheets("Dec").Range("C1").Value
yr = Sheets("Dec").Range("D1").Value
Worksheets("Dec").Columns("AE:AG").Hidden = False
Select Case mth
    Case 4, 6, 9, 11
        Worksheets("Dec").Columns("AG").Hidden = True
    Case 2
        If yr Mod 100 = 0 And yr Mod 400 = 0 Or yr Mod 4 = 0 Then
            Worksheets("Dec").Columns("AF:AG").Hidden = True
        Else
            Worksheets("Dec").Columns("AE:AG").Hidden = True
        End If
End Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chèn cái này vào sheet Dec (C1 là ô bạn điền tháng, bạn có thể hiệu chỉnh theo ý muốn)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$C$1" Then Exit Sub
If Target.Value > 12 Then
    MsgBox "Khong ton tai thang " & Target.Value
    Exit Sub
End If
Call CheckMonth
End Sub

Cèn cái này vào 1 module (để nó check xem có phải năm nhuận không, bạn điền năm vào ô D1 nha)
PHP:
Sub CheckMonth()
Dim mth As Integer, yr As Integer
mth = Sheets("Dec").Range("C1").Value
yr = Sheets("Dec").Range("D1").Value
Worksheets("Dec").Columns("AE:AG").Hidden = False
Select Case mth
    Case 4, 6, 9, 11
        Worksheets("Dec").Columns("AG").Hidden = True
    Case 2
        If yr Mod 100 = 0 And yr Mod 400 = 0 Or yr Mod 4 = 0 Then
            Worksheets("Dec").Columns("AF:AG").Hidden = True
        Else
            Worksheets("Dec").Columns("AE:AG").Hidden = True
        End If
End Select
End Sub

Cái này không được bạn ah, mình đã thử như bạn hướng dẫn nhưng nó không chạy. Hơn nữa ô D1 là ô có dữ liệu của mình nên không điền năm vào ô D1 được. Nếu insert thêm cột thì báo lỗi ở Macro. Bạn xem có cách nào khác không giúp mình với nhé. Thanks bạn nhiều.
 
Upvote 0
Cái này không được bạn ah, mình đã thử như bạn hướng dẫn nhưng nó không chạy. Hơn nữa ô D1 là ô có dữ liệu của mình nên không điền năm vào ô D1 được. Nếu insert thêm cột thì báo lỗi ở Macro. Bạn xem có cách nào khác không giúp mình với nhé. Thanks bạn nhiều.
Nó chạy khi C1 thay đổi bạn à, bạn cứ điền tháng nào vào C1 thì nó sẽ căn cứ theo năm ở D1 và tháng C1 để nó hide hay unhide tùy ý bạn. Còn việc bạn hiệu chỉnh thì có thể nhìn vào code của mình, chỗ nào bạn muốn đổi C1 hay D1 thành ô nào bạn thích thì đổi lại thôi. Mình up file cho bạn xem, vẫn chạy mà.

Còn việc bạn thêm cột thì nó vẫn chạy chứ đâu bị lỗi macro, nhưng mà mình hide theo yêu cầu của bạn là khoảng AE tới AG nên bạn insert trước đó sẽ dẫn tới số thứ tự đánh sai.
 

File đính kèm

  • Test_LSX.rar
    82.2 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0

Mình "gà" cái món VBA này lắm. Đánh vật với mấy đường links của bạn gửi nhưng cũng chẳng tìm thấy cái mình cần để áp dụng. Nếu bạn dảnh time thì giúp mình viết 1 đoạn code trên cái file có sẵn cấu trúc (như file mình gửi đính kèm) nhé. Trân trọng cảm ơn bạn.
 
Upvote 0
Chào các anh, chị GPE,

Em muốn viết 1 đoạn code có chức năng auto hide và unhide cột mà VBA thì yếu mong các anh chị giúp đỡ. Yêu cầu em đã comment trong file đính kèm. Chân thành cảm ơn các anh, chị.
Đã dùng VBA rồi thì Hide với Unhide làm gì cho mất công... Sao bạn không viết code để điển ngày vừa đủ với tháng
Có điều chưa hiểu dữ liệu từ dòng 4 sẽ ảnh hưởng thế nào? Chẳng hạn, nếu tháng có 28 ngày thì cell AF5 sẽ tính sao?
Nói chung là chưa hiểu mục đích cuối cùng của bạn là cái gì (chứ làm món này chẳng khó khăn gì)
 
Upvote 0
Nó chạy khi C1 thay đổi bạn à, bạn cứ điền tháng nào vào C1 thì nó sẽ căn cứ theo năm ở D1 và tháng C1 để nó hide hay unhide tùy ý bạn. Còn việc bạn hiệu chỉnh thì có thể nhìn vào code của mình, chỗ nào bạn muốn đổi C1 hay D1 thành ô nào bạn thích thì đổi lại thôi. Mình up file cho bạn xem, vẫn chạy mà.

Còn việc bạn thêm cột thì nó vẫn chạy chứ đâu bị lỗi macro, nhưng mà mình hide theo yêu cầu của bạn là khoảng AE tới AG nên bạn insert trước đó sẽ dẫn tới số thứ tự đánh sai.

Bạn ơi cái này nó không chạy auto được (cứ phải nhấn Run). Có cách nào cho nó chạy tự động mà ô c1 dựa vào tháng hiện tại và ô D1 cũng dựa vào năm hiện tại không bạn. Thanks.
 
Upvote 0
Bạn ơi cái này nó không chạy auto được (cứ phải nhấn Run). Có cách nào cho nó chạy tự động mà ô c1 dựa vào tháng hiện tại và ô D1 cũng dựa vào năm hiện tại không bạn. Thanks.
Bạn không cần phải nhấn run trong VBA, nó sẽ auto khi mà cột C1 tức là cột chứa tháng thay đổi. Còn cột D1 chỉ là năm để nó so sánh mà ra chính xác số ngày của tháng 2.
Còn bạn muốn cho nó chạy luôn mỗi khi sheet kích hoạt thì chèn dòng dưới này vào sheet Dec luôn
PHP:
Private Sub Worksheet_Activate()
Call CheckMonth
End Sub


Bạn muốn cho nó lấy hiện tại thì cứ đánh công thức vào C1 là =MONTH(TODAY()) rồi D1 là =YEAR(TODAY()).
 
Lần chỉnh sửa cuối:
Upvote 0
Đã dùng VBA rồi thì Hide với Unhide làm gì cho mất công... Sao bạn không viết code để điển ngày vừa đủ với tháng
Có điều chưa hiểu dữ liệu từ dòng 4 sẽ ảnh hưởng thế nào? Chẳng hạn, nếu tháng có 28 ngày thì cell AF5 sẽ tính sao?
Nói chung là chưa hiểu mục đích cuối cùng của bạn là cái gì (chứ làm món này chẳng khó khăn gì)

Chào thầy,

Thưa thầy:
1. Vì trình độ VBA của em còn nhiều hạn chế (chưa thể viết code) nên em mới dùng gọi là "Đông, Tây y kết hợp" nghĩa là đầu tiên thì dùng công thức sau bí quá không dùng được công thức nữa thì nhờ mọi người làm bằng VBA.
Yêu cầu của em như trong file đính kèm đó thầy ah.
2. Còn thắc mắc của thầy: Đây là em đang làm 1 cái form nên thầy đừng bận tâm đến dữ liệu, vì khi form ok rồi thì em mới điền dữ liệu vào form mà. Đó chỉ là những dữ liệu cũ.

Nếu thầy có thể giúp em làm cái form này 100% bằng VBA thì còn gì bằng. Mong thầy giúp em nhé.
 
Upvote 0
Bạn không cần phải nhấn run trong VBA, nó sẽ auto khi mà cột C1 tức là cột chứa tháng thay đổi. Còn cột D1 chỉ là năm để nó so sánh mà ra chính xác số ngày của tháng 2.
Còn bạn muốn cho nó chạy luôn mỗi khi sheet kích hoạt thì chèn dòng dưới này vào sheet Dec luôn
PHP:
Private Sub Worksheet_Activate()
Call CheckMonth
End Sub


Bạn muốn cho nó lấy hiện tại thì cứ đánh công thức vào C1 là =MONTH(TODAY()) rồi D1 là =YEAR(TODAY()).

Nó đã chạy đúng ý mình rồi nhưng mình còn thêm 1 ý nữa: Nếu mình muốn hide hoặc unhide thêm các cột khác là BK,BL,BM (cũng theo các điều kiện đó) thì phải thêm vào code những gì ? Bạn hướng dẫn mình thêm nhé. Cảm ơn bạn.
 
Upvote 0
Bạn không cần phải nhấn run trong VBA, nó sẽ auto khi mà cột C1 tức là cột chứa tháng thay đổi. Còn cột D1 chỉ là năm để nó so sánh mà ra chính xác số ngày của tháng 2.
Còn bạn muốn cho nó chạy luôn mỗi khi sheet kích hoạt thì chèn dòng dưới này vào sheet Dec luôn
PHP:
Private Sub Worksheet_Activate()
Call CheckMonth
End Sub


Bạn muốn cho nó lấy hiện tại thì cứ đánh công thức vào C1 là =MONTH(TODAY()) rồi D1 là =YEAR(TODAY()).

Cảm ơn bạn đã hướng dẫn mình rất nhiệt tình. Nếu bây giờ mình muốn ẩn thêm các côt BK, BL, BM và theo điều kiện của ô AI1=tháng và AJ1=năm thì thêm code ra sao. Bạn hướng dẫn mình tiếp nhé. Thanks bạn nhiều.
 
Upvote 0
Web KT
Back
Top Bottom