It sounds like a failure to maintain binary compatibility. Usually you do this only for yourself, but, of course, it can be a big headache if several people collect your libraries from Project source files.
When creating EXE files for ActiveX, DLL and OCX, you need to create a "base" version in which the type and class identifier (GUID) will be assigned. The documentation even assumes that you do this by leaving the procedures empty: just a comment line or something else, so the IDE does not delete empty declarations.
You do not need to use the "empty" base reference library, it can be one with the full code.
Once you have compiled this base library, you exit and save the project. Then rename this "empty" library as something else and from there save it along with the source files of the project.
After that, you will open the project again and go to "Project Properties", and on the "Component" tab, change the "Compatibility" parameter to "Binary Compatibility", and enter the full path and name of your compiled base library in the field. Save the project. Now you can add code and compile a βrealβ library that will be used by other programs.
When you distribute these libraries (DLL, OCX) to someone else in the form of source code so that they can compile them, you must provide this renamed compiled base library along with the source code files, VBP file, resource files, etc.
From there, your GUIDs will be stable until you contribute something that breaks binary compatibility (changing the list of method arguments, etc.).
This is described in detail in the online help (MSDN Library). Cm:
Using Visual Basic | Component Tool Guide | Creating ActiveX Components | Debugging, Testing, and Deploying Components | Version Compatibility in ActiveX Components