dnL*_*nLL 5 excel vba excel-vba msgbox excel-2010
我在Excel中使用VBA计算大量数据,并希望在完成后显示MsgBox.MsgBox实际上显示了计算所花费的时间.
问题是当用户在计算发生时决定做其他事情时.Excel继续计算,当它完成时,MsgBox确实显示但由于某种原因,Excel不会将焦点放在MsgBox上.Excel图标将在任务栏中闪烁,如果我们单击它,Excel会最大化,但MsgBox在Excel窗口后面,我们永远不能单击它.所以摆脱它的唯一方法是taskkill excel.exe ...不是很好.Alt + Pause也不起作用,因为代码将仅在当前代码行之后停止,该代码结束...当MsgBox关闭时.
我AppActivate("Microsoft Excel")之前尝试过这个功能没有任何成功(如何将焦点带到msgbox?).应用程序名称实际上比Excel 2010更长,因为Excel 2010将文档名称添加到窗口标题.
知道如何解决这个烦人的问题吗?
无论哪个其他应用程序具有焦点,这都将在 Excel 中工作:
在消息框或任何警告之前放置以下代码:
Run Code Online (Sandbox Code Playgroud)AppActivate Application.Caption DoEvents
相信我,这太棒了!
我尝试了大多数其他答案:
ThisWorkbook.ActivateAppActivate()Application.Wait()Sleep图书馆无论出于何种原因,上述方法都不起作用。我相信我们的计算机环境中有一些非常具体的业务设置可能会产生问题。正如其他人提到的,上述所有解决方案可能适用于安装了任何版本的 Office 2010 的任何全新格式化的 Windows 7 安装,即使在双显示器设置中也是如此。所以对所有这些答案+1。另外,我注意到问题只发生在某些特定的工作簿中。非常奇怪的行为,这可能只是与我在工作簿中执行的操作(无论是 VBA 还是简单的 Excel)相关的 Office 2010 错误。
话虽这么说,我真正的解决方案(这并不是最初问题的真正解决方案)不是使用MsgBox(). 确实存在一些解决方法,我发现表单是最适合我的解决方法。因此,我没有在这个问题上浪费更多时间,而是用下面非常简单的代码来替换我原来的代码MsgBox():
Application.ScreenUpdating = False
frmMsgBox.Show
Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)
我可以将任何我想要的文本放入 的标签中frmMsgBox,并且由于这是 Excel,因此我可以通过使用隐藏单元格来简单地传递参数。
感谢您的所有帮助。