Hi Norie, it's largely sticking to convention and personal preference.
My coding (probably due to me working in C# and javascript most of the time) tends to be fairly object orientated, as such I tend to encapsulate process in the class it is in and I'll always prefer to interact with properties of that class than variables directly. As such I would (in the round) consider objects (controls etc) within a useform private and interact only with exposed properties/explicit public routines - If I'm feeling really pedantic I might even go as fas as to make an interface class for the userform
I also don't use global variables if I can help it, the usual userform falls firmly into this category in my opinion, I'd rather narrow the scope of the user form and have full control over its initialization and removal, this also allows me to have multiple instances of it open at once. Since I try to stick to a single convention for doing something so any code is consistent, I only ever initialize userforms in this manner, I always declare a new instance of them - it also allows me to check if they're nothing which can be handy in certain circumstances.
Pedantic Version of the above :
Form:
Interface:
Bookmarks