For i = 0 to UBound(EmailArray)
If InStr(1,strEmail,EmailArray(i),1) Then
Flag = True
End If
Next
Just looking at it, I think you need to exit the loop once it's true. Because it will always come out false unless it's the last one in the list.
For i = 0 to UBound(EmailArray)
If InStr(1,strEmail,EmailArray(i),1) Then
Flag = True
exit for
End If
Next