[英]End If/Next C Statement with For Loop / VBA
I have a fairly complex for For
Loop with an If
Statement inside and another For
Loop inside that. 我有一个相当复杂的For
循环,其中包含一个If
语句,而其中包含另一个For
循环。 And given a certain criteria (Namely If InStr(1, q.Value, "Total")
) inside that second For Loops I would like to just end the entire If
Statement and move to the Next C
. 在第二个For循环内给定特定条件(即If InStr(1, q.Value, "Total")
),我想结束整个If
语句并移至Next C
I understand that this is layered like an onion and there might not be an easy way out. 我了解这像洋葱一样分层,可能没有简单的出路。
For Each C In copyRng
If IsNumeric(C) And C.Value <> "0" And Len(C) <> 0 And C.Value <> "2017" Then
Set rowRange = xSheet.Range(C, C.EntireColumn.Cells(1)) 'set range from cell up to the top cell of the comment/ Fix the 2017 thing
For Each q In rowRange 'Loop through that range and find the Account number just above it and set it as rowSrc
If InStr(1, q.Value, "C-") And Not ISIN(C, uniqueVal) Then Set rowSrc = q
If InStr(1, q.Value, "Total") Then End If 'At this point I want to leave the entire If Statement and move on to the next C
Next q
Set colSrc = C.EntireRow.Offset(0).Cells(1) 'find alert connected with the number
numCol = DestSh.Cells.Find(colSrc.Value, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column 'look for the column in which the same alert is listed
numRow = DestSh.Cells.Find(rowSrc.Value, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row 'look for row in which the same account is listed
'Set destination
Set destRng = DestSh.Cells(numRow, numCol)
'Copy to destination Range
C.Copy destRng
End If
Next C
You need Exit For
and then after the loop, put the remaining code in yet another If
block: 您需要Exit For
,然后在循环之后,将其余代码放入另一个If
块中:
For Each C In copyRng
If IsNumeric(C) And C.Value <> "0" And Len(C) <> 0 And C.Value <> "2017" Then
Set rowRange = xSheet.Range(C, C.EntireColumn.Cells(1))
For Each q In rowRange
If InStr(1, q.Value, "C-") And Not ISIN(C, uniqueVal) Then Set rowSrc = q
If InStr(1, q.Value, "Total") Then Exit For ' Exit loop prematurely
Next q
If q is Nothing Then ' Skip if loop was exited prematurely
Set colSrc = C.EntireRow.Offset(0).Cells(1)
numCol = DestSh.Cells.Find(colSrc.Value, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column
numRow = DestSh.Cells.Find(rowSrc.Value, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row
Set destRng = DestSh.Cells(numRow, numCol)
C.Copy destRng
End If
End If
Next C
Remove each underscore after Then
and rewrite the whole code. Then
,删除每个下划线, Then
重写整个代码。 The logic is changed. 逻辑已更改。 Pretty much you do not go to the else the way you think it. 几乎您不会按照自己的想法去做其他事情。
Check this: VBA - How the colon `:` works in VBA code with condition 检查以下内容: VBA-带条件的VBA代码中冒号`:`的工作方式
In general, your code does not work the way you think it works. 通常,您的代码无法按照您认为的方式工作。 Check the following: 检查以下内容:
Public Sub TestMe()
If 1 = 2 Then _
Debug.Print "I am true - 1=2"
Debug.Print "I should be also true"
If 2 = 3 Then _
Debug.Print "I am true 2=3"
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.