Привет, у меня немного сложная настройка диапазонов данных, которые поступают в Excel (версия 2003) с помощью XML / Soap и управляются с помощью VBA. Результат отображается в нескольких списках на разных листах. Основная таблица данных имеет кодовое название «shData», имя таблицы - «Данные» (пока довольно изобретательно, хм?) И содержит около 200 различных диапазонов данных. Одна из страниц дисплея называется Setup или shSetup. Диапазон данных в Data может выглядеть так:
ID Last First Group
1 Dwyer Barb A
2 King Fu A
3 Rea Di A. C
Допустим, диапазон назван локально как «Data! Day0_Users».
Другой диапазон, скажем «Data! Day1_Users», может быть просто заголовком (если данных нет):
ID Last First Group
Эти диапазоны вставляются в VBA или удаляются из них, а их размер изменяется изнутри, поэтому мне нужен гибкий механизм ссылок. Теперь ListBoxes может использовать именованный диапазон как ListFillRange. Для этого я определяю локальное имя в Setup, которое ссылается на имя в данных, но использует смещение для исключения строки заголовка: shSetup name "lbSomeListbox", относится к OFFSET (Data! Day0_Users, 1,, ROWS (Data! Day0_Users) -1) Пока все хорошо. Очевидно, что когда диапазон в Data пуст, как в «Data! Day1_Users» в моем примере, такая ссылка вызовет ошибку. В таком случае я хотел бы заменить ссылку на пустой массив (который определяется как «Setup! EmptyRange5Col», который, в свою очередь, снова является ссылкой смещения на Data! EmptyRange5Col, чтобы вернуть только часть «-».
Empty Empty Empty Empty
- - - -
Теперь я попытался определить свой локальный диапазон как имя, используя механизм контроля ошибок Excel, но он не работает - следующие данные должны использовать смещенные данные или заменить их моим пустым массивом.
=IF(ISERROR(OFFSET(Data!Day0_Users, 1, , ROWS(Data!Day0_Users)-1)), Setup!EmptyRange5Col, OFFSET(Data!Day0_Users, 1, , ROWS(Data!Day0_Users)-1))
Если я использую ту же формулу (я также пробовал несколько других вариантов) на самом листе, используя = ISREF (IF (IsError .....), она всегда оценивается как истина; попытка одной только ISERROR всегда оценивает false, все как следовало ожидать. Но как только я помещаю его в определение имени, ссылка не работает, вызовы shSetup.Names (...). RefersToRange вызывают ошибки времени выполнения и т. д.
Есть ли в Excel недокументированные ограничения на использование формул для имен, или я дурак? Я смотрю на это около 2 часов и не вижу света. Я был бы очень признателен, если бы вы подтолкнули меня в правильном направлении.
Заранее спасибо, Стефан
OFFSET(Data!Day0_Users, 1, , ROWS(Data!Day0_Users)-1)
. Отсутствующий параметрcols
является обязательным. (2) Синтаксис дляIF
-IF(logical_test, [value_if_true], [value_if_false])
. Я никогда не пробовал использовать его для возврата Range. Получили ли вы эту работу так, как хотите? Согласно моим экспериментам, в=OFFSET(reference, rows, cols, [height], [width])
высота и ширина оцениваются по одному из любых значений, которые вы предоставляете. - person Tony Dallimore   schedule 14.03.2012