Excel VBA For循环错误

Excel VBA For循环错误,vba,excel,Vba,Excel,我正在尝试运行一个简单的For循环,该循环稍后将被扩展以包含更多功能,但遇到问题,因为它不断抛出错误“下一个控制变量引用无效”。下面列出了我尝试使用的代码 Sub Tickbox() Set Location = Sheets("TickBoxSheet").Range("B:B") i = WorksheetFunction.CountA(Location) Sheets("TickBoxSheet").Range("B2").Select For a = 1 To i If

我正在尝试运行一个简单的For循环,该循环稍后将被扩展以包含更多功能,但遇到问题,因为它不断抛出错误“下一个控制变量引用无效”。下面列出了我尝试使用的代码

Sub Tickbox()

Set Location = Sheets("TickBoxSheet").Range("B:B")

i = WorksheetFunction.CountA(Location)

Sheets("TickBoxSheet").Range("B2").Select


For a = 1 To i
    If Selection.Value = "True" Then
        Row = Selection.Row
        'Hide some rows in another sheet via if statements

        ActiveCell.Offset(1, 0).Select
    End If
Next i

End Sub
我不知道今天早上我是否需要更多的咖啡,但我似乎不知道到底发生了什么。任何帮助都将不胜感激。

递增变量(在
下一步中)应为索引变量,即:

For a = 1 To i
  '...
Next a

i
作为索引非常流行,在其他环境中使用它之前,您应该三思而后行。

您已经从llmo得到了答案。然而,我想强调的其他事情很少

尽量避免
。选择
。它会减慢你的代码

另外,没有必要,
工作表函数.CountA(位置)
将给出最后一行,因为您希望循环遍历所有包含数据的行。我建议这样做

Sub Tickbox()
    Dim i As Long, a As Long, Rw As Long

    With Sheets("TickBoxSheet")
        i = .Range("B" & .Rows.Count).End(xlUp).row

        For a = 2 To i
            If .Range("B" & a).Value = "True" Then
                Rw = a
                'Hide some rows in another sheet via if statements
            End If
        Next a
    End With
End Sub
您还可以使用Autofilter使其速度更快,例如,您可以在只有
True
的单元格中循环

Sub Tickbox()
    Dim i As Long, a As Long, Rw As Long
    Dim Location As Range, acell As Range

    With Sheets("TickBoxSheet")
        '~~> Remove any filters
        .AutoFilterMode = False

        i = .Range("B" & .Rows.Count).End(xlUp).row

        With .Range("B1:B" & i)
            .AutoFilter Field:=1, Criteria1:="True"
            Set Location = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
            Debug.Print Location.Address
        End With

        '~~> Remove any filters
        .AutoFilterMode = False

        For Each acell In Location
            If acell.Value = "TRUE" Then
                Rw = acell.row
                'Hide some rows in another sheet via if statements
            End If
        Next acell
    End With
End Sub

+我跑得太快了。放弃我的书桌是的,我肯定需要更多的咖啡。。。谢谢虽然在
Next
语句中指定循环变量可以提高性能,但任何增益都是微乎其微的。一般来说,除非您有许多嵌套循环,否则我建议您不要这样做,如果只是为了避免您在这里遇到的问题的话。