Zulassen von Benutzerunterbrechungen bei langwierigen Vorgängen
Gilt für: Excel 2013 | Office 2013 | Visual Studio
Obwohl Windows präemptives Multitasking verwendet, bei dem die Ausführung Ihrer Funktionen oder Befehle sehr lange dauern kann, empfiehlt es sich, dem Betriebssystem ab und zu etwas Zeit zu geben, damit es gleichzeitige Aufgaben planen kann. Mithilfe nativer Windows-Aufrufe können Sie dazu die Ruhezustandsfunktion verwenden. Mit der C-API können Sie dies mithilfe der xlAbort-Funktion tun, die nicht nur den Prozessor für einen Moment liefert, sondern auch überprüft, ob der Benutzer die Abbrechen-Taste ESC gedrückt hat.
Die xlAbort-Funktion ermöglicht es Ihrem Code daher, zu überprüfen, ob der Benutzer den Prozess beenden, die erforderliche Bereinigung durchführen und dann die Steuerung an Excel zurückgeben möchte. Mit der -Funktion können Sie auch die Unterbrechungsbedingung löschen. Dadurch können Ihre Befehle ein Dialogfeld anzeigen, um zu überprüfen, ob der Benutzer den Befehl beenden möchte. Wenn der Benutzer den Befehl nicht beenden möchte, löscht das Aufrufen der xlAbort-Funktion mit dem Argument FALSE den Umbruch. (Das Standardargument ist TRUE , das einfach die Bedingung überprüft, aber nicht löscht.)
Sie können die xlAbort-Funktion über eine benutzerdefinierte Funktion (UDF) oder über einen XLL-Befehl aufrufen. Wenn in einer UDF die xlAbort-FunktionTRUE zurückgibt und ein Benutzerfehler erkannt wurde, würden Sie in der Regel die Funktionsberechnung kürzen und einen Wert zurückgeben, der angibt, dass die Berechnung nicht abgeschlossen wurde, z. B. ein Fehler oder null. Sie würden die Unterbrechungsbedingung nicht löschen, sodass auch andere Instanzen von langen Funktionen, die diese Bedingung überprüfen, unterbrochen werden. Excel löscht diese Bedingung implizit, wenn eine Neuberechnung endet.
Wenn Sie eine Unterbrechungsbedingung in einem Befehl erkennen, löschen Sie die Bedingung in der Regel, indem Sie die xlAbort-Funktion erneut mit dem Argument FALSE aufrufen, obwohl Excel diese Bedingung implizit löscht, wenn ein Befehl beendet wird.
Siehe auch
C-API-Funktionen, die nur aus einer DLL oder XLL aufgerufen werden können
Multithread-Neuberechnung in Excel
Entwickeln von XLLs für Excel
Zugreifen auf Excel-Instanz- und Hauptfensterhandles