Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA错误“;下一步不带“For”;因为很多假设_Vba_Excel - Fatal编程技术网

Excel VBA错误“;下一步不带“For”;因为很多假设

Excel VBA错误“;下一步不带“For”;因为很多假设,vba,excel,Vba,Excel,我有下面的代码,VBA给了我一个“Next Without For”错误,而我肯定两者都有。我在网上查了一下,了解到这是因为很多“如果”,有人能告诉我我的问题在哪里吗 我有3个工作簿,我希望每一行都能根据第一列的敏捷性剪切并复制到正确的工作簿中 Dim i As Integer Dim RowTable As Integer RowTable = Sheets(3).Range("A1", (Range("A1").End(xlDown))).Rows.count 'lo

我有下面的代码,VBA给了我一个“Next Without For”错误,而我肯定两者都有。我在网上查了一下,了解到这是因为很多“如果”,有人能告诉我我的问题在哪里吗

我有3个工作簿,我希望每一行都能根据第一列的敏捷性剪切并复制到正确的工作簿中

     Dim i As Integer
    Dim RowTable As Integer

RowTable = Sheets(3).Range("A1", (Range("A1").End(xlDown))).Rows.count


'loop


For i = 2 To RowTable

'SORTING DATA TO WORKBOOKS



'Oren, Karin, Noam

'Oren
If Selection.Value = 1 Then

Selection.EntireRow.Cut
WB1.Activate
WB1.Sheets(1).Range("A1").Offset(1, 0).Select

        If Selection.Value = "" Then
        Selection.PasteSpecial (xlPasteValues)
    Else
        Range("A1").End(xlDown).Offset(1, 0).PasteSpecial (xlPasteValues)
        End If


    Else

'Karin
If Selection.Value = 2 Then

Selection.EntireRow.Cut
WB1.Activate
WB1.Sheets(1).Range("A1").Offset(1, 0).Select

        If Selection.Value = "" Then
        Selection.PasteSpecial (xlPasteValues)
    Else
        Range("A1").End(xlDown).Offset(1, 0).PasteSpecial (xlPasteValues)
        End If


    Else

'Noam
If Selection.Value = 3 Then

Selection.EntireRow.Cut
WB1.Activate
WB1.Sheets(1).Range("A1").Offset(1, 0).Select

        If Selection.Value = "" Then
        Selection.PasteSpecial (xlPasteValues)
    Else
        Range("A1").End(xlDown).Offset(1, 0).PasteSpecial (xlPasteValues)
        End If




End If

'next row

  mainWB.Activate
  Sheets(3).Range("I2").End(xlDown).Select





'i do the same procedure in the indirect manager workbooks as i did in the first workbook
'i will copy the names to a differen range and then remove duplicates
'then i will have a list of direct managers in each wb
'and i will name ech direct manager as a number and open a worksheet based on his name


Next

VBA旨在通过支持缩进来帮助避免此类错误。您应该尝试实现的逻辑如下所示:-

For n = 1 to 10
    If 1 <> 2 Then
        'enter code here
    Else
        Do
            ' enter code here
        Loop While 0 <> 0
    End If
Next n

VBA旨在通过支持缩进来帮助避免此类错误。您应该尝试实现的逻辑如下所示:-

For n = 1 to 10
    If 1 <> 2 Then
        'enter code here
    Else
        Do
            ' enter code here
        Loop While 0 <> 0
    End If
Next n

而不是太多的<代码>如果,考虑您没有足够的<代码>结束如果。每个多行
If
语句都需要以
End If
终止。我统计了6个
If
,只有4个
End If
,sVBA在发现其中任何一个缺失时会将Next、Loop、End If、End With和End Select作为一个组处理。这通常会导致错误消息,例如,消息中说“Next”丢失,而实际上,它是一个“End If”。我认为您希望使用
ElseIf
语句,而不是在
Else
语句之后再加一个内部
If
语句。(而且,FWIW,如果外部
的每个支腿中的代码看起来是相同的,那么我不知道为什么要使用它。)为什么不按逻辑缩进代码?如您的问题所示,如果代码不正确地缩进代码,特别是当代码涉及嵌套的控制结构时,这是一个灾难的配方。清理代码格式化(它是可怕的),并且您可能会看到问题而不是太多的代码>如果的话,认为您没有足够的<代码>结束如果。每个多行
If
语句都需要以
End If
终止。我统计了6个
If
,只有4个
End If
,sVBA在发现其中任何一个缺失时会将Next、Loop、End If、End With和End Select作为一个组处理。这通常会导致错误消息,例如,消息中说“Next”丢失,而实际上,它是一个“End If”。我认为您希望使用
ElseIf
语句,而不是在
Else
语句之后再加一个内部
If
语句。(而且,FWIW,如果外部
的每个支腿中的代码看起来是相同的,那么我不知道为什么要使用它。)为什么不按逻辑缩进代码?如您的问题所示,未能正确缩进代码,特别是当代码涉及嵌套的控制结构时,会导致灾难。请清理代码格式(这很可怕),您可能会看到问题