0

我在excel中遇到了一个小问题。我没有使用 excel 宏的经验,如果能得到一些帮助,我将不胜感激。我正在尝试找到一个宏来调整合并单元格的高度以适合其内容。自动地。我发现可以对多列中的单元格执行此操作,但不能对多行执行此操作,也不能自动执行此操作:

 Sub AutoFitMergedCellRowHeight()
 Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
 Dim CurrCell As Range
 Dim ActiveCellWidth As Single, PossNewRowHeight As Single
 Dim iX As Integer

 If ActiveCell.MergeCells Then
    With ActiveCell.MergeArea
         If .Rows.Count = 1 And .WrapText = True Then
             Application.ScreenUpdating = False
             CurrentRowHeight = .RowHeight
             ActiveCellWidth = ActiveCell.ColumnWidth
             For Each CurrCell In Selection
                 MergedCellRgWidth = CurrCell.ColumnWidth + _
                    MergedCellRgWidth
                 iX = iX + 1
             Next
             MergedCellRgWidth = MergedCellRgWidth + (iX - 1) * 0.71
             .MergeCells = False
             .Cells(1).ColumnWidth = MergedCellRgWidth
             .EntireRow.AutoFit
             PossNewRowHeight = .RowHeight
             .Cells(1).ColumnWidth = ActiveCellWidth
             .MergeCells = True
             .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
              CurrentRowHeight, PossNewRowHeight)
         End If
     End With
 End If

结束子

最终结果应如下所示:在此处输入图像描述 提前谢谢您。

4

3 回答 3

4

就像是:

Dim h, rng As Range
Set rng = Selection

With rng
    .UnMerge
    .Cells(1).EntireRow.AutoFit
    h = .Cells(1).RowHeight
    .Merge
    .EntireRow.AutoFit
    With .Cells(1).MergeArea
        .Cells(.Cells.Count).RowHeight = _
           .Cells(.Cells.Count).RowHeight + (h - .Height)
    End With
End With
于 2013-10-15T16:05:48.310 回答
4

如果您允许 Excel 工作表为您完成一些繁重的工作,则有一种更简单的方法。

以下示例适用于常见情况,即您有一些包含几列但只有一行的单元格(即,某些列合并在一行上)。通常的问题是合并单元格中的换行文本的行高在某些情况下不能适应换行文本的高度(例如,公式或数据库查找的结果会提供大量且不同数量的文本)

要解决此问题,请通过在用户不可见的某些列中执行以下操作来模拟合并单元格的单单元格版本:

  1. 在与合并单元格位于同一行的单个单元格中,放置相同的公式或简单地将公式设置为对合并单元格的引用。
  2. 对所有合并的单元格执行此操作。
  3. 使单个单元格版本的宽度等于每个合并单元格的宽度。您现在拥有一组合并单元格的单单元格版本,位于相同的行上,但具有相同的列宽。
  4. 命名这些单个单元格。
  5. 编写一个函数,遍历所有这些命名的单个单元格区域,并为每个区域调用以下函数:

    Private Sub AutosizeLongFormInput(rng As Range)
        If Not rng.EntireRow.Hidden = True Then
            rng.EntireRow.AutoFit
        End If
    End Sub
    

于 2014-05-29T22:29:37.510 回答
0

那这个呢:

'rRang is range of cells which are merged together

Sub AutoFitRowMergedCells(rRang As Range)

Dim iColW As Integer, iColWold As Integer, I As Integer

iColW = 0

For I = 1 To rRang.Columns.Count
    iColW = iColW + rRang.Range("A" & I).ColumnWidth
Next I

rRang.UnMerge
iColWold = rRang.Range("A1").ColumnWidth
rRang.Range("A1").ColumnWidth = iColW
rRang.Range("A1").EntireRow.AutoFit
rRang.Range("A1").ColumnWidth = iColWold
rRang.Merge

End Sub
于 2018-03-13T01:18:29.430 回答