Em cần anh chị giúp đỡ về Code VBA kết hợp đồng thời giữa dãn dòng tự động và ẩn hiện dòng tự động (2 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

giaiphapexcel93@

Thành viên mới
Tham gia
17/12/21
Bài viết
17
Được thích
1
Tại Sheet YCNT dùng sự kiện Worksheet_Activate
Vùng cần ẩn/hiện/dãn dòng là vùng ô gộp
Ô C15 đến C23 và Ô N15
Yêu cầu:
Khi có 1 dữ liệu duy nhất tại dòng 15 thì các dòng từ 16 đến 23 sẽ ẩn, đồng thời kiểm tra xem dữ liệu bên ô gộp C15 và N15 bên nào có chiều cao vượt quá ô thì chọn làm ô điều kiện để dãn dòng tự động
Khi có hơn 2 dòng đồng thời kiểm tra và cộng chiều cao các ô gộp 15 đến...và so sánh với ô N15 bên nào có chiều cao lớn nhất thì chọn làm điều kiện để dãn dòng tự động


Private Sub Worksheet_Activate()
Dim rng As Range
Application.ScreenUpdating = False
'Tự động dãn dòng khi có dữ liệu
Call dandongtudong(ActiveSheet.Name, "C15:C23")
'Ẩn/hiện các dòng khi không có/có dữ liệu
For Each rng In [AD15:AD23]
If rng.Value <> 0 Then
rng.EntireRow.Hidden = False
Else
rng.EntireRow.Hidden = True
End If
Next rng
With Worksheets("YCNT")
.Rows("27").PageBreak = xlPageBreakNone '27 la dong dat dau ngat trang
If (.Range(.PageSetup.PrintArea).Height > (800 * 1)) Then
.Rows("27").PageBreak = xlPageBreakManual
End If
End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • HSQLCL.xlsm
    HSQLCL.xlsm
    76.8 KB · Đọc: 12
  • 11.png
    11.png
    58.1 KB · Đọc: 30
  • 22.png
    22.png
    60.3 KB · Đọc: 30
Tại Sheet YCNT dùng sự kiện Worksheet_Activate
Vùng cần ẩn/hiện/dãn dòng là vùng ô gộp
Ô C15 đến C23 và Ô N15
Yêu cầu:
Khi có 1 dữ liệu duy nhất tại dòng 15 thì các dòng từ 16 đến 23 sẽ ẩn, đồng thời kiểm tra xem dữ liệu bên ô gộp C15 và N15 bên nào có chiều cao vượt quá ô thì chọn làm ô điều kiện để dãn dòng tự động
Khi có hơn 2 dòng đồng thời kiểm tra và cộng chiều cao các ô gộp 15 đến...và so sánh với ô N15 bên nào có chiều cao lớn nhất thì chọn làm điều kiện để dãn dòng tự động


Private Sub Worksheet_Activate()
Dim rng As Range
Application.ScreenUpdating = False
'Tự động dãn dòng khi có dữ liệu
Call dandongtudong(ActiveSheet.Name, "C15:C23")
'Ẩn/hiện các dòng khi không có/có dữ liệu
For Each rng In [AD15:AD23]
If rng.Value <> 0 Then
rng.EntireRow.Hidden = False
Else
rng.EntireRow.Hidden = True
End If
Next rng
With Worksheets("YCNT")
.Rows("27").PageBreak = xlPageBreakNone '27 la dong dat dau ngat trang
If (.Range(.PageSetup.PrintArea).Height > (800 * 1)) Then
.Rows("27").PageBreak = xlPageBreakManual
End If
End With
Application.ScreenUpdating = True
End Sub
Không chắc lắm, bạn thử:
PHP:
Private Sub Worksheet_Activate()
    Dim rng         As Range
    Dim cellC15     As Range
    Dim cellN15     As Range
    Dim mergedHeightC As Double
    Dim mergedHeightN As Double
    
    Application.ScreenUpdating = FALSE
    
    ' Đặt tham chiếu cho các ô gộp
    Set cellC15 = Range("C15:C23")
    Set cellN15 = Range("N15")
    
    ' Tính toán chiều cao của các ô gộp
    mergedHeightC = cellC15.Height
    mergedHeightN = cellN15.Height
    
    ' Ẩn các dòng từ 16 đến 23 nếu chỉ có dữ liệu duy nhất tại dòng 15
    If WorksheetFunction.CountA(Range("C15:C23")) <= 1 Then
        Rows("16:23").Hidden = TRUE
        ' Kiểm tra và dãn dòng tự động dựa trên chiều cao của ô gộp
        If mergedHeightC > cellN15.Height Then
            cellC15.Rows.AutoFit
        ElseIf mergedHeightN > cellC15.Height Then
            cellN15.Rows.AutoFit
        End If
    Else
        Rows("16:23").Hidden = FALSE
        ' Dãn dòng tự động dựa trên chiều cao lớn nhất giữa C15 và N15
        If mergedHeightC > mergedHeightN Then
            cellC15.Rows.AutoFit
        Else
            cellN15.Rows.AutoFit
        End If
    End If
    
    ' Ẩn hoặc hiện các dòng dựa trên giá trị của chúng
    For Each rng In Range("AD15:AD23")
        rng.EntireRow.Hidden = (rng.Value = 0)
    Next rng
    
    With Worksheets("YCNT")
        .Rows("27").PageBreak = xlPageBreakNone        '27 là dòng đặt đầu ngắt trang
        If .Range(.PageSetup.PrintArea).Height > (800 * 1) Then
            .Rows("27").PageBreak = xlPageBreakManual
        End If
    End With
    
    Application.ScreenUpdating = TRUE
End Sub
 
Upvote 0
Tại Sheet YCNT dùng sự kiện Worksheet_Activate
Vùng cần ẩn/hiện/dãn dòng là vùng ô gộp
Ô C15 đến C23 và Ô N15
Yêu cầu:
Khi có 1 dữ liệu duy nhất tại dòng 15 thì các dòng từ 16 đến 23 sẽ ẩn, đồng thời kiểm tra xem dữ liệu bên ô gộp C15 và N15 bên nào có chiều cao vượt quá ô thì chọn làm ô điều kiện để dãn dòng tự động
Khi có hơn 2 dòng đồng thời kiểm tra và cộng chiều cao các ô gộp 15 đến...và so sánh với ô N15 bên nào có chiều cao lớn nhất thì chọn làm điều kiện để dãn dòng tự động


Private Sub Worksheet_Activate()
Dim rng As Range
Application.ScreenUpdating = False
'Tự động dãn dòng khi có dữ liệu
Call dandongtudong(ActiveSheet.Name, "C15:C23")
'Ẩn/hiện các dòng khi không có/có dữ liệu
For Each rng In [AD15:AD23]
If rng.Value <> 0 Then
rng.EntireRow.Hidden = False
Else
rng.EntireRow.Hidden = True
End If
Next rng
With Worksheets("YCNT")
.Rows("27").PageBreak = xlPageBreakNone '27 la dong dat dau ngat trang
If (.Range(.PageSetup.PrintArea).Height > (800 * 1)) Then
.Rows("27").PageBreak = xlPageBreakManual
End If
End With
Application.ScreenUpdating = True
End Sub
Bạn xem đúng như ý muốn chưa nhé. Mình ẩn dòng bằng chức năng Filter có sẵn trong excel để cho nhanh.
Liên kết: https://youtu.be/39dKXiGhcaU
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom