excel - 设置已用行的最小行高
问题描述
我有以下代码,我似乎无法正常工作。
如果我删除并将其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
解决方案
你必须决定什么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
推荐阅读
- python - Python psutil如何找到子进程
- python - 根据另一列中的特定值对一列中的值求和
- c++ - 在双向链接的循环列表/环中实现迭代器(.end() 的问题)
- sql - 我正在尝试在 ORACLE 数据库中设置一个表,当我尝试运行此命令时出现无效数据类型错误:
- sql - 触发日期转换失败
- python-3.x - ModuleNotFoundError:没有名为“xmltodict”的模块
- javascript - 使用展开语法替换字典中的项目
- server - 使用信号句柄关闭 flask-socketio 服务器
- ruby - 如何禁用 ruby bundler 文本输出?
- python - 程序正在运行但文件未使用 open() 函数打开