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