VBA Excel UDF сохраняет исходное значение
У меня в VBA есть энергонезависимая функция UDF, для которой требуется глобальная переменная (обратный вызов для VSTO). Эта функция находится в xla или xlam (такое же поведение)
Есть ли способ отменить вычисление формулы, если переменная еще недоступна?
В Excel Автоматический режим пересчета (я не хочу это изменять) Excel каждый раз перечитывает ячейки с моей функцией, когда я открываю книгу, заменяя значение, сохраненное в ячейке, с ошибкой: «#ARG!».
- Excel 64 бит и SQL Server CE 4 Частное развертывание с платформой Entity Framework 6
- Контекстное меню правой кнопкой мыши VSTO Excel - добавление элемента с подпунктами
- Как я могу проверить наличие / разрешение макроса из моей надстройки?
- Прочтите размер 1 ГБ с 1,5 записями на лист до набора данных
- Создайте надстройку и UDF для всех версий Excel
Я знаю, как вернуть пустую ячейку, если моя переменная не инициализирована, но возможно ли вернуть исходное значение? Я проверил с помощью отладчика, что он был сохранен в рабочей книге. Попытка вернуть Application.Caller.Value2
вызывает циклическую ссылку.
Кроме того, функция не вызывается (ожидаемое поведение), если код VBA встроен в рабочую книгу (xlsm), или если рабочая книга находится в формате xls. Однако преобразование книги в xlsx приводит к перерасчету ячеек после открытия рабочей книги, как описано.
- Excel: получение окружающего именованного диапазона в Excel
- Excel отображает #Value! когда региональная настройка изменилась на неанглийскую
- Worksheet.Name вызывает OutOfMemoryException
- Лента Excel в VSTO, которая вставляет с добавлением COM в excel
- Excel не будет открывать / запускать VSTO AddIn при запуске в режиме отладки Visual Studio 2010
- Уникальный идентификатор рабочей книги excel во vsto
- Ошибка VSTO - GetVstoObject возвращает неверный рабочий лист
- Могу ли я иметь экземпляр .NET 4.0 для CLR и экземпляр .NET 3.5 для CLR в том же процессе Windows?
Вы можете сделать это в XLM или C XLL, отметив функцию как макрофункцию. В VBA единственным простым способом, который я знаю, является уродливый взлом: return Application.Caller.Text, если переменная не инициализирована. Это связано с основным недостатком, который дает вам форматированное значение ячейки, а не фактическое значение. В противном случае вам необходимо создать способ сохранения значения ячейки в закрытой, но сохраненной книге: возможные схемы включают использование определенных имен, комментариев к ячейкам, реестра, внешних файлов и т. Д., Но я не думаю, что есть чистая Решение VBA.
В конце концов я пошел с подходом xlsm.