设置已用行的最小行高
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
我有以下代码,我似乎无法正常工作。
如果我删除 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