Code cho tự động RowHeight khi Wraptext

Liên hệ QC

voduyminh0504

Thành viên chính thức
Tham gia
11/2/15
Bài viết
51
Được thích
12
Chào các bạn
Rất mong sớm nhận được sự giúp đỡ của các bạn cho code VBA tự động RowHeight sau khi Wraptext
Tôi có một cột khoảng 5000 rows. Trong đó một số rows cần wraptext.
Tôi dùng code
Sub Wraptext()
Rows("6:5000").Wraptext = True
End Sub
Thì giải quyết được vấn đề.
Nhưng sau đó thì phải tìm xem hàng nào wraptext để mở rộng ra Rowheight thích hợp bằng tay thì nhọc quá.

Mong được các bạn hỗ trợ để khi chạy code trên xong thì tự động Rowheight sẽ mở rộng ra theo quy định của mình (chẳng hạn 60), trong khi tất cả các hàng khác vẫn không thay đổi hoặc giữ mức 16 để hàng nào trước đó đã mở rộng mà không có wraptext thì sẽ trở về mức rowheight 16 theo quy định của code.

Xin cám ơn các bạn trước.
 
Chào các bạn
Rất mong sớm nhận được sự giúp đỡ của các bạn cho code VBA tự động RowHeight sau khi Wraptext
Tôi có một cột khoảng 5000 rows. Trong đó một số rows cần wraptext.
Tôi dùng code
Sub Wraptext()
Rows("6:5000").Wraptext = True
End Sub
Thì giải quyết được vấn đề.
Nhưng sau đó thì phải tìm xem hàng nào wraptext để mở rộng ra Rowheight thích hợp bằng tay thì nhọc quá.

Mong được các bạn hỗ trợ để khi chạy code trên xong thì tự động Rowheight sẽ mở rộng ra theo quy định của mình (chẳng hạn 60), trong khi tất cả các hàng khác vẫn không thay đổi hoặc giữ mức 16 để hàng nào trước đó đã mở rộng mà không có wraptext thì sẽ trở về mức rowheight 16 theo quy định của code.

Xin cám ơn các bạn trước.
Dùng code đó thì Wraptext tất cả vùng đó rồi, còn gì mà dò : "xem hàng nào wraptext để mở rộng ra Rowheight" - vì tất cả đều là vậy

Nên phải xem lại điều kiện là hàng nào, ô nào cần wraptext trước đã???
 
Upvote 0
Dùng code đó thì Wraptext tất cả vùng đó rồi, còn gì mà dò : "xem hàng nào wraptext để mở rộng ra Rowheight" - vì tất cả đều là vậy

Nên phải xem lại điều kiện là hàng nào, ô nào cần wraptext trước đã???

Cám ơn bạn đã phản hồi sớm.
Đúng như bạn nói, dùng code đó thì tất cả các cells đều bị coi là đã wraptext
Nên khi tôi thử với code
Sub AutofitRows()
Dim Cls As Range
For Each Cls In Range("f1602:f1669")
If Cls.Wraptext Then Cls.RowHeight = 60
Next
End Sub
Thì nó mở tất cả các row.
Mà code này cũng chẳng xài được vì nó chậm quá, tôi cần đến khoảng 5000 row, nó xem từng dòng nên quá chậm.

Vấn đề của tôi là VBA còn hạn chế nên không biết cách "xem lại điều kiện là hàng nào, ô nào cần wraptext"
Nếu được nhờ bạn giúp giùm.
 
Upvote 0
Cám ơn bạn đã phản hồi sớm.
Đúng như bạn nói, dùng code đó thì tất cả các cells đều bị coi là đã wraptext
Nên khi tôi thử với code
Sub AutofitRows()
Dim Cls As Range
For Each Cls In Range("f1602:f1669")
If Cls.Wraptext Then Cls.RowHeight = 60
Next
End Sub
Thì nó mở tất cả các row.
Mà code này cũng chẳng xài được vì nó chậm quá, tôi cần đến khoảng 5000 row, nó xem từng dòng nên quá chậm.

Vấn đề của tôi là VBA còn hạn chế nên không biết cách "xem lại điều kiện là hàng nào, ô nào cần wraptext"
Nếu được nhờ bạn giúp giùm.
Thuật toán theo tôi nghĩ là:
Giả sử ban đầu chưa wraptext, chiều cao dòng là 15 (nếu một số wraptext hoặc chiều cao không đồng nhất thì thêm một số bước nữa)
Chọn vùng cần xử lý, wraptext=true hết một lượt, chạy vòng lặp đếm chiều cao của từng dòng, nếu dòng nào thay đổi chiều cao so với ban đầu (quá 15 - tức ký tự trong đó vượt quá độ rộng của cột) thì union một lần vào một Rng
Cuối cùng wraptext=false tất cả, và xử lý Rng có height 60 và wraptext=true
 
Upvote 0
Cám ơn bạn đã gợi ý
Theo gợi ý của bạn thì tôi đặt điều kiện là độ dài số mẫu tự trong cell, khi vượt quá số quy định thì wraptext và chỉ rowheight.
Tôi cho chạy 12.000 dòng thì lệnh thực hiện chỉ trong 1 giây thôi
Một lần nữa rất cám ơn bạn
 
Upvote 0
Web KT

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

Back
Top Bottom