首页 > 解决方案 > 由于“Next without For”而无法编译

问题描述

我有以下代码,但它抱怨(在最后一个For循环中)我Next没有For,所以甚至无法编译,所以我可以调试!

我猜我有一些方向问题,但如果它不能开始编译,我什至无法调查!

For Each ck In Screen.ActiveForm
    For Each oCol In OverlapCol
        If oCol = Right(ck.Name, Len(ck.Name) - 2) Then
        ck.Enabled = True
        Exit For
        GoTo TrueCk
        End If
    Next oCol
    For Each aCol In DistAutCol
        If aCol = Right(ck.Name, Len(ck.Name) - 2) Then
        ck.Enabled = True
        GoTo TrueCk
        Exit For
        End If
    Next aCol
    For Each gCol In DistGenCol
        If gCol = Right(ck.Name, Len(ck.Name) - 2) Then
        ck.Enabled = True
        Exit For
        GoTo TrueCk
    Next gCol
    ck.Enabled = False
TrueCk:
Next ck

我不明白:这个 For 循环与其他循环有什么不同?为什么我会遇到这个问题?

标签: loopsms-accessvba

解决方案


我建议在 Ifs 中使用缩进进行格式化,如下所示:

    For Each ck In Screen.ActiveForm
        For Each oCol In OverlapCol
            If oCol = Right(ck.Name, Len(ck.Name) - 2) Then
                ck.Enabled = True
                Exit For
                GoTo TrueCk
            End If
        Next oCol
        For Each aCol In DistAutCol
            If aCol = Right(ck.Name, Len(ck.Name) - 2) Then
                ck.Enabled = True
                GoTo TrueCk
                Exit For
            End If
        Next aCol
        For Each gCol In DistGenCol
            If gCol = Right(ck.Name, Len(ck.Name) - 2) Then
                ck.Enabled = True
                Exit For
                GoTo TrueCk
            End If
        Next gCol
        ck.Enabled = False
TrueCk:
    Next ck

在这种情况下,您会注意到,您忘记添加End Iflast If,不幸的是,编译器消息在这种情况下具有误导性。


推荐阅读