Autofit会在包含Wrapped-Text的单元格上正确调整行大小

时间:2014-11-05 14:59:50

标签: excel excel-vba vba

PRELUDE:这不是一个重复,有一个类似的问题HERE,但他们的解决方案对我的问题不起作用。 (他们的解决方案适用于以下代码)

我试图让整行的高度自动调整具有最大文本块的单元格。

我的代码(摘要):

               With my_xl_workbook.Sheets(1).Range(rng)
                    .WrapText = True
                    .Merge
                    .value = DegreesInformationArray(j, i)
                    .Borders.LineStyle = 1
                    .Borders.Weight = 4
                    .EntireRow.AutoFit
               End With

我的电子表格输出:

enter image description here

我预期的电子表格输出是什么:

enter image description here

我也尝试过更改设置属性的顺序,但没有成功。

欢迎提出任何提示,建议或姓名。 :)

(编辑:插入正确的图像)

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

Sub fitheight()
  Dim h, ma
  h = 0
  For Each c In Selection
    With c
      ma = .MergeArea.Address
      If InStr(ma, .Address) = 1 Then
        .UnMerge
        .EntireRow.AutoFit
        If .Height > h Then
          h = .Height
        End If
        ActiveSheet.Range(ma).Merge
        .RowHeight = h
      End If
    End With
  Next
End Sub

工作原理

该程序假设您根据选择自动设置高度。它可以很容易地适应在一个范围内操作。

它使用两个变量:

  • h保持最大身高
  • ma保存每个单元格合并区域的范围

它遍历选择中的每个单元格,在那里:

  1. ma变量中加载合并区域。
  2. 测试合并区域是否以单元格的地址开头。请注意,Selection将多次遍历合并的单元格。例如,如果合并了单元格C3D3,则选择将遍历C3D3。我们只对第一个合并单元感兴趣,我们可以使用Instr测试来完成。
  3. 取消单元格。
  4. 将行自动调整到单元格的高度。
  5. 根据h变量测试高度。如果更大,则将h设置为新的高度。
  6. 使用ma变量重新合并单元格。
  7. 将行高设置为h,此时此高度是目前为止的最大高度。