Microsoft Excel: Программное создание скрытого именованного диапазона

Мне сказали, что объектная модель Excel допускает Range, который не является частью какого-либо листа, но содержит набор ячеек и обозначается именем в рабочей книге.

Может ли кто-нибудь объяснить мне, как они вписываются в объектную модель Excel и как можно создавать такие вещи программно (либо в исходном коде VBA, либо в .NET).

Спасибо.


person mcoolbeth    schedule 18.05.2010    source источник
comment
Если я понимаю ваш вопрос, я никогда не слышал о такой вещи, но это наверняка было бы полезно!   -  person Icode4food    schedule 18.05.2010


Ответы (3)


Ваш вопрос немного расплывчатый, но я попробую.

Что ж, как описывает Дейв, вы можете дать определенному диапазону ячеек на листе «Имя диапазона», на которое затем можно ссылаться программно, но это не похоже на то, что вы спрашиваете.

Похоже, вы спрашиваете: «Есть ли абстрактный ДИАПАЗОН ячеек, доступных для использования кодом VBA, который буквально не существует ни на одном листе?» Ответ на этот вопрос — нет, даже именованные диапазоны — это просто удобная ссылка на реальный набор ячеек на реальном рабочем листе.

Однако вы можете программно скрыть рабочий лист, чтобы пользователь его не видел, и по-прежнему работать с ячейками и диапазонами на этом листе. Просто делать:

Sheets("Sheet1").Visible = xlSheetHidden
Sheets("Sheet2").Visible = xlSheetVeryHidden
Sheets("Sheet3").Visible = xlSheetVisible

Вы спросите, что такое «VeryHidden»? Это означает, что пользователь не может перейти в «Формат», «Лист», «Показать» и сделать лист видимым.

Итак, если я правильно понимаю, что вы хотите, просто программно скройте один из листов, а затем используйте технику Дэйва, чтобы создать именованную ссылку на диапазон на этом скрытом (или очень скрытом) листе.

person BradC    schedule 18.05.2010

Это будет именованный диапазон. Вы можете сослаться на выбранные ячейки и просто ввести имя, где оно говорит «A1» рядом с панелью формул. Это создает именованный диапазон, который не изменяется.

В качестве альтернативы вы можете создать именованный диапазон, основанный на формуле и, следовательно, потенциально меняющийся по мере изменения данных в электронной таблице. Вы делаете это с помощью параметра «Определить имя» (который находится на ленте формул в Office 2010).

Доступ к именованным диапазонам можно получить из VBA и (я почти уверен) из .net.

Таким образом, вы получите доступ к именованному диапазону из vba следующим образом:

Range["MyNamedRange"]
person Dave Arkell    schedule 18.05.2010

Да, есть элемент управления NamedRange. в пространстве имен Microsoft.Office.Tools.Excel в VSTO. Это управление хостом, отличается от собственного элемента управления Range в пространстве имен Microsoft.Office.Interop.Excel.Range.

person Todd Main    schedule 18.05.2010