Excel单元格中的自动调整和最小高度



我在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

我在谷歌上找到的MinRowHeight的尝试。它将高度设置为正确,但随后自动调整将再次停用。

非常感谢

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

  1. 如果您想"为某些行指定属性"Autofit"和最小高度。"那么您应该首先使用auto-fit,然后在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之后,用不适合minHeight点行高的字符填充formatRng中的一个单元格,则此代码不会AutoFit行高。它将仅根据以下规则格式化已包含内容的单元格:(范围formatRng中的所有单元格具有minHeight的最小行高,并且具有不适合于该minHeight的内容的单元格具有由AutoFit决定的较大行高)。

  1. 例如,当您用Range.RowHeight到30显式指定行高时,您告诉excel不要调整高度以达到最佳匹配(即,您禁用了.AutoFit功能),它不会自动将高度调整得更大。没有办法做到这一点

这意味着如果您想解决1中的问题,您需要将行高设置为隐式调整(通过选择"自动调整"作为行高来完成),并以某种方式使其不低于minheight。并且避免行高度的显式调整。

这可以通过使formatRng中每行单元格的字体大小更大来实现,因此这些行中的高度会变得更大以达到minheight,然后当我们在这些行中使用autofit时,它会使"默认行高"(即使是空白单元格)不低于minheight

经过反复试验,我发现40磅Arial字体使行高达到50,下面是一个实现这一点的vba代码:

Sub sheetFormat()
Dim sn As Integer, formatRng As Range
sn = ThisWorkbook.Sheets.Count 'To format the last worksheet in this workbook
Set formatRng = ThisWorkbook.Sheets(sn).Range("B4:H50")
Dim p As Integer, q As Integer, lastColStr As String
p = formatRng.Row      'first row of the range
q = formatRng.Rows.Count + p - 1   'last row of the range
lastColStr = Mid(Cells(1, Columns.Count).Address, 2, 3)  'Last column Name (XFD on my machine)
'    Making Cells in the range "XFD4:XFD50" have 40pt Arial font
With ThisWorkbook.Sheets(sn).Range(lastColStr & p & ":" & lastColStr & q)
.Font.Name = "Arial"
.Font.Size = 40
End With
formatRng.WrapText = True
formatRng.VerticalAlignment = xlCenter  'I added this one just to see the whole contents of the cell
formatRng.Rows.AutoFit
End Sub

有关此技巧的详细信息:

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

最新更新