К сожалению, я не нашел хорошего решения.
Проблема возникает из-за ошибки в Excel 2000. Я не знаю, относится ли она также к более поздним версиям.
Проблема проявляется при объединении ячеек по горизонтали.
Высота строки не может автоматически настраиваться при объединении ячеек.
В следующем примере кода показана проблема
Dim r As Range
Set r = Sheet1.Range("B2")
Range(r, r(1, 2)).Merge
r.Value = ""
r.Value = "asdg lakj dsgl dfgjdfgj dgj dfgj dfgjdgjdfgjdfgjd"
r.WrapText = True
r.EntireRow.AutoFit
В этом случае r.EntireRow.AutoFit не будет учитывать, что текст занимает несколько строк, и регулирует высоту, как если бы это была одна строка текста.
У вас будет та же проблема, когда вы выполняете автоматическое автоопределение (двойной щелчок на регуляторе высоты строки на листе) для строки, которая объединяет ячейки и перенос слов.
Решение (как предложил Гэри МакГилл) заключается в использовании несвязанного листа. Установите ширину столбца, чтобы она соответствовала полному объему слитых ячеек. Скопируйте текст, с тем же форматированием. Позвольте ячейке автоматически настраиваться и используйте значения этих ячеек.
Ниже приведен упрощенный пример:
Public Sub test()
Dim widthInPoints As Double
Dim mergedCells As Range
Set mergedCells = Sheet1.Range("B2:C2")
widthInPoints = mergedCells.width
Dim testCell As Range
Set testCell = Sheet2.Range("A1")
testCell.EntireColumn.columnWidth = ConvertPointsToColumnWidth(widthInPoints, Sheet2.Range("A1"))
testCell.WrapText = True
testCell.Value = mergedCells.Value
'Text formating should be applied as well, if any'
testCell.EntireRow.AutoFit
mergedCells.EntireRow.rowHeight = testCell.rowHeight
End Sub
Private Function ConvertPointsToColumnWidth(widthInPoints As Double, standardCell As Range) As Variant
ConvertPointsToColumnWidth = (widthInPoints / standardCell.width) * standardCell.columnWidth
End Function