Во-первых, вам нужно учесть пару фактов:
- Если вы хотите «дать определенным строкам свойство« Автозаполнение »и минимальную высоту».Затем вы должны сначала использовать автоподгонку, а затем в цикле
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
Этот код будет выполнять то, что вы просили, но только если вы форматируете лист после заполнения ячеек содержимым.Этот код НЕ будет AutoFit
высотой строки, если - после вызова этого SUB- вы заполняете ячейку в formatRng
символами, которые не помещаются в minHeight
высоту строки точки.Он будет форматировать только те ячейки, в которых уже есть содержимое, в соответствии с этим правилом: (Все ячейки в диапазоне formatRng
имеют минимальную высоту строки minHeight
, а ячейки, содержимое которых не помещается в эту minHeight
, имеют большую строку-высота определяется AutoFit
).
Когда вы указываете высоту строки
в явном виде , например, с
Range.RowHeight
до 30, вы говорите excel не настраивать высоту для достижения наилучшего соответствия (т. Е. Вы отключаете функцию
.AutoFit
),и он не будет регулировать высоту больше автоматически.Нет просто способов сделать это.
Это означает, что вам нужно оставить высоту строки равной , неявно настроить (делается путем выбора AutoFit в качестве высоты строки) и, каким-то образомустановите значение не ниже minheight
, если вы хотите решить проблему в 1. и избегайте явной настройки высоты строки.
Это можно сделать, установив размер шрифта ячейки в каждомстрока в нашем formatRng
больше, поэтому высота в этих строках будет увеличиваться, чтобы достичь minheight
, а затем, когда мы используем autofit
в этих строках, получится «высота строки по умолчанию» - даже пустые ячейки -не ниже minheight
.
Методом проб и ошибок я обнаружил, что шрифт Arial размером 40 пт делает высоту строки 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