VBA停止在excel中运行嵌套宏?

时间:2015-12-14 14:55:18

标签: excel vba excel-vba

我的电子表格上有一个按钮,点击后会触发一系列嵌套的潜艇。例如:

data t_lookup /view= t_lookup;
  set monthlytable;
  by subjID;
  if first.subjID then id_range_count = 0;
  id_range_count + 1;
run;

data want;
  set eventstable;
  if _n_ = 1 then do;
    if 0 then set monthlytable(keep = subjID startdate enddate); /*Add extra lookup vars here as needed*/
    declare hash h(dataset:"t_lookup");
    rc = h.definekey("subjID","id_range_count");
    rc = h.definedata("startdate","enddate"); /*Add extra lookup vars here as needed*/
    rc = h.definedone();
  end;
  match = 0;
  rc    = 0;
  do id_range_count = 1 by 1 while(rc = 0 and match = 0);
    rc = h.find();
    match = startdate < eventdate <= enddate;
  end;
  if match = 0 then call missing(startdate,enddate);
  drop rc match id_range_count;
run;

因为运行所有这些子例程的时间可能相当冗长,并且用户在运行时无法在excel中执行任何其他操作,我想知道是否有一种方法可以创建一个按钮,单击该按钮时可以停止运行所有这些潜艇?我已经看到了在代码中添加Sub Button1_Click() Macro1 Macro2 Macro3 Macro4 Macro5 Macro6 End Sub 的建议,但是,我不确定我的代码在哪里实现它。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:2)

DoEvents语句将允许任何滞后的用户输入和事件处理。

解决方案

您可能想要做的是重载OnKey事件处理程序并使用它来设置全局变量的值。接下来在上面的代码中,您需要验证是否设置了该变量。如果是中止执行。请务必在代码中的任何时刻添加DoEvents语句,以便运行它。

(可选),没有OnKey处理程序,DoEvents将允许用户点击 ESC 来停止执行宏。但它将恢复为调试模式并突出显示过程中当前执行的行。不确定这是你想要的。

提示 - 先做什么

说完......我个人认为你应该做的 FIRST 是优化你的VBA代码。我认为可能有很大的空间来改善程序的执行时间(my tutorial)。

答案 1 :(得分:0)

您可以创建宏以执行以下步骤/操作,并在想要中止其他正在运行的宏时调用:

步骤1-菜单栏->运行->重置

第2步-菜单栏->运行->中断