Вряд ли возникнет проблема ...
Допустим, у вас есть две идентичные книги:
... и оба имеют одинаковую настройку Public Variable с именем X
.
Если у вас нет явного значения Reference от Book1
до Book2
, тогда Book1
не может "видеть" X
или другие переменные / константы/ etc, которые существуют в Book2
.
Например, один из способов задания ссылки будет, если в Book1
вы пошли Инструменты > Ссылки > Просмотр и выбранная рабочая книга Book2.xlsm
.
Даже если вы сделали , установите ссылку между книгами, и у обоих естьпеременная с именем X
, Book1
всегда будет искать X
внутри себя, прежде чем искать в другом месте.Вы должны квалифицировать переменную следующим образом:
Applications.Workbooks("Books2.xlsm").X
Это относится ко всем ссылкам;Если у вас есть что-то в вашей книге, названное так же, как «подключенная» ссылка, код, выполняемый в вашей книге, «просматривает» сначала в процедуре, затем в модуле, затем в книге, прежде чем искать внешние ссылки на ссылки.
Маловероятно, что VBA будет ссылаться на переменную в неправильной рабочей книге.
Если у вас часто открыты две идентичные рабочие книги, гораздо более вероятно, что you случайно напишет или выполниткод в неправильной книге, (я сделал это, это раздражает - особенно когда вы закрываете и удаляете «книгу мусора», в которую вы случайно просто написали кучу кода!)
Там не должно бытьочень много ситуаций, когда у вас открыты две одинаковые рабочие книги;если это обычная практика, , вероятно, лучший способ организовать процесс хранения данных .
Диапазоны
Обратите внимание, что то же самое не применяется при обращении к диапазонам листов и т. Д. С неквалифицированными ссылками.
Например, Range("A1")
относится к любому листу, находящемуся «сверху» (т. Е. К последней книге, которая была нажата, выбрана или иным образом активирована.
Вот почему важноссылки на квалифицированный диапазон. Одним из примеров полностью квалифицированного задания диапазона является:
ThisWorkbook.Sheets("Sheet1").Range("A1")
Scope
Это обсуждение относится к категории Scope .
Подробнее о том, что такое сфера применения и как использовать ее для своей выгоды (и предотвращения проблем), можно узнать по следующим ссылкам:
Действительно Глобальные переменные
Кстати, есть также способ создания действительно глобальных переменных, на которые может ссылаться oдругие ( не Office ) приложения и даже после закрытия приложения и / или повторного открытия.
Требуется некоторое довольно продвинутое кодирование, поскольку оно включает в себя API Windows, но у Чипа Пирсона есть шаги и пример кода здесь .