Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 调整两个合并单元格的高度_Excel_Vba - Fatal编程技术网

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;
    }