- Tham gia
- 17/8/08
- Bài viết
- 8,662
- Được thích
- 16,718
- Giới tính
- Nam
Các bài mà trước đây mà nhiều người viết trong đó có tôi đều cho ra kết quả, nhưng thật sự nó vẫn chưa fit hoàn toàn, có khi dư chiều cao hàng (Height) rất nhiều.
Sau khi ngồi tính toán lại tôi viết thủ tục dưới đây, nhằm fit lại những cái chênh lệch đó, đồng thời chúng ta có thể Fit cho các vùng merge cells nhiều hàng, nhiều cột.
Thủ tục:
Cách thực hiện:
Ví dụ khối ô MergeCell cần AutoFit là: C6:L9
Ta chỉ cần lấy tham chiếu ô đầu tiên là C6 (dùng cả C6:L9 cũng OK)
Và thủ tục chạy chỉ như sau:
Hoặc:
Hoặc thậm chí chỉ là một cell nào đó trong khối mergecell:
Sau khi ngồi tính toán lại tôi viết thủ tục dưới đây, nhằm fit lại những cái chênh lệch đó, đồng thời chúng ta có thể Fit cho các vùng merge cells nhiều hàng, nhiều cột.
Thủ tục:
Mã:
Sub MergeCellFit(ByVal MergeCells As Range)
Dim Diff As Single
Dim FirstCell As Range, MergeCellArea As Range
Dim Col As Long, ColCount As Long, RowCount As Long
Dim FirstCellWidth As Double, FirstCellHeight As Double, MergeCellWidth As Double
If MergeCells.Count = 1 Then
Set MergeCellArea = MergeCells.MergeArea
Else
Set MergeCellArea = MergeCells
End If
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With MergeCellArea
ColCount = .Columns.Count
RowCount = .Rows.Count
.WrapText = True
If RowCount = 1 And ColCount = 1 Then
.EntireRow.AutoFit
GoTo ExitSub
End If
Set FirstCell = .Cells(1, 1)
FirstCellWidth = FirstCell.ColumnWidth
Diff = 0.75
For Col = 1 To ColCount
MergeCellWidth = MergeCellWidth + .Cells(1, Col).ColumnWidth + Diff
Next
.MergeCells = False
FirstCell.ColumnWidth = MergeCellWidth - Diff
.EntireRow.AutoFit
FirstCellHeight = FirstCell.RowHeight
.MergeCells = True
FirstCell.ColumnWidth = FirstCellWidth
FirstCellHeight = FirstCellHeight / RowCount
.RowHeight = FirstCellHeight
End With
ExitSub:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Cách thực hiện:
Ví dụ khối ô MergeCell cần AutoFit là: C6:L9
Ta chỉ cần lấy tham chiếu ô đầu tiên là C6 (dùng cả C6:L9 cũng OK)
Và thủ tục chạy chỉ như sau:
Mã:
MergeCellFit Range("[B][COLOR=#FF0000]C6[/COLOR][/B]")
Hoặc:
Mã:
MergeCellFit Range("[B]C6:L9[/B]")
Hoặc thậm chí chỉ là một cell nào đó trong khối mergecell:
Mã:
MergeCellFit Range("[B][COLOR=#FF0000]E6[/COLOR][/B]")