Question 1: default is private. There are three: Public, Private and Friend.
Public is project wide for standard modules, enterprise wide for class modules. (A form is a class, therefore this applies to form modules too.) Constants may only be declared public or private in a standard module. Otherwise they are private and an access modifier isn't allowed.
Friend may be used only with methods, and not in Standard modules. If you're using an activeX exe or dll, then public becomes a member of the exposed interface, i. e. visible to clients of your component. Friend is only visible project wide.
Private is only visible in the module in which it's declared. Private and Dim are interchangeable at the module level (except constants in a standard module can't use dim). In a method, local variables have to use dim. (Or static, but that's a matter of lifetime rather than scope.)
for variables, dim is the same as private at the module level (declared in General Declarations). Rules for Public are the same as thoseDim is the only choice (not counting static, but that's not a question of access scope, rather one of lifetime) inside a procedure. Variables declared in a proc are visible only in that proc.
Constants may be declared public or private only in standard modules. Otherwise, they are private and you can't use an access modifier. (You can create a public or private enum, however, with constants in it.)
Hope this helps, and feel free to question further if I've left anything out.
Bob