首页 > 解决方案 > 在 Excel 中没有下一个

问题描述

我正在尝试使用https://stackoverflow.com/a/10693789/1992004中提供的一种 VBA 宏来获取所有可能的组合,但出现错误For without Next。我将另一个线程的源与我的源进行了比较,但没有发现可能导致此错误的差异。

你看,是什么导致了这个错误?- 请指点我。我的代码如下。

Option Explicit

Sub Sample()
    Dim l As Long, m As Long, n As Long, o As Long, p As Long, q As Long, r As Long, s As Long, t As Long, u As Long
    Dim CountComb As Long, lastrow As Long

    Range("L2").Value = Now

    Application.ScreenUpdating = False

    CountComb = 0: lastrow = 18

    For l = 1 To 1: For m = 1 To 2
    For n = 1 To 2: For o = 1 To 18
    For p = 1 To 15: For q = 1 To 10
    For r = 1 To 10: For s = 1 To 17
    For t = 1 To 3: For u = 1 To 3
        Range("L" & lastrow).Value = Range("A" & l).Value & "/" & _
                                     Range("B" & m).Value & "/" & _
                                     Range("C" & n).Value & "/" & _
                                     Range("D" & o).Value & "/" & _
                                     Range("E" & p).Value & "/" & _
                                     Range("F" & q).Value & "/" & _
                                     Range("G" & r).Value & "/" & _
                                     Range("H" & s).Value & "/" & _
                                     Range("I" & t).Value & "/" & _
                                     Range("J" & u).Value
        lastrow = lastrow + 1
        CountComb = CountComb + 1
    Next: Next
    Next: Next

    Range("L1").Value = CountComb
    Range("L3").Value = Now

    Application.ScreenUpdating = True
End Sub

标签: vbaexcel

解决方案


上面的所有评论都解释了您的问题,但这是您的代码在适当缩进和缺少“下一个”语句后的样子:

For l = 1 To 1
    For m = 1 To 2
        For n = 1 To 2
            For o = 1 To 18
                For p = 1 To 15
                    For q = 1 To 10
                        For r = 1 To 10
                            For s = 1 To 17
                                For t = 1 To 3
                                    For u = 1 To 3
                                        Range("L" & lastrow).Value = Range("A" & l).Value & "/" & _
                                                                     Range("B" & m).Value & "/" & _
                                                                     Range("C" & n).Value & "/" & _
                                                                     Range("D" & o).Value & "/" & _
                                                                     Range("E" & p).Value & "/" & _
                                                                     Range("F" & q).Value & "/" & _
                                                                     Range("G" & r).Value & "/" & _
                                                                     Range("H" & s).Value & "/" & _
                                                                     Range("I" & t).Value & "/" & _
                                                                     Range("J" & u).Value
                                        lastrow = lastrow + 1
                                        CountComb = CountComb + 1
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
    Next
Next

至少,它会立即让您的代码失败的地方变得显而易见。


推荐阅读