设置已用行的最小行高

Set Minimum Row Height for Used Rows

我有以下代码,我似乎无法正常工作。

如果我删除 lastquoterow 并将其更改为 A13:A250 那么它可以工作,但是它会减慢代码速度,因为它必须遍历整个范围并检查它是否需要调整大小(由于还没有数据存在,这意味着将调整整个范围的大小)。这也会导致一些视觉问题,因为它会导致稍后在后续代码中插入的行的间距比需要的更宽。

我也不能让它调整 A1-A12 的大小,因为这是我必须保留的 header 范围 static.I 我试图告诉它从我的范围 A13 开始开始,转到最后使用的行,如果行大小为 < 21,将高度设置为 21。然后我的下一个代码阶段开始并插入更多处理合并单元格等的数据,它有自己的代码设置它的行高,不能乱用。

我把这个搞砸了什么?

    Dim lastquoterow
        
        lastquoterow = quote1.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
        
    For Each c In Range("A13" & lastquoterow)
        If c.RowHeight < 21 Then
            c.RowHeight = 21
        End If
    Next

你必须决定 lastquoterow 是什么。如果是一行,那么应该是一个Long。虽然,最后的 .Row 声明它应该被转换为 Long.

无论如何,这对我有用。 50 被硬编码是有原因的,就我没有你的输入而言:

Sub TestMe()

    Dim lastquoterow As Long
    Dim c As Range
    
    lastquoterow = 50
    
    For Each c In quote1.Range("A13:A" & lastquoterow)
        If c.RowHeight < 21 Then
            c.RowHeight = 21
        End If
    Next

End Sub

如果太慢,您可以将行添加到一个范围并只执行一次 rowsToIncrease.RowHeight = 21,对于 1M+ 行花费不到 2 秒的时间,这应该被认为是快速的:

Sub TestMe()

    Dim lastQuoteRow As Long: lastQuoteRow = 2 ^ 20
    Dim c As Range
    Dim rowsToIncrease As Range
    
    For Each c In quote1.Range("A13:A" & lastQuoteRow)
        If c.RowHeight < 21 Then
            If rowsToIncrease Is Nothing Then
                Set rowsToIncrease = c
            Else
                Set rowsToIncrease = Union(c, rowsToIncrease)
            End If
        End If
    Next
    
    If Not rowsToIncrease Is Nothing Then
        Debug.Print rowsToIncrease.Address
        rowsToIncrease.RowHeight = 21
    End If
    
End Sub