Microsoft Excel: программно создать скрытый именованный диапазон - PullRequest
1 голос
/ 18 мая 2010

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

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 18 мая 2010

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

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

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

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

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

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

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

1 голос
/ 18 мая 2010

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

1 голос
/ 18 мая 2010

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

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

Именованные диапазоны могут быть доступны из VBA и (я почти уверен) из .net.

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

Range["MyNamedRange"]
...