Добрый день, коллеги.
Сижу в отладке, симулирую разные ошибки, столкнулся с таким потенциально неприятным моментом.
Есть файл, в нем определены, предположим, два, по случайности, одинаковых, имени.
Первое имеет область видимости лист "Тест1", и называется оно Name1
Второе имеет область видимости Книга, и называется оно тоже Name1
С помощью макроса, который я тут сократил до минимума, делаю следующее:
макрос возвращает на первом проходе:
всё вроде бы правильно.
На втором имени всё хуже:
На практике в массив имена сохраняются из одной книги, плюс делается еще ряд манипуляций, а потом идет обращение из массива к таким же именам в другой книге.
Если все имена различаются - то и проблем нет, какая разница, какая у него область. А если, вдруг, по нелепой случайности имена будут вот так коряво определены - тогда лезет вот такая ошибка.
Собственно вопросы в следующем:
1) как правильно обратиться к имени по имени, имея ввиду разные области видимости? Через Parent?
2) как правильно сохранить такие имена в массиве, с тем, чтобы потом к ним правильно обратиться?
Сижу в отладке, симулирую разные ошибки, столкнулся с таким потенциально неприятным моментом.
Есть файл, в нем определены, предположим, два, по случайности, одинаковых, имени.
Первое имеет область видимости лист "Тест1", и называется оно Name1
Второе имеет область видимости Книга, и называется оно тоже Name1
С помощью макроса, который я тут сократил до минимума, делаю следующее:
Код |
---|
Sub test_names() Dim nms As Names, nmeArr, i& Set nms = ThisWorkbook.Names: If nms.Count = 0 Then Exit Sub ReDim nmeArr(1 To nms.Count) For i = 1 To nms.Count Debug.Print "Имя: ", nms(i).Name nmeArr(i) = nms(i).Name Debug.Print "Вызывается: ", nmeArr(i), "Возвращается: ", nms(nmeArr(i)).Name Next End Sub |
макрос возвращает на первом проходе:
Код |
---|
Имя: Тест1!Name1 Вызывается: Тест1!Name1 Возвращается: Тест1!Name1 |
На втором имени всё хуже:
Код |
---|
Имя: Name1 Вызывается: Name1 Возвращается: Тест1!Name1 |
Если все имена различаются - то и проблем нет, какая разница, какая у него область. А если, вдруг, по нелепой случайности имена будут вот так коряво определены - тогда лезет вот такая ошибка.
Собственно вопросы в следующем:
1) как правильно обратиться к имени по имени, имея ввиду разные области видимости? Через Parent?
2) как правильно сохранить такие имена в массиве, с тем, чтобы потом к ним правильно обратиться?
F1 творит чудеса