2016-05-13 82 views
2

我有下面的vba代碼,它適用於vba「For Each Loop」。 問題是我在其他一些程序中使用了下面的代碼,但條件相同,只是我想刪除它中的循環。對於每個循環問題

代碼應該在完成一次任務後執行並停止。總之,我想刪除循環,並以代碼運行時沒有循環的方式進行。

Set olNs = outlookApp.GetNamespace("MAPI") 
Set Fldr = olNs.GetDefaultFolder(olFolderInbox) 
Set myTasks = Fldr.Items 

For Each olMail In myTasks 
    If (InStr(1, olMail.Subject, ws.Range("E" & FinalRow), vbTextCompare) > 0) Then 
     olMail.Display 
    End If 
Next olMail 
+0

使用'退出For'之前'下一步olMail'。如果你想在'if'條件成立後退出,在'End if'之前放置它。 – newguy

回答

1

使用Exit For毗鄰olMail之前,如果你只想運行一次。如果你想,如果條件得到滿足的地方之後結束前,如果

試試這個退出:如果你想託倫它只是一次

For Each olMail In myTasks 
    If (InStr(1, olMail.Subject, ws.Range("E" & FinalRow), vbTextCompare) > 0) Then 
     olMail.Display 
    Exit For 
    End If 
Next olMail 
0

更換

For Each olMail In myTasks 
If (InStr(1, olMail.Subject, ws.Range("E" & FinalRow), vbTextCompare) > 0) Then 
    olMail.Display 
    End If 
Next olMail 

隨着

For Each olMail In myTasks 
    If (InStr(1, olMail.Subject, ws.Range("E" & FinalRow), vbTextCompare) > 0) Then 
     olMail.Display 
     Exit For '// Exit the loop if the item is displayed. 
    End If 
Next olMail 
+0

這可能不是完全需要的。我認爲OP在第一場比賽後想退出。 myTasks(0)只是針對特定的一個進行測試。 – newguy

+0

@newguy For'循環將迭代'myTasks'集合中的每個項 - 這意味着第一個'匹配'或迭代將是索引0處的項。因此,根本不需要使用循環,只需要直接訪問集合中的第一個項目。 –

+0

@newguy nvm - 我明白你的意思,只是重新閱讀問題並更新。 –