暂停VBA宏以允许手动输入数据

暂停VBA宏以允许手动输入数据,vba,excel,Vba,Excel,我有一个Excel工作簿宏,它打开另一个工作簿并开始将数据复制到其中并格式化。在此过程中,我希望宏暂停,让用户手动将数据输入目标工作簿,然后继续处理 MsgBox、Application.Wait()和Sleep都是应用程序模式,在执行时不允许用户更新其他工作簿中的任何内容 我在寻找解决方案时发现。这让我半途而废,因为我可以操纵另一张纸,但只能用我的鼠标。没有键盘按键被发送到工作簿 有没有办法一路赶到那里 我在想我可以有两个宏。用户将运行一个,然后执行手动任务,然后运行另一个。这似乎是可行的,但

我有一个Excel工作簿宏,它打开另一个工作簿并开始将数据复制到其中并格式化。在此过程中,我希望宏暂停,让用户手动将数据输入目标工作簿,然后继续处理

MsgBox、Application.Wait()和Sleep都是应用程序模式,在执行时不允许用户更新其他工作簿中的任何内容

我在寻找解决方案时发现。这让我半途而废,因为我可以操纵另一张纸,但只能用我的鼠标。没有键盘按键被发送到工作簿

有没有办法一路赶到那里

我在想我可以有两个宏。用户将运行一个,然后执行手动任务,然后运行另一个。这似乎是可行的,但我必须把所有的东西都转换成globals,所以希望有人有更好的想法


谢谢

根据要复制和粘贴的宏的运行情况,在执行宏期间,用户的主要关注点是在用户操作某些内容后,将活动单元格/工作表(如果使用)恢复为活动状态

我建议在Application.Wait()之前将活动单元格/工作表地址存储在变量中,然后在resume中将活动单元格设置为该存储值


但是,如果不张贴宏正在执行的操作,则很难知道此建议是否有助于您当前的情况。

您可以设置一个。看起来非常像X-Y问题。你需要重组你的东西。如果看不到代码或对代码的功能一无所知,就很难说出来。但是,听起来你想要两个宏。或者调出一个UserForm供用户提供输入。将
DoEvents
添加到当前代码中,然后在单独的新代码中捕获键盘事件,请参见此。如果引发UserForm,宏将停止,并在UserForm关闭时恢复。另一个选项是引发一个INPUTBOX(因为它将暂停执行,直到用户输入某些内容),该选项要求用户输入您需要手动键入的值以及输入的位置。因此,如果您需要输入简单易用的内容,请使用Inputbox。如果是更复杂的事情,并且您希望完全控制Excel在暂停期间的操作。使用用户表单。工作表中有一个任务列表,以及估计完成的时间和到目前为止的进度。我有一个很容易计算的完成百分比列。问题是有些任务是由两个人分担的。任务名称类似于“XYZ(John)”和“XYZ(Jane)”,我需要计算它们之间的总完成百分比。如果总共10个小时,John完成了5个,Jane完成了2个,那么John完成的百分比是100,Jane完成的百分比是40,但两行的总完成百分比都是70。我尝试使用pivot进行此操作,但无效。需要同时使用project和name字段来计算完成百分比。这可以通过一组sumif来完成。通常最容易做到这一点的方法是拆分列,使一列使用XYZ,下一列使用用户名。然后,有一列显示计划项目小时数,一列显示用户名占计划项目小时数的百分比,以及一列显示用户名已完成小时数。