Xin giúp đỡ sửa mã AutoFit chiều cao dòng theo điều kiện!

Liên hệ QC

theanhst92

Thành viên hoạt động
Tham gia
31/3/16
Bài viết
134
Được thích
15
Kính gửi mọi người trên diễn đàn ạ!
Em có tham khảo trên diễn đàn để chạy autofit cho dòng đã được wraptext nhưng vẫn chưa biết làm theo điều kiện.
Điều kiện là tại cột chứa dữ liệu đã được wraptext thì khi kích thước chiều cao dòng sau khi autofit nhỏ 20 thì dòng đó bằng 20 còn nếu như chiều cao dòng sau khi autofit lơn hơn 20 thì bỏ qua.
lệnh sẽ được chạy lần lượt từ dòng đầu đến dòng cuối cùng chứa dữ liệu của cột đó. mong mọi người giúp đỡ em với ạ!
1611807031891.png
 

File đính kèm

  • AUTOFIT.xlsm
    14.8 KB · Đọc: 10
Kính gửi mọi người trên diễn đàn ạ!
Em có tham khảo trên diễn đàn để chạy autofit cho dòng đã được wraptext nhưng vẫn chưa biết làm theo điều kiện.
Điều kiện là tại cột chứa dữ liệu đã được wraptext thì khi kích thước chiều cao dòng sau khi autofit nhỏ 20 thì dòng đó bằng 20 còn nếu như chiều cao dòng sau khi autofit lơn hơn 20 thì bỏ qua.
lệnh sẽ được chạy lần lượt từ dòng đầu đến dòng cuối cùng chứa dữ liệu của cột đó. mong mọi người giúp đỡ em với ạ!
View attachment 253639
Dùng đoạn code này với lưu ý là phải chạy vòng lặp chỉnh chiều cao cho từng cell trong myrange bạn nhé!
Rich (BB code):
Sub Autofit_test()
Dim myRange As Range, Cll As Range, lr As Long

     With Sheet1
        lr = .Range("B" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("B4:B" & lr)
     End With
       
        myRange.EntireRow.autofit
   
    For Each Cll In myRange
        If Cll.RowHeight < 20 Then
            Cll.RowHeight = 20
        End If
    Next

End Sub
 
Upvote 0
Dùng đoạn code này với lưu ý là phải chạy vòng lặp chỉnh chiều cao cho từng cell trong myrange bạn nhé!
Rich (BB code):
Sub Autofit_test()
Dim myRange As Range, Cll As Range, lr As Long

     With Sheet1
        lr = .Range("B" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("B4:B" & lr)
     End With
     
        myRange.EntireRow.autofit
 
    For Each Cll In myRange
        If Cll.RowHeight < 20 Then
            Cll.RowHeight = 20
        End If
    Next

End Sub
Dùng vòng lặp đã chạy được nhưng tốc độ với hơn 10000 dòng thì rất là chậm bác ạ. không biết có phương án nào khả thi không ạ!
 
Upvote 0
Cách không sửa code có được không bạn?
 
Upvote 0
Upvote 0
.
Bài đã được tự động gộp:

Dùng vòng lặp đã chạy được nhưng tốc độ với hơn 10000 dòng thì rất là chậm bác ạ. không biết có phương án nào khả thi không ạ!
Sửa chút bé xíu thôi là khác ngay:
Mã:
Sub Autofit_test()
Dim myRange As Range, Cll As Range, lr As Long, iRng As Range

     With Sheet1
        lr = .Range("B" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("B4:B" & lr)
     End With
    
        myRange.EntireRow.autofit
 
    For Each Cll In myRange
        If Cll.RowHeight < 20 Then
            If iRng Is Nothing Then
                Set iRng = Cll
            Else
                Set iRng = Union(iRng, Cll)
            End If
        End If
    Next
iRng.EntireRow.RowHeight = 20
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
.
Bài đã được tự động gộp:


Sửa chút bé xíu thôi là khác ngay:
Mã:
Sub Autofit_test()
Dim myRange As Range, Cll As Range, lr As Long, iRng As Range

     With Sheet1
        lr = .Range("B" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("B4:B" & lr)
     End With
   
        myRange.EntireRow.autofit

    For Each Cll In myRange
        If Cll.RowHeight < 20 Then
            If iRng Is Nothing Then
                Set iRng = Cll
            Else
                Set iRng = Union(iRng, Cll)
            End If
        End If
    Next
iRng.EntireRow.RowHeight = 20
End Sub
À! Có cách Union range mà quên mất. Tôi sẽ nhớ mãi vụ này, cảm ơn bạn!
 
Upvote 0
.
Bài đã được tự động gộp:


Sửa chút bé xíu thôi là khác ngay:
Mã:
Sub Autofit_test()
Dim myRange As Range, Cll As Range, lr As Long, iRng As Range

     With Sheet1
        lr = .Range("B" & .Rows.Count).End(xlUp).Row
        Set myRange = .Range("B4:B" & lr)
     End With
   
        myRange.EntireRow.autofit

    For Each Cll In myRange
        If Cll.RowHeight < 20 Then
            If iRng Is Nothing Then
                Set iRng = Cll
            Else
                Set iRng = Union(iRng, Cll)
            End If
        End If
    Next
iRng.EntireRow.RowHeight = 20
End Sub
Em xin cảm ơn mọi người đã giúp đỡ em ạ!
 
Upvote 0
Web KT

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

Back
Top Bottom