Как сохранить ссылку формулы на лист, когда лист удален и заменен? - PullRequest
2 голосов
/ 01 ноября 2010

Я являюсь автором приложения, которое перед открытием книги Excel удаляет и воссоздает некоторые листы, такие как, например, «Лист1» в приведенном ниже примере.

Другие листы (например, Лист2) в том жеРабочая книга может иметь формулы, которые ссылаются на замененную рабочую таблицу, например:

=IF('Sheet1'!A9="","",'Sheet1'!A9)

К сожалению, ссылка в приведенной выше формуле на Лист1 прерывается при замене листа и становится

=IF(#Ref!A9="","",#REF!A9)
* 1008.* Кто-нибудь может придумать способ кодирования этой формулы, чтобы она не потерпела неудачу?Например, он может получить имя листа из скрытой ячейки в Sheet2 или что-то в этом роде?

Я просто недостаточно разбираюсь в формулах Excel, чтобы знать, каковы возможности.

ТИА

1 Ответ

5 голосов
/ 01 ноября 2010

Использовать косвенную адресацию и именованные диапазоны

1) Используйте фантомные ячейки (т.е. Z1 ... Zn), заполненные текстом "SheetN!" для каждого листа, который вы хотите удалить.

2) Определить имена диапазонов для всех ваших внешне адресуемых ячеек и диапазонов в этих листах

3) В ваших формулах замените ссылки на «Косвенные» и ЛИТЕРАТУРНЫЙ для указанного диапазона.

Пример:

Заменить

    =Sum(Sheet1!A:A)   

с

    =SUM(INDIRECT(Z1&"caca"))  

Где "caca" - это именованный диапазон, определенный в Sheet1 как A: A, а Z1 содержит "Sheet1!"

Другой пример:

Заменить

    =Sheet1!A1+Sheet1!A2

с

    =INDIRECT(Z1&"NamedRangeForA1")+INDIRECT(Z1&"NamedRangeForA2")  

Теперь вы можете удалить Sheet1 без проблем со ссылками.

Вы должны воссоздать (в VBA) Именованные Диапазоны, когда добавляете свой новый Лист1.

Редактировать: Отвечая на ваш комментарий о листах с пробелами в названии

В этом случае вам нужно экстра-фу :)

Используйте это:

 =INDIRECT("_'_" & Z1& "_'_!_" & "caca")  

"_" следует удалить, так как я вставил их туда просто для упрощения визуализации одинарных и двойных кавычек.

В ячейку Z1 введите имя Sheet1 без кавычек и без восклицательного знака (как оно уже есть в формуле).

НТН!

...