xlAbort

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

Возвращает процессор другим задачам в системе и проверяет, нажал ли пользователь ESC для отмены макроса. Если пользователь нажал ESC во время пересчета книги, его также можно обнаружить из функции листа, вызвав эту функцию.

Excel12(xlAbort, LPXLOPER12 pxRes, 1, LPXLOPER12 pxRetain);

Параметры

pxRetain (xltypeBool)

(Необязательно). Если значение FALSE, эта функция проверяет наличие условия прерывания и очищает все ожидающие перерывы. Это позволяет пользователю продолжать работу, несмотря на условие прерывания. Если этот аргумент опущен или имеет значение TRUE, функция проверяет наличие прерывания пользователя, не очищая его.

Значение свойства и возвращаемое значение

Возвращает значение TRUE (xltypeBool), если пользователь нажал ESC.

Могут потребоваться частые звонки

Функции и команды, которые могут занять много времени, должны часто вызывать эту функцию, чтобы предоставить процессор другим задачам в системе.

Избегайте конфиденциального языка

Избегайте использования термина "Abort" в пользовательском интерфейсе. Вместо этого рекомендуется использовать "Отмена", "Остановить", "Сломать" или "Остановить".

Пример

Следующий код неоднократно перемещает активную ячейку на листе до одной минуты или до тех пор, пока пользователь не нажмет ESC. Функция xlAbort вызывается иногда. Это дает процессор, облегчая совместную многозадачность.

\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;
}

См. также

Функции API C, которые можно вызывать только из библиотеки DLL или XLL