我需要从Excel中的宏调用外部程序。在搜索了一段时间之后,我决定使用内联参数调用该程序的wshShell对象是最好的方法。使用方法.run([command],[windowStyle],[waitOnReturn])作为shell.run("cmd /c " & strCommand, 0, True)
,其中0表示隐藏窗口,/ c表示一旦准备就关闭,我希望excel等待返回剧本。事实上,它确实等待执行,但在等待时,可以单击分配给其他宏的另一个按钮。令我惊讶的是,如果实际点击了这个按钮,excel会启动另一个宏,好像它没有执行原始宏。在我看来,这个等待时间被解释为“空闲时间”。当第二个宏完成时,它将恢复前一个宏的执行,就好像下一行要执行已经记录在某处。
我的第一个问题是,当VBA等待wshShell的返回时实际发生了什么?
为了解决这个问题,我考虑过切换到:
dim shell as wshShell
dim shExecute as wshExec
set shExecute = shell.exec(strCommand)
并在while循环中使用shExecute.status
属性,以便Excel可以主动执行某些操作,从而防止出错。但是以这种方式,我无法从隐藏的窗口执行,这对我正在做的事情来说是非常重要的。
我该如何解决这个问题?提供一些上下文,应用程序有几种形状,在菜单表中分配了宏。我试图使这些形状不可见,但由于某种原因,如果我在调试环境中逐行运行它们只会变得不可见,否则它将不会切换形状可见性。
感谢任何有关问题的帮助。 提前谢谢。