gpt4 book ai didi

excel - Excel 单元格中的自动调整和 minHeight

转载 作者:行者123 更新时间:2023-12-04 22:29:18 27 4
gpt4 key购买 nike

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

我的问题是我想为某些行提供属性“Autofit”和最小高度。最后一个有光学原因。自动调整,因为它可以是内容变成多行。

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

这是我现有的代码:

    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 的尝试。它设置了正确的高度,但随后自动调整再次被停用。

非常感谢

最佳答案

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

  • 如果您想“为某些行提供属性“Autofit”和最小高度。”那么你应该先使用自动适应,然后在你的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 .

    通过反复试验,我发现 40 pt 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

    关于excel - Excel 单元格中的自动调整和 minHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633370/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com