Nếu trang nào có tiêu đề tên "LOP" thì ẩn cột đó và giãn cột "HOTEN"

Liên hệ QC

LienDong

Thành viên thường trực
Tham gia
22/11/12
Bài viết
215
Được thích
46
Nghề nghiệp
Ai nói đúng thì làm!
Anh, chị, các bạn giúp em code theo như sau
Do nhận danh sách từ nhiều người nên em muốn
1/ Tất cả các trang, nếu trang nào có cột tiêu đề "LOP" thì ẩn cột đó đi
2/ Tất cả các trang, nếu trang nào có cột tiêu đề "HOTEN" mà có họ tên dài hơn chiều rộng cột thì giãn cột cho vừa với họ tên trong cột đó (giãn theo tên dài nhất)
Em cảm ơn các anh, chị nhiều!
 

File đính kèm

  • Lop1A1.xlsx
    10.5 KB · Đọc: 11
Anh, chị, các bạn giúp em code theo như sau
Do nhận danh sách từ nhiều người nên em muốn
1/ Tất cả các trang, nếu trang nào có cột tiêu đề "LOP" thì ẩn cột đó đi
2/ Tất cả các trang, nếu trang nào có cột tiêu đề "HOTEN" mà có họ tên dài hơn chiều rộng cột thì giãn cột cho vừa với họ tên trong cột đó (giãn theo tên dài nhất)
Em cảm ơn các anh, chị nhiều!
PHP:
Sub abc()
Dim ws As Worksheet, Clls As Range, Rng As Range
Const LP = "LOP"
Const HT = "HOTEN"
For Each ws In ActiveWorkbook.Worksheets
Set Rng = ws.Range("A1").Resize(, 20)
    For Each Clls In Rng
        If Clls = LP Then Clls.EntireColumn.Hidden = True
        If Clls = HT Then Clls.EntireColumn.AutoFit
    Next Clls
Next ws
End Sub
 
Upvote 0
PHP:
Sub abc()
Dim ws As Worksheet, Clls As Range, Rng As Range
Const LP = "LOP"
Const HT = "HOTEN"
For Each ws In ActiveWorkbook.Worksheets
Set Rng = ws.Range("A1").Resize(, 20)
    For Each Clls In Rng
        If Clls = LP Then Clls.EntireColumn.Hidden = True
        If Clls = HT Then Clls.EntireColumn.AutoFit
    Next Clls
Next ws
End Sub
Cảm ơn bạn nhiều
nhờ vào code của bạn, tôi có viết code AllFilterFile_FreezePanes
Trong đó tự động Filter cho tất cả các trang (cho các cột có tiêu đề)
Và tự động FreezePanes cho tất cả các trang ở ô B2
Nhưng code báo lỗi, bạn sửa giúp tôi nhé!

Sub AllFilterFile_FreezePanes()
Dim ws As Worksheet, Clls As Range, Rng As Range
For Each ws In ActiveWorkbook.Worksheets
Range("A1:L1").Select
Selection.AutoFilter
Range("B2").Select
Selection.FreezePanes = True
Next ws
End Sub
 
Upvote 0
Bạn thử cho các Sheets:
PHP:
Private Sub Worksheet_Activate()
        Range("A1:L1").AutoFilter
        Range("B2").Select
        ActiveWindow.FreezePanes = True
End Sub
 
Upvote 0
Cảm ơn bạn nhiều
nhờ vào code của bạn, tôi có viết code AllFilterFile_FreezePanes
Trong đó tự động Filter cho tất cả các trang (cho các cột có tiêu đề)
Và tự động FreezePanes cho tất cả các trang ở ô B2
Nhưng code báo lỗi, bạn sửa giúp tôi nhé!

