Я немного смущен о масштабах именованных диапазонов в Excel. У меня две версии книги excel. Иногда пользователям приходится копировать данные из старой версии книги в более новую версию. Существуют некоторые пользовательские функции VBA, используемые в большинстве вычислений ячейки. Каждая из этих функций просматривает от 4 до 12 названных диапазонов на листе. Это, казалось, хорошо работает ... Однако недавно я узнал, что, когда открываются две версии файла, ссылки VBA на все именованные диапазоны возвращают значения только из первого открытого файла (поэтому, если более новая версия форма была открыта сначала, тогда старшая версия будет действовать, как некоторые из ее данных поступают из новой версии!). Именованные диапазоны из второго файла, по-видимому, игнорируются вторым файлом, по крайней мере, в коде VBA, если оба файла остаются открытыми. Если я закрою книгу, которая была открыта первой, вторая будет правильно подсчитываться.Повторяющиеся именованные диапазоны между книгами заставляют мои пользовательские функции запутываться
Я нашел частичное исправление: вместо того, чтобы сделать это:
Blah = Range("valueXYZ").Value
Я делаю это вместо:
Blah = ThisWorkbook.Names("namedCellXYZ").RefersToRange.Value
Это прекрасно работает, но только на более новую версию книги. Я не могу обновить код VBA в старой версии книги. Это означает, что если клиенты открывают старую версию после того, как новая версия уже открыта, (так что оба они открыты, но старый был открыт второй), старая версия будет получать значения и именованные диапазоны от более новой версии - и таким образом, сообщают о неправильных номерах и диапазонах. Это плохо. Мне нужен хороший способ предотвратить доступ старого листа к именованным диапазонам из нового, но я могу только изменить новый. Единственное, о чем я могу думать, это переименование всех названных диапазонов и обновление большого количества кода VBA в новой версии - что-то, что подвержено ошибкам и звучит как чрезмерная работа.
Любые предложения? Например, возможно ли хотя бы показать пользователю предупреждение при открытии второго файла? Или можно использовать VBA для ограничения объема названных диапазонов? Любые другие идеи?
Хорошая идея. Тем не менее, мне не удается запустить этот обработчик событий. –
Я получил его работу - мне пришлось перезапустить excel, чтобы начать работу. Благодаря!!В качестве интересной заметки, насколько я могу судить, более новая версия не нуждается в проверке уже открытых книг - первая открытая книга всегда имеет приоритет (так что если старшая версия открывается сначала, то именованные диапазоны работают правильно для него, и новая версия спроектирована правильно, так что она работает) (Таким образом, это только проблема, если старые версии открываются второй). Поэтому мне нужно только настроить функцию проверки книг, которые открываются после наиболее обновленной. –
Да, это имеет смысл. Если пользователь открывает «Старый», то «Новый», «Старый» будет ссылаться на «Старый» (сначала открыт), а «Новый» будет ссылаться на «Новые» (полностью квалифицированные ссылки), поэтому проблем нет. Если пользователь открывает New, затем Old, пользователь должен быть предупрежден. Если вы хотите пойти еще дальше, вы можете показать предупреждение, а затем спросить пользователя, нормально ли закрыть и снова открыть New, чтобы решить проблему. Если в New есть несохраненные изменения, пользователю необходимо либо сохранить, не сохранить, либо отменить. – devuxer