Хочу в модуль "Constants" засунуть несколько глобальных констант или переменных (возможно, из ячеек нельзя сделать константы), значения для которых находятся в одном скрытом листе, назовем его "Hidden_Hack_Vars", чтобы оно выглядело как-то так:
Public Const hiddenSheetName = "Hidden_Hack_Vars"
Public Const DepartmentName = ThisWorkbook.Worksheets(hiddenSheetName).range("A1").Value
Но происходит ошибка: Compile Error.
Как это сделать правильно?
В константу можно записать только непосредственно данные: из ячейки или из чего-то другого нельзя записать.
Значит вам надо отказаться от констант.
Глобальные переменные можно заполнить с помощью процедуры при открытии эксель-файла с помощью события "Workbook_Open".
Приложил файл-пример. После открытия файла-примера, включите макросы в файле. Запустится событие "Workbook_Open", которое заполнит глобальные переменные. После этого, запустите прямо из VBA макрос Module1.Main. В области View - Immediate Window вы увидите содержимое глобальных переменных.
Событие "Workbook_Open" находится в модуле "ЭтаКнига".
Но если данные на листе изменятся, то в глобальных переменных данные останутся прежние. Т.е. связь между глобальной переменной и ячейкой не устанавливается. Т.е. данные в глобальные переменные запишутся только один раз после открытия файла.
Значения в глобальных переменных сохраняются до закрытия файла, в котором они находятся.
Глобальные переменные очистятся в этих случаях:
1) если произойдёт run-ошибка,
2) если используется в каком-либо макросе команда "End",
3) если программист щёлкнет в VBA синий квадратик "Reset".
[вложение удалено администратором]
Большое спасибо за разъяснения.