【问题标题】:Set Minimum Row Height for Used Rows设置已用行的最小行高
【发布时间】:2020-12-07 15:06:35
【问题描述】:

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

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

我也不能让它调整 A1-A12 的大小,因为这是我的标题范围必须保持静态。我试图告诉它从我的范围开始的 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

【问题讨论】:

  • "A13:A" &amp; lastquoterow
  • 我不在电脑前,但是这个Range("A13" &amp; lastquoterow)可以改成这个Range("A13:A" &amp; lastquoterow)。您的代码中还有其他需要调整的内容
  • @BigBen 添加第二个A 就成功了。有时是简单的事情让你搞砸了。
  • @Tmyers - 如果你只这样做 - Range("A13:A" &amp; lastquoterow),那么很可能有一天代码会因错误 1004 而爆炸。为了省去麻烦,请阅读stackoverflow.com/questions/10714251/… 或使用quote1.Range("A13:A" &amp; lastquoterow)
  • @Vityata 这很有意义,因为它有一天会变成核,然后出去。我尝试了您的第二种方法,它有效并且比以前快得多。我将始终加快速度,因为我的其余代码效率极低且速度极慢。希望有一天能在我学习的过程中加快速度。感谢您的洞察力和帮助!

标签: excel vba row-height


【解决方案1】:

你必须决定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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2015-09-13
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多