I have a fairly complex for For
Loop with an If
Statement inside and another For
Loop inside that. 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
.
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:
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. 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
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.