While I agree that globals are very good language elements, and I have used them a lot, they suffer from one major drawback. If your error handling is not tight, you sometimes reach what is loosely referred to as the Last Chance error handler, the one that offers you the option to DEBUG (i.e. drop you into debug mode at the line creating the error), RESET (reset application memory), and - VERY RARELY - you might get the option to CONTINUE. But usually not.
When that happens, the next thing that is going to happen - when you finally take the RESET option - is that all modules, both class and general, get unloaded. The side effect of that action happens because all Public variables are in the declaration areas of their respective modules. Unloading the modules unloads the variables (dissolves them). I.e. RESET resets memory wholesale. If you then enter debug mode and try to examine something in a module, in essence you re-instantiated the module... by re-loading it. The previous values are no longer there. Re-instantiation of the containing module usually makes the variables be 0, "", null, nothing, empty, etc.
TempVars, some created objects, and Dictionaries persist across this RESET action. "Ordinary" variables - even Static ones - do not.