Разрешение пользовательских перерывов в длительных операциях

Область применения: Excel 2013 | Office 2013 | Visual Studio

Несмотря на то, что Windows использует упреждающую многозадачность, где выполнение функций или команд может занять много времени, рекомендуется предоставить операционную систему время, чтобы помочь ей планировать одновременные задачи. Используя собственные вызовы Windows, это можно сделать с помощью функции спящего режима. С помощью API C это можно сделать с помощью функции xlAbort, которая не только мгновенно выдает процессор, но и проверяет, нажал ли пользователь клавишу отмены ESC.

Таким образом, функция xlAbort позволяет коду проверка, хочет ли пользователь завершить процесс, выполнить необходимую очистку, а затем вернуть управление в Excel. Функция также позволяет очистить условие прерывания. Это позволяет командам отображать диалоговое окно, чтобы проверить, хочет ли пользователь завершить команду. Если пользователь не хочет завершать команду, вызов функции xlAbort с аргументом FALSE очищает разрыв. (По умолчанию используется аргумент TRUE , который просто проверяет условие, но не очищает его.)

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

При обнаружении условия прерывания в команде обычно это условие очищается путем повторного вызова функции xlAbort с аргументом FALSE, хотя Excel неявно очищает это условие по завершении команды.

См. также

Функции API C, которые можно вызывать только из библиотеки DLL или XLL
Многопоточный пересчет в Excel
Разработка XLL-файлов для Excel
Доступ к дескрипторам основного окна и экземпляра Excel