2015-05-21 6 views
1

В моем проекте VBA у меня есть несколько ячеек, на которые я ссылаюсь во многих модулях и подмножествах. Для простоты ради чтения я объявил и инициализацию переменной для ссылки на ячейку следующим образом:Как правильно инициализировать глобальные ссылочные переменные ячеек в VBA

LowerBound = ThisWorkbook.Sheets("Rules").Range("B22").Value 

Я хотел бы инициализировать эту переменную только один раз в моем проекте, это правильно использовать глобальную переменную этот экземпляр? Я нашел много материалов, предполагающих, что их следует избегать (в соответствии с этим ответом Initialising global variables in VBA). Если это неверно, то что лучше всего подходит для обращения к ячейке во всем проекте.

+0

Для краткости вы можете назвать эту ячейку, затем «Range» («name»). Value' или '[name] .value' –

ответ

0

Одна хорошая практика заключается в инициализации глобалов в основной процедуре, а затем передаче их любым другим процедурам, которые их требуют. Это помогает предотвратить непреднамеренное изменение значения в другой процедуре.

Если вы не можете этого сделать, это может означать, что вам нужно переосмыслить организацию своего кода.

EDIT: Если инициализировать глобальные переменные в Workbook_Open:

Хотя вы можете инициализировать их в случае Workbook_Open, я бы не сделать это, если это не то, когда они необходимы.

Если, например, ваша книга может быть оставлена ​​открытой более одного дня, и вы инициализируете переменную в зависимости от дня недели, делая это при открытии книги, будет проблемой. Без конкретных подробностей трудно сказать, но мой общий совет - инициализировать их в начале любого процесса, который опирается на них. Так, например, если необходимо каждый раз, когда кто-то нажимает кнопку, инициализируйте их в подпрограмме, которая реагирует на нажатие кнопки. Если, с другой стороны, они полагаются на состояние вещей, которые открывают книгу, тогда вы захотите их инициализировать в этот момент. Надеюсь, что поможет

+0

Thankyou, и это хорошая практика, чтобы инициализировать все переменные в одной основной процедуре при открытии рабочей книги, так что у вас есть workbook_open sub()? – PaulBarr

0

При объявлении вашего переменного использования (при условии, что это целое число):
Public LowerBound as Integer

Обязательно объявить это вне какой-либо процедуры или функции.

+0

И инициализировать его? Должен ли я сделать это под подпиской workbook_open()? Должен ли я инициализировать его в одном подпункте и называть его, когда это необходимо? Спасибо – PaulBarr

+1

Вы должны иметь возможность инициализировать и изменить его в любом суб. Поэтому было бы разумно, что вы инициализируете его в первом суб, в котором он используется. Это установит значение для использования в будущих субмаринах. – TMH8885

Смежные вопросы