Sub AllFilterFile_FreezePanes()
Dim ws As Worksheet, Clls As Range, Rng As Range
For Each ws In ActiveWorkbook.Worksheets
Range("A1:L1").Select
Selection.AutoFilter
Range("B2").Select
Selection.FreezePanes = True
Next ws
End Sub
PHP:
Sub AllFilterFile_FreezePanes()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    With ws
        If not .AutoFilterMode Then .Rows(1).AutoFilter
        .Activate
        .Range("B2").Select
        ActiveWindow.FreezePanes = True
    End With
Next ws
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Sub abc()
Dim ws As Worksheet, Clls As Range, Rng As Range
Const LP = "LOP"
Const HT = "HOTEN"
For Each ws In ActiveWorkbook.Worksheets
Set Rng = ws.Range("A1").Resize(, 20)
    For Each Clls In Rng
        If Clls = LP Then Clls.EntireColumn.Hidden = True
        If Clls = HT Then Clls.EntireColumn.AutoFit
    Next Clls
Next ws
End Sub
Đã biết vị trí tìm ở dòng 1, giá trị tìm là "LOP" hoặc "HOTEN", vậy thì ta dùng Find method nha bạn
 
Upvote 0
Em đã gộp các code và code đã chạy được
Em cảm ơn các anh, chị nhiều
 
Upvote 0
Em còn yếu VBA lắm, chẳng qua thấy chạy đúng thì em gửi lên cho bạn tham khảo thôi. Bác cho cái code dùng find em tham khảo với
Ví dụ:
Mã:
Sub Test()
  Dim rngFind As Range, wks As Worksheet
  For Each wks In Worksheets
    Set rngFind = wks.Rows(1).Find("LOP", , xlValues, xlWhole)
    'Neu tim thay...
    If Not rngFind Is Nothing Then
      'Làm gì tùy bạn
    End If
  Next
End Sub
 
Upvote 0
Ví dụ:
Mã:
Sub Test()
  Dim rngFind As Range, wks As Worksheet
  For Each wks In Worksheets
    Set rngFind = wks.Rows(1).Find("LOP", , xlValues, xlWhole)
    'Neu tim thay...
    If Not rngFind Is Nothing Then
      'Làm gì tùy bạn
    End If
  Next
End Sub
Nhờ bác viết đầy đủ nếu tìm thấy thì ẩn cột, không tìm thấy thì bỏ qua và duyệt sheet khác em tham khảo với ạ. Cái này em chưa dùng bao giờ
 
Upvote 0
Nhờ bác viết đầy đủ nếu tìm thấy thì ẩn cột, không tìm thấy thì bỏ qua và duyệt sheet khác em tham khảo với ạ. Cái này em chưa dùng bao giờ
úi.. thì bạn áp cái của bạn vào thôi:

rngFind.EntireColumn.Hidden = True
rngFind.EntireColumn.AutoFit
 
Lần chỉnh sửa cuối:
Upvote 0
Em viết theo thầy @ndu96081631
Set rgFound = shLookin.Range("A1:A5").Find("Apple", LookIn:=xlValues)

úi.. thì bạn áp cái của bạn vào thôi:

rngFind.EntireColumn.Hidden = True
rngFind.EntireColumn.AutoFit
Mình có viết như này:
PHP:
Sub Test()
  Dim rngFind As Range, wks As Worksheet
  For Each wks In Worksheets
    Set rngFind = wks.Rows(1).Find("LOP", , xlValues, xlWhole)
    If Not rngFind Is Nothing Then
    rngFind.EntireColumn.Hidden = True
    End If
  Next
End Sub
Nhưng trên bác NDU lại để If Not rngFind Is Nothing Then dưới, nên theo ý đó mình không viết được
 
Upvote 0
Sub totite()
Dim ws, a
Dim j As Long
For Each ws in Workseets
a = ws.Range("A1:A" & ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column).Value
For j = UBound(a) To 1 Step -1
Select Case a(1, j)
Case "LOP"
ws.Cells(1, j).EntireColumn.Hidden = True
Case "HOTEN"
ws.Cells(1, j).EntireColumn.AutoFit
End Select
Next j
Next ws
End Sub
 
Upvote 0
Web KT
Back
Top Bottom