Note: The other languages of the website are Google-translated. Back to English
Đăng nhập  \/ 
x
or
x
Đăng ký  \/ 
x

or

Làm cách nào để tự động điều chỉnh chiều cao hàng của các ô đã hợp nhất trong Excel?

Trong Excel, chúng tôi có thể nhanh chóng điều chỉnh chiều cao hàng để vừa với nội dung ô bằng cách sử dụng AutoFit Row Height nhưng chức năng này sẽ hoàn toàn bỏ qua các ô đã hợp nhất. Có nghĩa là, bạn không thể áp dụng AutoFit Row Height tính năng thay đổi kích thước chiều cao hàng của các ô đã hợp nhất, bạn cần phải điều chỉnh thủ công chiều cao hàng cho từng ô đã hợp nhất. Trong bài viết này, tôi có thể giới thiệu một số phương pháp nhanh chóng để giải quyết vấn đề này.

Tự động điều chỉnh chiều cao hàng của các ô đã hợp nhất với mã VBA

Tab Office Cho phép Chỉnh sửa và Duyệt theo Tab trong Office, và Giúp Công việc của Bạn Dễ dàng hơn Nhiều ...
Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn
  • Tái sử dụng mọi thứ: Thêm các công thức, biểu đồ và bất kỳ thứ gì khác được sử dụng nhiều nhất hoặc phức tạp vào mục yêu thích của bạn và nhanh chóng sử dụng lại chúng trong tương lai.
  • Hơn 20 tính năng văn bản: Trích xuất số từ chuỗi văn bản; Trích xuất hoặc loại bỏ một phần nội dung; Chuyển đổi số và tiền tệ sang từ tiếng Anh.
  • Công cụ hợp nhất: Nhiều Workbook và Sheets thành một; Hợp nhất nhiều ô / hàng / cột mà không làm mất dữ liệu; Hợp nhất các hàng và tổng trùng lặp.
  • Công cụ tách: Chia Dữ liệu thành Nhiều Trang tính Dựa trên Giá trị; Một sổ làm việc cho nhiều tệp Excel, PDF hoặc CSV; Một cột đến nhiều cột.
  • Dán bỏ qua Hàng ẩn / được lọc; Đếm và tổng theo Màu nền; Gửi hàng loạt email được cá nhân hóa cho nhiều người nhận.
  • Bộ lọc siêu: Tạo lược đồ lọc nâng cao và áp dụng cho bất kỳ trang tính nào; Sắp xếp theo tuần, ngày, tần suất và hơn thế nữa; Lọc bằng cách in đậm, công thức, chú thích ...
  • Hơn 300 tính năng mạnh mẽ; Hoạt động với Office 2007-2019 và 365; Hỗ trợ tất cả các ngôn ngữ; Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn.

mũi tên màu xanh bong bóng bên phải Tự động điều chỉnh chiều cao hàng của các ô đã hợp nhất với mã VBA


Giả sử tôi có một trang tính với một số ô đã hợp nhất như hình minh họa sau và bây giờ tôi cần thay đổi kích thước chiều cao hàng ô để hiển thị toàn bộ nội dung, mã VBA dưới đây có thể giúp bạn tự động điều chỉnh chiều cao hàng của nhiều ô đã hợp nhất, vui lòng thực hiện như sau:

doc-autofit-merge-cells-1

1. Giữ ALT + F11 chìa khóa và nó mở Cửa sổ Microsoft Visual Basic for Applications.

2. Nhấp chuột Chèn > Mô-đunvà dán mã sau vào Cửa sổ mô-đun.

Mã VBA: Tự động điều chỉnh chiều cao hàng của nhiều ô được hợp nhất
Option Explicit
Public Sub AutoFitAll()
  Call AutoFitMergedCells(Range("a1:b2"))
   Call AutoFitMergedCells(Range("c4:d6"))
    Call AutoFitMergedCells(Range("e1:e3"))
End Sub
Public Sub AutoFitMergedCells(oRange As Range)
  Dim tHeight As Integer
  Dim iPtr As Integer
  Dim oldWidth As Single
  Dim oldZZWidth As Single
  Dim newWidth As Single
  Dim newHeight As Single
  With Sheets("Sheet4")
    oldWidth = 0
    For iPtr = 1 To oRange.Columns.Count
      oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
    oRange.MergeCells = False
    newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
    oldZZWidth = .Range("ZZ1").ColumnWidth
    .Range("ZZ1") = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
    .Range("ZZ1").WrapText = True
    .Columns("ZZ").ColumnWidth = oldWidth
    .Rows("1").EntireRow.AutoFit
    newHeight = .Rows("1").RowHeight / oRange.Rows.Count
    .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).RowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    .Range("ZZ1").ClearContents
    .Range("ZZ1").ColumnWidth = oldZZWidth
  End With
