Как известно, At module level, you can use only comments and declarative statements. Значит, весь исполняемый код должен лежать внутри Procedures (к ним относятся Sub и Functions, а также Properties).
Но как же тогда выполнить что-либо (например, инициализацию переменных начальными значениями) ТОЛЬКО ОДИН РАЗ ? (при запуске ?)
Можно описать объектную переменную Dim Myvar as NEW MyClass, чтобы она проинициализировалась при первом её использовании (хотя это немного не то), но методов-конструкторов в VBA тоже нету ...
В первой своей (и пока единственной) программе на VBA я выкрутился таким образом: объявил булевскую переменную-флаг и проверяю её значение в каждой процедуре. Если она False (такое значение имеют сначала все булевские переменные по умолчанию), — вызываю процедуру инициализации, и присваиваю флагу True.
Но, по-моему, это неграмотно, потому что быстродействие страдает. А как надо правильно ?