Vba WScript.Shell.run在多线程上运行

Vba WScript.Shell.run在多线程上运行,vba,excel,Vba,Excel,我想知道是否有办法在excel以外的其他线程上运行shell窗口 这个想法是在我启动shell时不要冻结excel 例如: Dim objShell Set objShell = WScript.CreateObject ("WScript.shell") objShell.run "cmd /K CD C:\ & Dir" Set objShell = Nothing 感谢您的帮助答案是否定的,您无法在Excel中创建多线程应用程序 但是,您可以使用Application.Scree

我想知道是否有办法在excel以外的其他线程上运行shell窗口

这个想法是在我启动shell时不要冻结excel

例如:

Dim objShell
Set objShell = WScript.CreateObject ("WScript.shell")
objShell.run "cmd /K CD C:\ & Dir"
Set objShell = Nothing

感谢您的帮助

答案是否定的,您无法在Excel中创建多线程应用程序

但是,您可以使用
Application.ScreenUpdate=False
锁定当前Excel工作簿

确保在代码末尾重新启用它,如so
Application.ScreenUpdating=True


希望有帮助

答案是否定的,您不能在Excel中创建多线程应用程序

但是,您可以使用
Application.ScreenUpdate=False
锁定当前Excel工作簿

确保在代码末尾重新启用它,如so
Application.ScreenUpdating=True


希望有帮助

我同意也不同意普拉克提克的观点。我同意,因为您无法在Excel中创建真正的多线程应用程序。我不同意,因为你可以使用某种技巧来执行另一个脚本。
假设您有一个名为“script.vbs”的vbs脚本。然后,您可以编写如下代码
taskId=Shell(“wscript Script.vbs parms”)
。脚本将独立于VBA程序运行。但这可能不是你想要的。

我同意也不同意普拉克提克的观点。我同意,因为您无法在Excel中创建真正的多线程应用程序。我不同意,因为你可以使用某种技巧来执行另一个脚本。
假设您有一个名为“script.vbs”的vbs脚本。然后,您可以编写如下代码
taskId=Shell(“wscript Script.vbs parms”)
。脚本将独立于VBA程序运行。但这可能不是你想要的。

嗨,这不需要运行脚本。该命令只允许不刷新excel.Hi中的显示,这不涉及运行脚本。该命令仅允许不刷新excel.Hi中的显示。你是说从vba脚本启动shell?我们已经可以这样做了(比如我原来的帖子)。但是,当您启动命令“objShell.run”cmd/K CD C:\&Dir“时,我认为您必须等到最后才能获得excel的控制权。是的,可以从vba脚本启动shell,但不能通过objShell.run启动。因为正如你所说,你必须等待。如果您像我建议的那样使用Shell,您几乎可以立即恢复控制权,并且不必等待Script.vbs完成。抱歉,刚刚测试了您的方法,它也可以正常工作。您几乎会立即获得控制权。您的意思是您尝试启动一个shell(例如,它将启动一个繁重的脚本)并立即返回excel?是的,例如,我执行了objShell.run“cmd/K CD C:\&Dir”,并立即返回excel。我还关闭了excel并继续显示所有文件。你是说从vba脚本启动shell?我们已经可以这样做了(比如我原来的帖子)。但是,当您启动命令“objShell.run”cmd/K CD C:\&Dir“时,我认为您必须等到最后才能获得excel的控制权。是的,可以从vba脚本启动shell,但不能通过objShell.run启动。因为正如你所说,你必须等待。如果您像我建议的那样使用Shell,您几乎可以立即恢复控制权,并且不必等待Script.vbs完成。抱歉,刚刚测试了您的方法,它也可以正常工作。您几乎会立即获得控制权。您的意思是您尝试启动一个shell(例如,它将启动一个繁重的脚本)并立即返回excel?是的,例如,我执行了objShell.run“cmd/K CD C:\&Dir”,并立即返回excel。我还关闭了excel,继续显示所有文件。