VBA Excel UDF сохраняет исходное значение

У меня в VBA есть энергонезависимая функция UDF, для которой требуется глобальная переменная (обратный вызов для VSTO). Эта функция находится в xla или xlam (такое же поведение)

Есть ли способ отменить вычисление формулы, если переменная еще недоступна?

В Excel Автоматический режим пересчета (я не хочу это изменять) Excel каждый раз перечитывает ячейки с моей функцией, когда я открываю книгу, заменяя значение, сохраненное в ячейке, с ошибкой: «#ARG!».

Я знаю, как вернуть пустую ячейку, если моя переменная не инициализирована, но возможно ли вернуть исходное значение? Я проверил с помощью отладчика, что он был сохранен в рабочей книге. Попытка вернуть Application.Caller.Value2 вызывает циклическую ссылку.

Кроме того, функция не вызывается (ожидаемое поведение), если код VBA встроен в рабочую книгу (xlsm), или если рабочая книга находится в формате xls. Однако преобразование книги в xlsx приводит к перерасчету ячеек после открытия рабочей книги, как описано.

Вы можете сделать это в XLM или C XLL, отметив функцию как макрофункцию. В VBA единственным простым способом, который я знаю, является уродливый взлом: return Application.Caller.Text, если переменная не инициализирована. Это связано с основным недостатком, который дает вам форматированное значение ячейки, а не фактическое значение. В противном случае вам необходимо создать способ сохранения значения ячейки в закрытой, но сохраненной книге: возможные схемы включают использование определенных имен, комментариев к ячейкам, реестра, внешних файлов и т. Д., Но я не думаю, что есть чистая Решение VBA.

В конце концов я пошел с подходом xlsm.

  • ElementHost не обновляется после того, как книга переместилась над ним в Excel 2010
  • Как повторно применять фильтр данных программно?
  • Excel VSTO не загружается, если есть макросы VBA
  • Лента Excel не может сфокусироваться на новом созданном листе C #
  • Выбор Excel VSTO
  • Поверхность .NET-метод как UDF в Excel 2007 с использованием надстройки VSTO 2008
  • Как назначить массив значений ячейкам Excel без потери форматирования таблицы в VSTO
  • Файл VSTO SaveAs заблокирован
  • Как иметь excel addin читать строки с листа, пока не будет больше данных?
  • Есть ли способ захватить HotKeys / Shortcuts в Excel VSTO, используя только C # и без VBA?
  • c #: программно создать «именованный диапазон» в области рабочего листа
  • Давайте будем гением компьютера.