不幸的是,我还没有找到一个好的解决方案。问题出在 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 不会考虑文本跨越多行,并像单行文本一样调整高度。
在对已合并单元格和自动换行的行执行手动自动调整(双击工作表中的行高调整器)时,您将遇到同样的问题。
一种解决方案(如 Gary McGill 所建议的)是使用不相关的工作表。设置列宽以匹配合并单元格的完整宽度。复制文本,格式相同。让单元格自动调整并使用该单元格的值。
下面是一个简化的例子:
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