Private global variables are not visible to code outside of the class in which they are declared. Public global variables are visible everywhere. Variables declared in a Sub (using Dim) are only available within the Sub.
unless you use the same name for your "local" variable as that of a global variable. i recall a number of exchanges about this issue some time back.
as to why someone would use the same name globally and locally can be debated, but the point of the exchanges was that what some thought local was wasn't.
if you have a globally declared variable thing (whether dim'd,private or public), and you have a variable thing declared within a sub, any change to the "local" thing within the sub will be reflected in the global thing. a trick even C couldn't do.