A web server responds to internet-style requests, such as those that Internet Explorer would submit. Though a client server exposes resources (folders, files, printers, etc.), it does not respond to internet-style requests.
No difference between public and global. Public has been preferred for a while.
ByVal creates a new instance of the value being passed, and then passes a reference to that new resource. That new resource is abandoned after the function ends.
ByRef causes the variable within the called function to use the same piece of memory that the calling routine is using. Therefore, if the value is changed within the called function, you will have that new value within the calling function when you get back there.
Public variables are allocated when the program initializes.
6, the local variables in a routine are allocated when the routine initializes, no matter where in the routine they are Dim'd.
.NET, variables are initialized when they come into scope. In .NET, you can restrict a variable's scope to a block of code, something that VB6 won’t do. If you do that in .NET, the memory is allocated when the variable comes into scope.
(Actually, if you read through that, you'll see that [u]all</u> variables allocate their memory when tey come into scope, but I just delineated where that 'comming into scope' takes place for various situations.)