First of all, you aren't helping yourself by your error handling. Doing a Resume Next without doing some form of checking the actual error is a one-stop way to confusion and bug city. Your title is misleading - it's not the "For Each" statement which is causing the problem. It is:
TLI.InterfaceInfoFromObject(obj).Members
To be precise, it is Members property which is failing. (Oh, and you obviously haven't done a straight copy and paste, because I assume that "TLI" should be "tTLI".). The reason for this is probably that the object you are trying to use does not have a public interface registered in a Type Library.
My guess is that you are trying to do this with an internal VB class, such as a Form or a private Class. At run-time, the VB IDE creates run-time type library information on the fly (how do you think you can use uncompiled DLL projects at run-time?). Whilst in the IDE, VB creates type lib info for your class, on the fly. But when compiled, this information does not exist, thus the error.
If this is the case, you will have to create interfaces for your private classes manually by creating a DLL which exposes the interface you want to use. This interface would then be implemented into the private class. Sadly, you can't do this with Form instances.