Excel VBA worksheet.names против worksheet.range - PullRequest
3 голосов
/ 01 февраля 2010

Я создал определенное имя / диапазон на листе с именем bob, указывающим на одну ячейку. На этом листе есть ряд других имен / диапазонов, которые я не создал. Все числа / диапазоны работают отлично, кроме моего.

Я должен иметь возможность ссылаться на содержимое этой ячейки, используя любое из следующих утверждений:

(worksheet object).Names("bob").RefersToRange.Value
(worksheet object).Range("bob").Value

Однако почему-то работает только второе утверждение, относящееся к Range. Первый не может найти имя в списке Names.

Мои вопросы:

  1. Какая разница, если таковая имеется, между Name и Range?
  2. Это как-то связано с глобальной / локальной областью моего имени / диапазона?
  3. Как были созданы другие имена / диапазоны на листе, чтобы они появлялись в обоих листах Name и Range в списке?

Ответы [ 2 ]

9 голосов
/ 01 февраля 2010

Да, вы правы. Имена могут быть локальными (принадлежать рабочей таблице) и глобальными (принадлежать рабочей книге).

(worksheet object).Names("bob") найдет только локальное имя. Ваше имя очевидно глобально, поэтому вы можете получить к нему доступ как (worksheet object).Workbook.Names("bob").RefersToRange.

"Другие имена", вероятно, местные. Они появляются в списке диапазонов только тогда, когда их родительский лист активен (проверьте это). Чтобы создать локальное имя, добавьте к нему имя листа, разделенное символом «!»: 'My Sheet Name'!bob.

1 голос
/ 10 июня 2010

Я не знаю, как это сделать с кодом, но если вы зайдете в Диспетчер имен В группе вкладок Формула на ленте в Excel 2007, вы можете создавать имена и выбирать их область действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...