首页 > 解决方案 > 如何使 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 行。

标签: excelvba

解决方案


这段代码

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您需要始终指定LookAtasxlWholexlPartExcel 使用用户以前使用过的内容(并且您永远不知道它是哪一个),因为没有默认值。

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 

推荐阅读