My approach is to use global vbariables as little as is possible. This means that I will pass values to a function as parameters rather than have globals, and I will use ByRef to have updateable arguments, and return values from a function rather than use a global.

I was always taught to restrict the scope of variables as much as you can. This means as few module level variables, as few globals as possible.

As an aside, in my production code, I rarely use subs, invariably use functions.