Область видимости - модуль.
Слова Dim или Private для переменной и слова Const или Private Const для константы делают их видимыми только в своем модуле. Их область видимости - весь этот модуль, включая все процедуры, функции и другие модули (если они есть) внутри модуля. Это модульные переменные и константы.
Обратите внимание, что здесь можно было бы обойтись и без модификатора Private. Но английский смысл слова Private ("частная собственность", "вход запрещен") лучше подходит к случаю, поэтому программисты в основном используют его.
Любой другой элемент (процедура, функция, модуль), чтобы быть видимым аналогичным образом только в своем модуле, объявляется модификатором Private.
Область видимости - проект, но не дальше. Если мы хотим, чтобы элемент VB был виден во всем проекте, но не дальше, мы объявляем его модификатором Friend. Часто программистам все равно - дальше или не дальше, и поэтому они употребляют вместо Friend более привычный модификатор Public, обеспечивающий неограниченную видимость.
Неограниченная область видимости.
Модификатор Public делает элемент неограниченно видимым. Часто такие элементы называют глобальными.
Видимость по умолчанию. Если вы совсем уберете модификатор доступа к классам, структурам и модулям:
Class Класс1
End Class
они по умолчанию будут иметь доступ Friend.
Если вы совсем уберете модификатор доступа к процедуре или функции они по умолчанию будут иметь доступ Public.
Имейте в виду, что элементу с неограниченной областью видимости не гарантирована эта неограниченная видимость, если он объявлен внутри элемента с ограниченной видимостью.
Область видимости - классы-наследники. Есть еще одна область видимости, которая не совпадает ни с одной из упомянутых и имеет отношение к наследованию классов. К ней относятся модификаторы Protected и Protected Friend.
Затенение
Переменные и другие программные элементы разных модулей или разных процедур вполне могут иметь одинаковые имена. Спрашивается, как VB определяет, какой из видимых одноименных элементов имеется в виду в каждом конкретном случае? Здесь вступает в действие эффект затенения: из нескольких одноименных элементов всегда имеется в виду более локальный, т. е. тот, чья зона видимости меньше. Это значит, что локальные элементы имеют предпочтение перед модульными, а те - перед глобальными. В этом есть глубокий смысл. Программист, объявляющий элемент в своей процедуре, может не заботиться о том, что где-то в модуле есть элементы с тем же именем. А программист, объявляющий элементы в своем модуле, может не заботиться о том, что элементы с тем же именем есть где-то в проекте.