xlAbort
Gilt für: Excel 2013 | Office 2013 | Visual Studio
Übergibt den Prozessor für andere Aufgaben im System und überprüft, ob der Benutzer ESC gedrückt hat, um ein Makro abzubrechen. Wenn der Benutzer während einer Arbeitsmappenneuberechnung ESC gedrückt hat, kann dies auch innerhalb einer Arbeitsblattfunktion erkannt werden, indem diese Funktion aufgerufen wird.
Excel12(xlAbort, LPXLOPER12 pxRes, 1, LPXLOPER12 pxRetain);
Parameter
pxRetain (xltypeBool)
(Optional). False gibt an, dass diese Funktion nach der Unterbrechungsbedingung sucht und alle ausstehenden Unterbrechungen löscht. Dadurch kann der Benutzer trotz der Unterbrechungsbedingung fortfahren. Wenn dieses Argument nicht angegeben wird oder TRUE ist, überprüft die Funktion, ob ein Benutzer abgebrochen wird, ohne es zu löschen.
Eigenschaftswert/Rückgabewert
Gibt TRUE (xltypeBool) zurück, wenn der Benutzer ESC gedrückt hat.
Häufige Anrufe sind möglicherweise erforderlich
Funktionen und Befehle, die lange dauern können, sollten diese Funktion häufig aufrufen, um den Prozessor anderen Aufgaben im System zu ermöglichen.
Vermeiden vertraulicher Sprache
Vermeiden Sie die Verwendung des Begriffs "Abort" in Ihrer Benutzeroberfläche. Erwägen Sie stattdessen die Verwendung von "Cancel", "Halt", "Break" oder "Stop".
Beispiel
Der folgende Code verschiebt die aktive Zelle auf einem Blatt wiederholt, bis eine Minute verstrichen ist oder bis der Benutzer ESC drückt. Die XlAbort-Funktion wird gelegentlich aufgerufen. Dies führt zum Prozessor, wodurch kooperatives Multitasking erleichtert wird.
\SAMPLES\GENERIC\GENERIC.C
int WINAPI fDance(void)
{
DWORD dtickStart;
XLOPER12 xAbort, xConfirm;
int boolSheet;
int col=0;
XCHAR rgch[32];
//
// Check what kind of sheet is active. If it is a worksheet or macro
// sheet, this function will move the selection in a loop to show
// activity. In any case, it will update the status bar with a countdown.
//
// Call xlSheetId; if that fails the current sheet is not a macro sheet or
// worksheet. Next, get the time at which to start. Then start a while
// loop that will run for one minute. During the while loop, check if the
// user has pressed ESC. If true, confirm the abort. If the abort is
// confirmed, clear the message bar and return; if the abort is not
// confirmed, clear the abort state and continue. After checking for an
// abort, move the active cell if on a worksheet or macro. Then
// update the status bar with the time remaining.
//
// This block uses TempActiveCell12(), which creates a temporary XLOPER12.
// The XLOPER12 contains a reference to a single cell on the active sheet.
// This function is part of the framework library.
//
boolSheet = (Excel12f(xlSheetId, 0, 0) == xlretSuccess);
dtickStart = GetTickCount();
while (GetTickCount() < dtickStart + 60000L)
{
Excel12f(xlAbort, &xAbort, 0);
if (xAbort.val.xbool)
{
Excel12f(xlcAlert, &xConfirm, 2,
TempStr12(L"Are you sure you want to cancel this operation?"),
TempNum12(1));
if (xConfirm.val.xbool)
{
Excel12f(xlcMessage, 0, 1, TempBool12(0));
return 1;
}
else
{
Excel12f(xlAbort, 0, 1, TempBool12(0));
}
}
if (boolSheet)
{
Excel12f(xlcSelect, 0, 1,
TempActiveCell12(0,(BYTE)col));
col = (col + 1) & 3;
}
wsprintfW(rgch,L"0:%lu",
(60000 + dtickStart - GetTickCount()) / 1000L);
Excel12f(xlcMessage, 0, 2, TempBool12(1), TempStr12(rgch));
}
Excel12f(xlcMessage, 0, 1, TempBool12(0));
return 1;
}
Siehe auch
C-API-Funktionen, die nur aus einer DLL oder XLL aufgerufen werden können