我在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的尝试。它可以正确设置高度,但随后会再次禁用自动拟合功能。
非常感谢您
答案 0 :(得分: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
决定)。
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