Excel单元格中的自动拟合和最小高度

时间:2019-02-11 15:02:03

标签: excel vba

我在Excel中创建了一个小宏,该宏会插入具有某些名称的新工作表并进行一些调整(格式,背景颜色,列宽等)。 这也很棒。

我的问题是我想给某些行“自动调整”属性和最小高度。最后有光学原因。自动调整内容,因为内容可能会变成多行。

不幸的是,我无法将两者结合起来。我有一个身高或自动调整高度。

这是我现有的代码:

    Sheets(sn).Range("B4:H50").WrapText = True
    Sheets(sn).Range("B4:H50").Rows.AutoFit
   'Sheets(sn).Range("B4:H50").RowHeight = 30

    Dim Rng As Range
    Sheets(sn).Range("A4:H50").Select
    For Each Rng In Selection.Cells
        Rng.RowHeight = Application.WorksheetFunction.Min(Rng.RowHeight, 50)
    Next Rng

我在Google上发现的MinRowHeight的尝试。它可以正确设置高度,但随后会再次禁用自动拟合功能。

非常感谢您

1 个答案:

答案 0 :(得分:1)

首先,您需要考虑几个事实:

  1. 如果要“给某些行属性“自动调整”和最小高度”。然后,您应该首先使用自动拟合,然后在for each循环中使用Max函数而不是Min。像这样:
Sub sheetFormat()

    Dim sn As Integer, formatRng As Range, minHeight

    sn = ThisWorkbook.Sheets.Count 'To format the last worksheet in this workbook
    Set formatRng = ThisWorkbook.Sheets(sn).Range("B4:H50")
    minHeight = 30 'or 50

    formatRng.WrapText = True
    formatRng.Rows.AutoFit

    Dim Rng As Range
    For Each Rng In formatRng
        Rng.RowHeight = Application.WorksheetFunction.Max(Rng.RowHeight, minHeight)
    Next Rng

End Sub

该代码将满足您的要求,但前提是您在用内容填充单元格后格式化工作表。如果在调用此SUB之后,用不符合AutoFit点行高的字符填充formatRng中的单元格,则此代码将不会minHeight行高。它将仅根据以下规则格式化已具有内容的单元格: (formatRng范围内的所有单元格的最小行高为minHeight,内容不适合此minHeight的单元格的行高由AutoFit决定)。

  1. 例如,当您用Range.RowHeight显式指定行高 到30时,您就是在告诉excel不要调整高度以达到最佳匹配度(即,您禁用{{1 }}功能),并且不会自动将高度调整为更大。只是没有办法。

这意味着您需要将行高度设置为隐式调整(通过选择“自动调整”作为行高来完成),并在某种程度上使它不低于.AutoFit您想解决1.中的问题,并避免显式调整行高。

这可以通过增大minheight中每一行的单元格的字体大小来完成,因此这些行中的高度将变大以达到formatRng,然后使用{ {1}}在这些行中,它将使“默认行高”(即使是空白单元格)也不会低于minheight

通过反复试验,我发现40 pt Arial字体使行高达到50,这是通过vba代码实现的:

autofit

有关此技巧的详细信息:

https://excelribbon.tips.net/T005663_Changing_Default_Row_Height.html