Запретить Excel сохранять путь UDF к ячейкам формулы

Я использую пользовательскую надстройку, которая добавляет функции в Excel, например UDF1 (param1, param2).

(1) пример вызова в ячейке: =UDF1(param1, param2)

При сохранении workbook1, реализующего UDF(), Excel автоматически добавляет путь к надстройке при каждом вызове UDF(). Это можно увидеть при удалении надстройки и повторном открытии workbook1.

Excel просит обновить внешние ссылки, я нажимаю не обновлять.

(2) новое содержимое ячейки: ='\...\user\Desktop\Addin1'!UDF1(param1, param2)

Как запретить Excel сохранять путь к надстройке при сохранении книги?

Я хотел бы, чтобы новое содержимое ячейки (2) соответствовало исходному содержимому (1).

(Это особенно раздражает, когда разные люди используют одну и ту же надстройку, соответственно установленную в другом месте на своих компьютерах, поскольку это требует удаления пути «\......!» из каждой ячейки каждый раз, когда рабочая книга открыт другим пользователем.)

Изменить: Удалить путь надстройки из UDF в формуле Excel и http://www.jkp-ads.com/Articles/FixLinks2UDF.asp это не то, что я ищу, так как предлагаемые решения являются обходными путями.


person SuperUser01    schedule 16.06.2015    source источник


Ответы (2)


Вы очень хорошо изучили вопрос* и нашли ответ, который вам не понравился: то, что вы хотите сделать, невозможно.

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

Вам нужен обходной путь, либо из предложенных в предоставленных вами ссылках, либо, возможно, что-то альтернативное.

.* Это не типичный случай.

person sancho.s ReinstateMonicaCellio    schedule 16.06.2015
comment
Хотя всегда трудно доказать отсутствие чистого решения, вы подтвердили то, что я ожидал... - person SuperUser01; 16.06.2015
comment
@ user3641140 - Согласен на 100%. Я уже задавал вопросы в том же духе. - person sancho.s ReinstateMonicaCellio; 16.06.2015
comment
НО - возможно ли, что это проблема среды разработки? т.е. может быть способ решить проблему, создав надстройку в Visual Studio/C# вместо встроенного в Excel редактора VBA? (Я знаю, что существуют надстройки, у которых нет описанной выше проблемы. В конце концов, разве цель надстройки не заключается в распространении кода...?) - person SuperUser01; 17.06.2015

Как всегда, есть способ использовать определяемые пользователем функции (UDF) из надстройки. Пусть у нас есть функция в excel Addin-File B.xlam в модуле, который у нас есть

Public Function Volume(a as Double, b as Double, c as Double)
    Volume = a * b * c
End Function

Этот файл имеет Workbook.IsAddin-свойство, установленное на true, и хранится в том же каталоге, что и потребляющий лист Excel A.xlsm. Этот лист Excel имеет ссылку VBA на файл B.xlam. Если вы затем используете функцию Volume в любой ячейке A.xlsm, функция делегируется VBA, и VBA также проверяет, существует ли функция Volume в указанном файле B.xlam. References-Example Пока все хорошо. Если в представлении рабочей книги Excel отображаются ссылки (на ленте данных), измените ссылку с B.xlam на сам файл A.xlsm. Итак, наконец, нет прямой ссылки на Excel от A.xlsm до B.xlam. Единственная существующая ссылка - это VBA-Reference.

Теперь, если аддин-файл B.xlam загружается перед файлом A.xlsm, ссылка всегда относится к открытому файлу. В противном случае VBA ищет исходный путь и, если он не существует, ищет путь к рабочей книге.

Таким образом, на UDF можно ссылаться через VBA, а надстройка может находиться где угодно, если она загружена перед потребляющим файлом или в том же каталоге потребляющего файла Excel.

person DrMarbuse    schedule 06.02.2020