2014-07-24 3 views
5

Любые предложения по наилучшей практике для решения этой проблемы?Расширение Excel над UDF проблемой

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

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

Один из способов борьбы с этим - поиск & замените все формулы в книге, заменив путь пустой строкой. Затем формулы перезагружаются для пути надстройки на текущем компьютере. Иногда мне приходится идти в VBE и запускать CalculateFullRebuild, чтобы заставить формулы работать. Несмотря на то, что это работает, многие спрашивают о менее технических пользователях, и это раздражает, когда приходится часто делать это для тех пользователей, которые много перемещают свои книги.

Предложения?

Также - у COM-надстроек есть эта проблема? Моя надстройка - это xla. Хотя мне это интересно, в этом случае это спорный вопрос, поскольку надстройки COM не работают в Macintosh Excel, и мне нужно, чтобы эта надстройка работала межплатформенной.

UPDATE:

В соответствии с просьбой, вот скриншот:

Screenshot showing path in formula http://i62.tinypic.com/axz68n.png

Этот скриншот показывает, что происходит, если Фред, который положил надстройку в C: \ Фреда инструменты \ Фреда Excel Материал \ MyAddin.xla отправляет свою книгу Марте, которая помещает ту же надстройку в другой путь, такой как файлы C: \ Martha's Files \ Martha Excel \ MyAddin.xla, а Марта открывает файл, отправленный Fred.

Если Martha удаляет путь, оставив в формуле только «= MyUDF()», Excel найдет MyAddin.xla на компьютере Марты на пути, на котором Марта положила его (если предположить, что она ранее установила MyAddin.xla в качестве дополнения -in в Excel) и правильно разрешить формулу.

+0

Грег использует путь UNC, а не букву диска. Это должно позаботиться об этом. –

+0

Можете ли вы скриншоты некоторых примеров ...? – ja72

+0

@ David Zemens: Как бы я это сделал? Ни разработчик, ни пользователь никогда вообще не входят в путь к надстройке. Excel делает это самостоятельно.Вы говорите, что когда пользователь вводит формулу, они должны включать UNC-путь к надстройке в формуле, один раз для каждого экземпляра любого UDF в формуле? Это было бы абсурдным требованием. –

ответ

5

Это один из многих багбиров разработчики Excel должны столкнуться в тот или иной момент, и есть несколько обходных для него, но какой из них вы выберете, будет зависеть от ваших собственных обстоятельств:

http://www.jkp-ads.com/articles/FixLinks2UDF00.asp

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

  • Использования фиксированных места.
  • Вместо того, чтобы хранить код UDF внутри аддиката, вы создаете средство, которое копирует подпрограмму UDF в каждую рабочую книгу, которая ее использует.
  • Перенаправить UDF в новое место.
+1

Спасибо, после быстрого сканирования, я думаю, что последний элемент, указанный там, «Перенаправить UDF в новое место», выглядит хорошо, за исключением комментария «Мы предполагаем, что функция сама по себе, НЕ вложена внутри другой !!!» , Это плохая новость, которая делает решение бесполезным в моем случае и, возможно, запутанным для некоторых пользователей (и, следовательно, хуже, чем ничего), поскольку оно исправляет некоторые пути, а не другие, и, возможно, калечит некоторые. Я должен посмотреть, могу ли я заставить его работать с вложенными функциями. Даже если я не могу, хотя, хорошо знать, что я не пропустил очень хорошее решение. –

+2

@Tim - я добавил небольшое резюме о том, что содержит ссылка, чтобы избежать ответа только на ближайшую ссылку и, надеюсь, сделает ваш ответ немного более стойким к времени. Пожалуйста, не стесняйтесь приспосабливаться, если вы чувствуете, что я помещаю слова во рту. – RyanfaeScotland

Смежные вопросы