Excel VBA错误“;下一步不带“For”;因为很多假设
我有下面的代码,VBA给了我一个“Next Without For”错误,而我肯定两者都有。我在网上查了一下,了解到这是因为很多“如果”,有人能告诉我我的问题在哪里吗 我有3个工作簿,我希望每一行都能根据第一列的敏捷性剪切并复制到正确的工作簿中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
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
终止。我统计了6个End If
,只有4个If
,sVBA在发现其中任何一个缺失时会将Next、Loop、End If、End With和End Select作为一个组处理。这通常会导致错误消息,例如,消息中说“Next”丢失,而实际上,它是一个“End If”。我认为您希望使用End If
语句,而不是在ElseIf
语句之后再加一个内部Else
语句。(而且,FWIW,如果外部If
的每个支腿中的代码看起来是相同的,那么我不知道为什么要使用它。)为什么不按逻辑缩进代码?如您的问题所示,未能正确缩进代码,特别是当代码涉及嵌套的控制结构时,会导致灾难。请清理代码格式(这很可怕),您可能会看到问题