Excel 调整两个合并单元格的高度
我的目标是合并单元格的高度自动调整到其内容。这适用于一个单元格,代码如下:Excel 调整两个合并单元格的高度,excel,vba,Excel,Vba,我的目标是合并单元格的高度自动调整到其内容。这适用于一个单元格,代码如下: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim CurrentRowHeight As Single, MergedCellRgWidth As Single Dim h, rng As Range Set rng = Selection If ActiveCe
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim h, rng As Range
Set rng = Selection
If ActiveCell.MergeCells Then
With ActiveCell.MergeArea
If .WrapText = True Then
With rng
.UnMerge
.Cells(1).EntireRow.AutoFit
h = .Cells(1).RowHeight
.Merge
.EntireRow.AutoFit
With .Cells(1).MergeArea
.Cells(.Cells.Count).RowHeight = (h - .Height + 14.25)
End With
End With
End If
End With
End If
End Sub
但是,如果同一行中有两个单元格,而第二个单元格较短,则会调整为第二个。。(参见下面的示例)
有没有办法解决这个问题,使其仅在同一行中没有高度更高的单元格时进行调整
这是一个更新版本。顺便说一句,单元格都在同一列中(AS和AU)
我不知怎的不能让它工作
private void MergeAndFit(Range range)
{
range.MergeCells = false;
double cellWidth = range.Columns[1].ColumnWidth;
double mergeWidth = 0;
foreach (Range cm in range)
{
cm.WrapText = true;
mergeWidth += cm.ColumnWidth;
}
mergeWidth = mergeWidth + range.Cells.Count * 0.66;
range.Columns[1].ColumnWidth = mergeWidth;
range.EntireRow.AutoFit();
double newRowHeight = range.RowHeight;
range.Columns[1].ColumnWidth = cellWidth;
range.MergeCells = true;
range.RowHeight = newRowHeight;
}
上面的函数接受excel范围对象并合并单元格。将行高设置为“最大”以显示所有内容。我不确定这是否适合您,但您能否将其转换为vb.net并告诉我它是否有效。对不起……您的示例中有什么问题?它不是根据内容调整的吗?这个例子没有错,但是如果我双击较小的单元格,它会调整其高度,我需要一个解决方案,它不会这样做,除非它是此行中高度最大的单元格。似乎如果不拟合行中的每个单元格,你就不知道哪个单元格应该是最大的。你必须浏览每一列,并记录每一列的高度(或至少记录最大安装高度)。如果安装后续单元格导致行高变小,请将其重置为最大值。我明白了。你试过@TimWilliams的建议吗?我试过了!我把我所做的张贴在上面。如果能得到更多的帮助,我将不胜感激。
private void MergeAndFit(Range range)
{
range.MergeCells = false;
double cellWidth = range.Columns[1].ColumnWidth;
double mergeWidth = 0;
foreach (Range cm in range)
{
cm.WrapText = true;
mergeWidth += cm.ColumnWidth;
}
mergeWidth = mergeWidth + range.Cells.Count * 0.66;
range.Columns[1].ColumnWidth = mergeWidth;
range.EntireRow.AutoFit();
double newRowHeight = range.RowHeight;
range.Columns[1].ColumnWidth = cellWidth;
range.MergeCells = true;
range.RowHeight = newRowHeight;
}