Compartilhar via


Permitindo interrupções de usuário em operações longas

Aplica-se a: Excel 2013 | Office 2013 | Visual Studio

Embora o Windows use multitarefas preventivas, em que suas funções ou comandos podem levar muito tempo para serem executados, é uma boa prática gerar algum tempo para o sistema operacional de vez em quando para ajudá-lo a agendar tarefas simultâneas. Usando chamadas nativas do Windows, você pode fazer isso usando a função de sono. Usando a API C, você pode fazê-lo usando a função xlAbort, que não só gera o processador por um instante, mas também verifica se o usuário pressionou a tecla cancel, ESC.

Portanto, a função xlAbort permite que seu código marcar se o usuário deseja encerrar o processo, fazer a limpeza necessária e retornar o controle ao Excel. A função também permite limpar a condição de interrupção. Isso permite que seus comandos exibam uma caixa de diálogo para verificar se o usuário deseja encerrar o comando. Se o usuário não quiser encerrar o comando, chamar a função xlAbort com o argumento FALSE limpará a interrupção. (O argumento padrão é TRUE , que simplesmente verifica a condição, mas não a limpa.)

Você pode chamar a função xlAbort de uma UDF (função definida pelo usuário) ou de um comando XLL. Em uma UDF, quando a função xlAbort retorna TRUE, tendo detectado uma quebra de usuário, você normalmente interromperia o cálculo da função e retornaria algum valor para indicar que o cálculo não foi concluído, talvez um erro ou zero. Você não limparia a condição de interrupção para que outras instâncias de funções longas que também marcar essa condição também sejam interrompidas. O Excel limpa implicitamente essa condição quando uma recalculação termina.

Quando você detecta uma condição de interrupção em um comando, normalmente limpa a condição chamando a função xlAbort novamente com o argumento FALSE, embora o Excel limpe implicitamente essa condição quando um comando termina.

Confira também

Funções da API de C que podem ser chamadas apenas de uma DLL ou XLL
Recálculo com vários threads no Excel
Desenvolvimento de XLLs do Excel
Acessar a instância do Excel e as alças da janela principal