在具有不同范围的工作表上隐藏多行

时间:2015-08-06 14:44:15

标签: excel vba excel-vba excel-2010

所以我有以下代码,其中我试图在同一工作表中隐藏不同范围集中的行,其中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

我收到以下消息“编译错误:无效的下一个控件变量引用”。

任何见解都会很棒!

1 个答案:

答案 0 :(得分:3)

您需要切换Next hNext 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)