End Sub

Ghi chú:

(1.) Trong đoạn mã trên, bạn có thể thêm các phạm vi mới chỉ cần sao chép Gọi AutoFitMergedCells (Phạm vi ("a1: b2")) tập lệnh nhiều lần tùy thích và thay đổi các phạm vi ô đã hợp nhất theo nhu cầu của bạn.

(2.) Và bạn nên thay đổi tên trang tính hiện tại Sheet4 đến tên trang tính đã sử dụng của bạn.

3. Sau đó nhấn F5 để chạy mã này và bây giờ, bạn có thể thấy tất cả các ô được hợp nhất đã được tự động điều chỉnh nội dung ô của chúng, xem ảnh chụp màn hình:

doc-autofit-merge-cells-1


Bài viết liên quan:

Làm thế nào để tự động điều chỉnh chiều rộng cột trong Excel?


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Super Formula Bar (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2019 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ các tính năng dùng thử miễn phí 30 ngày. Đảm bảo hoàn tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng

<p >


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Super Formula Bar (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2019 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ các tính năng dùng thử miễn phí 30 ngày. Đảm bảo hoàn tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
</ p >

Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Art · 1 years ago
    Dang it, copy/paste bit me. Also, with explicit sheet references the With isn't needed:

    Public Sub AutoFitMergedCells(oRange As Range, ByVal dblWidth As Double)

    oRange.MergeCells = False
    Sheet1.Range("A1") = oRange.Cells(1, 1).Value
    Sheet1.Range("A1").WrapText = True
    Sheet1.Columns(1).ColumnWidth = dblWidth
    Sheet1.Rows(1).EntireRow.AutoFit
    oRange.Parent.Rows(oRange.Row).Resize(oRange.Rows.Count).RowHeight _
    = Sheet1.Rows(1).RowHeight / oRange.Rows.Count
    oRange.MergeCells = True
    oRange.WrapText = True

    End Sub
  • To post as a guest, your comment is unpublished.
    Art · 1 years ago
    Thank you, that helped me with a sheet I've not been happy with for years.

    I did change things around a bit, my merged cells are all in one column so I calculated that outside the loop and passed it. I also inserted a Sheet1 that is hidden, and manipulated the columns/rows there so as to not affect the sheet I'm working on. The references should probably be more explicit:

    Public Sub AutoFitMergedCells(oRange As Range, ByVal dblWidth As Double)

    Dim dblHeight As Double

    With oRange.Parent
    oRange.MergeCells = False
    Sheet1.Range("A1") = oRange.Cells(1, 1).Value
    Sheet1.Range("A1").WrapText = True
    Sheet1.Columns(1).ColumnWidth = dblWidth
    Sheet1.Rows(1).EntireRow.AutoFit
    dblHeight = Sheet1.Rows(1).RowHeight / oRange.Rows.Count
    oRange.Parent.Rows(oRange.Row).Resize(oRange.Rows.Count).RowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    Sheet1.Range("A1").ClearContents
    End With

    End Sub
  • To post as a guest, your comment is unpublished.
    José · 2 years ago
    This not work for me}
  • To post as a guest, your comment is unpublished.
    saravanan · 2 years ago
    not working , ye password set in your code not working in your code
  • To post as a guest, your comment is unpublished.
    dougs · 2 years ago
    I believe the reason that the row heights do not calculate properly is related to these lines of code
    For iPtr = 1 To oRange.Columns.Count
    oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth

    The variable OldWidth gets set to the sum of the column widths in the range, but for some reason it gets reset to only the width of the first two columns. The first 3 lines of code are therefore made redundant by the 4th line. When I removed the line it was much better, but the other issue I found was that you have to make sure that the font and font size of the temporary cell (ZZ1 in the example code) must match the font and size of the merged cells; otherwise, text will not wrap in the same way as the merged cells wrap and may not be the correct height.
  • To post as a guest, your comment is unpublished.
    toowaki · 3 years ago
    I made add-in for Auto fit row height of multiple merged cells.
    Please use this, if you want to autofit row hight.
    [Release Ver2.6 · toowaki/AutoFitRowEx · GitHub]
    https://github.com/toowaki/AutoFitRowEx/releases/tag/2.6.2
    • To post as a guest, your comment is unpublished.
      ABC · 3 years ago
      This is pretty helpful, thanks!
  • To post as a guest, your comment is unpublished.
    Krishna · 3 years ago
    I am trying to understand the necessity of Line 19. You are assigning a value again to OldWidth. Can you please explain?
  • To post as a guest, your comment is unpublished.
    Chris · 4 years ago
    My code will not even run I just get a compile error when I try to call the AutoFitMergedCells - Expected Function or variable?
  • To post as a guest, your comment is unpublished.
    Aperture · 4 years ago
    Because the "helper" cell of ZZ1 is using the first row (column ZZ, row 1), if there is ANYTHING in row 1 taller than the text in the row you want to adjust, your resulting height will be taller than what you want.

    To fix this, I made the helper cell the same column as the first column in the oRange and set the row number to the very last row in Excel. Hope this helps you like it does me. 8)

    [u]My Code:[/u]

    Option Explicit
    Public Sub AutoFitAll()
    Call AutoFitMergedCells(Range("A2:Z2"))

    End Sub
    Public Sub AutoFitMergedCells(oRange As Range)
    Dim tHeight As Integer
    Dim iPtr As Integer
    Dim oldWidth As Single
    Dim oldZZWidth As Single
    Dim newWidth As Single
    Dim newHeight As Single
    With Sheets("Sheet1")
    oldWidth = 0
    For iPtr = 1 To oRange.Columns.Count
    oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
    oRange.MergeCells = False
    newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
    oldZZWidth = .Cells("1048576", oRange.Column).ColumnWidth
    .Cells("1048576", oRange.Column) = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
    .Cells("1048576", oRange.Column).WrapText = True
    .Columns(oRange.Column).ColumnWidth = oldWidth
    .Rows("1048576").EntireRow.AutoFit
    newHeight = .Rows("1048576").RowHeight / oRange.Rows.Count
    .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).RowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    .Cells("1048576", oRange.Column).ClearContents
    .Cells("1048576", oRange.Column).ColumnWidth = oldZZWidth
    End With
    End Sub
  • To post as a guest, your comment is unpublished.
    Retha · 4 years ago
    Thank you for the code. However, the height of my rows do adjust, but now enough. How can I rectify this?
  • To post as a guest, your comment is unpublished.
    Jeff · 4 years ago
    Thanks for posting this, I'm decent with excel and can usually figure out my adjustments but I can't seem to figure out a fix for an issue I'm having, or if one even exists. I have huge amounts of data in the cells (exceeding the single cell height limit of 409.5). The problem is this VBA runs with that same limitation. So some of my data gets cut off even though the rows are merged and the combined cell height allowance is 819, since the VBA adjusts the cell height based off the single ZZ1 cell. Is there anyway to adjust the code to get it to allow the adjusted cell height to include the available height in the merged rows or am I asking for the impossible? Thanks.
  • To post as a guest, your comment is unpublished.
    Vivi · 4 years ago
    Works perfect, but rows are too high! Can we fix this?
  • To post as a guest, your comment is unpublished.
    Hana · 4 years ago
    Brilliant but exactly the same problem as Danielle, rows are too high now. Please someone help!
  • To post as a guest, your comment is unpublished.
    Susan · 4 years ago
    Thanks so much for the code. Is there any way to make the macro run as soon as you type text in a field and hit enter?
  • To post as a guest, your comment is unpublished.
    Viktor · 4 years ago
    Thanks for the code, pretty much what I needed.

    Two remarks, though:
    1) when I run the macro in the same row as the "helper"cell (ZZ1), autofit (line 26) will mess up, because the whole string is fitted into one narow cell. I recommend adding

    oRange.WrapText = False

    in the beginning (or moving the helper cell somewhere out of the way, if possible).
    2) what's the purpose of line 19? You claculate oldWidth in lines 16-18, but then override the calculation in line 19, using only two columns. When I tried the sub on a three-column-wide merged cells, it worked better when I ignored the line...

    Thanks again
  • To post as a guest, your comment is unpublished.
    Afshin · 5 years ago
    Thanks a lot for the code! I have same problem with this code such as DANIËLLE_01.
  • To post as a guest, your comment is unpublished.
    Daniëlle_01 · 5 years ago
    Thanks a lot for the code! It finally works, but... My row height becomes too height. Is there a solution for?

    Thanks a lot!

    [u]This is my code:[/u]

    Option Explicit
    Public Sub AutoFitAll()
    Call AutoFitMergedCells(Range("b162:i162"))
    Call AutoFitMergedCells(Range("b166:i166"))
    Call AutoFitMergedCells(Range("b168:i168"))
    Call AutoFitMergedCells(Range("b170:i170"))
    Call AutoFitMergedCells(Range("b172:i172"))
    End Sub
    Public Sub AutoFitMergedCells(oRange As Range)
    Dim tHeight As Integer
    Dim iPtr As Integer
    Dim oldWidth As Single
    Dim oldZZWidth As Single
    Dim newWidth As Single
    Dim newHeight As Single
    With Sheets("Rapport")
    oldWidth = 0
    For iPtr = 1 To oRange.Columns.Count
    oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
    oRange.MergeCells = False
    newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
    oldZZWidth = .Range("ZZ1").ColumnWidth
    .Range("ZZ1") = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
    .Range("ZZ1").WrapText = True
    .Columns("ZZ").ColumnWidth = oldWidth
    .Rows("1").EntireRow.AutoFit
    newHeight = .Rows("1").RowHeight / oRange.Rows.Count
    .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).RowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    .Range("ZZ1").ClearContents
    .Range("ZZ1").ColumnWidth = oldZZWidth
    End With
    End Sub
    • To post as a guest, your comment is unpublished.
      Aperture · 4 years ago
      Because the "helper" cell of ZZ1 is using the first row (column ZZ, row 1), if there is ANYTHING in row 1 taller than the text in the row you want to adjust, your resulting height will be taller than what you want.

      To fix this, I made the helper cell the same column as the first column in the oRange and set the row number to the very last row in Excel. Hope this helps you like it does me. 8)

      [u]My Code:[/u]

      Option Explicit
      Public Sub AutoFitAll()
      Call AutoFitMergedCells(Range("A2:Z2"))

      End Sub
      Public Sub AutoFitMergedCells(oRange As Range)
      Dim tHeight As Integer
      Dim iPtr As Integer
      Dim oldWidth As Single
      Dim oldZZWidth As Single
      Dim newWidth As Single
      Dim newHeight As Single
      With Sheets("Sheet1")
      oldWidth = 0
      For iPtr = 1 To oRange.Columns.Count
      oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
      Next iPtr
      oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
      oRange.MergeCells = False
      newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
      oldZZWidth = .Cells("1048576", oRange.Column).ColumnWidth
      .Cells("1048576", oRange.Column) = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
      .Cells("1048576", oRange.Column).WrapText = True
      .Columns(oRange.Column).ColumnWidth = oldWidth
      .Rows("1048576").EntireRow.AutoFit
      newHeight = .Rows("1048576").RowHeight / oRange.Rows.Count
      .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).RowHeight = newHeight
      oRange.MergeCells = True
      oRange.WrapText = True
      .Cells("1048576", oRange.Column).ClearContents
      .Cells("1048576", oRange.Column).ColumnWidth = oldZZWidth
      End With
      End Sub
    • To post as a guest, your comment is unpublished.
      Viktor · 4 years ago
      Hi Danielle,

      I ran into the same problem, when running the macro a second time in the first row. The code uses

      .Rows("1").EntireRow.AutoFit (line 26)

      and if you run in on, say A1:B1, your A1 cell has WordWrapping set to ON from line 30.

      The easiest solution seems to be switching WordWrapping off at the beginning of the sub. Add

      oRange.WrapText = True

      between lines 13 and 14 and you should be OK.
  • To post as a guest, your comment is unpublished.
    Dina · 5 years ago
    I have the following entered, but I get an error message "Run-time error '13': Type mismatch" Help?


    Option Explicit
    Public Sub AutoFitAll()
    Call AutoFitMergedCells(Range("a8:h8"))
    Call AutoFitMergedCells(Range("a10:h10"))
    Call AutoFitMergedCells(Range("a11:h11"))
    Call AutoFitMergedCells(Range("b17:h17"))
    Call AutoFitMergedCells(Range("b22:h22"))
    Call AutoFitMergedCells(Range("b24:h24"))
    Call AutoFitMergedCells(Range("a26:h26"))
    Call AutoFitMergedCells(Range("a28:h28"))

    End Sub
    Public Sub AutoFitMergedCells(oRange As Range)
    Dim tHeight As Integer
    Dim iPtr As Integer
    Dim oldWidth As Single
    Dim oldZZWidth As Single
    Dim newWidth As Single
    Dim newHeight As Single
    With Sheets("Offer Letter")
    oldWidth = 0
    For iPtr = 1 To oRange.Columns.Count
    oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
    oRange.MergeCells = False
    newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
    oldZZWidth = .Range("ZZ1").ColumnWidth
    .Range("ZZ1") = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
    .Range("ZZ1").WrapText = True
    .Columns("ZZ").ColumnWidth = oldWidth
    .Rows("1").EntireRow.AutoFit
    newHeight = .Rows("1").rowHeight / oRange.Rows.Count
    .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).rowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    .Range("ZZ1").ClearContents
    .Range("ZZ1").ColumnWidth = oldZZWidth
    End With
    End Sub
  • To post as a guest, your comment is unpublished.
    Joe Dell · 5 years ago
    This code causes additional rows to be deleted. I have numbers on left side and columns next to it are merged/wrapped data. For example, in a Job description, list responsibilities with numbers followed by explanation of duty. Any thoughts? Thanks.