所以我有以下代码,其中我试图在同一工作表中隐藏不同范围集中的行,其中G列中的值为零。
参见代码:
Sub Hide_Rows()
Dim LR As Long, i As Long, g As Long, h As Long
Application.ScreenUpdating = False
With Sheets("PAYROLL SUMMARY")
LR = .Range("AB" & Rows.Count).End(xlUp).Row
For i = 19 To 248
For g = 469 To 498
For h = 719 To 748
.Rows(i).Hidden = .Range("G" & i).Value = 0
.Rows(g).Hidden = .Range("G" & g).Value = 0
.Rows(h).Hidden = .Range("G" & h).Value = 0
Next i
Next g
Next h
End With
Application.ScreenUpdating = True
End Sub
我收到以下消息“编译错误:无效的下一个控件变量引用”。
任何见解都会很棒!
答案 0 :(得分:3)
您需要切换Next h
和Next i
才能编译此代码:
For i = 19 To 248
For g = 469 To 498
For h = 719 To 748
.Rows(i).Hidden = .Range("G" & i).Value = 0
.Rows(g).Hidden = .Range("G" & g).Value = 0
.Rows(h).Hidden = .Range("G" & h).Value = 0
Next h
Next g
Next i
但是,我不明白你想要做什么,以及彼此嵌套循环的目的是什么。
另外,如果你以后不在代码中使用它,计算变量LR
的目的是什么?
如果您只想对三个不同的数据范围进行相同的操作,则不需要将三个循环嵌套在一起。你应该做三个单独的循环,如下所示:
Sub Hide_Rows()
Dim LR As Long, i As Long
Application.ScreenUpdating = False
With Sheets("PAYROLL SUMMARY")
LR = .Range("AB" & Rows.Count).End(xlUp).Row
For i = 19 To 248
.Rows(i).Hidden = .Range("G" & i).Value = 0
Next i
For i = 469 To 498
.Rows(i).Hidden = .Range("G" & i).Value = 0
Next i
For i = 719 To 748
.Rows(i).Hidden = .Range("G" & i).Value = 0
Next i
End With
Application.ScreenUpdating = True
End Sub
请注意,对于空单元格,表达式.Range("G" & i).Value = 0
也会返回True
,因此列G中具有空单元格的所有行也将被隐藏。
如果您不想隐藏空单元格,请使用.Text
代替.Value
:
.Rows(i).Hidden = (.Range("G" & i).Text = 0)