excel - 如何使 Excel VBA 使用 for 循环调整每 n 行的高度?
问题描述
我不能让 Excel VBA 根据计算的行号调整行高。我使用 for 循环计算需要调整哪些行的高度。然后我想“选择”这些行以使 Excel 调整它们的高度。(以确保它们被隐藏)但是,错误“应用程序定义的或对象定义的错误”不断出现。
我尝试了几个选项来更改行的定义方式。使用“with workbook”之类的东西。我觉得只需要对我拥有的代码进行微小的更改,因此我只提供这个。
Sub ChangeRowHeight()
Dim FindRowNumber As Long
Dim FindRow As Range
Dim i As Long
Dim n As Long
Dim m As Long
Set FindRow = Range("A:A").Find(What:="Total Forecast 2022", LookIn:=xlValues)
k = FindRow.Row
For i = 1 To (k - 9) / 9
n = ((9 * i) + 1)
m = ((9 * i) + 8)
Rows("n:m").RowHeight = 1
Next i
End Sub
我希望 VBA 首先计算特定项目的行数。(效果很好)然后确定需要调整高度(或隐藏)的 n 次 8 行。
解决方案
这段代码
Dim i As Long
For i = 1 To 100 Step 9
Debug.Print i
Next i
将输出
1
10
19
28
37
46
55
64
73
82
91
100
因此,您可以使用Rows(i)
获取每 9ᵗʰ 行。
每 9ᵗʰ 行之间的行可以使用
Debug.Print i + 1 & ":" & i + 8
这将是
2:9
11:18
20:27
29:36
38:45
47:54
56:63
65:72
74:81
83:90
92:99
101:108
请注意,如果使用Find
您需要始终指定LookAt
asxlWhole
或xlPart
Excel 使用用户以前使用过的内容(并且您永远不知道它是哪一个),因为没有默认值。
Dim FindRow As Range
Set FindRow = Range("A:A").Find(What:="Total Forecast 2022", LookIn:=xlValues LookAt:=xlWhole)
此外,您还需要测试使用后是否发现了某些东西,find()
否则您将遇到错误:
If FindRow Is Nothing Then
MsgBox "'Total Forecast 2022' was not found!", vbCritical
Exit Sub
End If
Dim LastRow As Long
LastRow = FindRow.Row
Dim iRow As Long
For iRow = 1 To LastRow Step 9
Rows(iRow + 1 & ":" & iRow + 8).Hidden = True
Next iRow
推荐阅读
- java - 如何从 AWS Lambda 在 AWS EC2 实例上执行 JAR
- javascript - 传递给函数的默认变量值会在 IE11 中中断脚本,但似乎不需要
- android - 带有阴影效果的滚动透明工具栏
- javascript - JavaScript 纯 CRUD 编辑功能 - 更新/编辑表格中的输入字段
- apache-kafka - 带有窗口的 Kafka Streams 拓扑不会触发状态更改
- ios - 显示图像或自动播放视频,如 Instagram 提要
- list - 搜索列表列表的时间复杂度?
- java - 生命游戏振荡器和宇宙飞船不工作
- azure - 如果“foreach”中的所有值都为真
- android - 未来的数据消失了