2016-11-29 3 views
0

excel以外のスレッドでシェルウィンドウを実行する方法があるかどうかを知りたいですか?マルチスレッドのWScript.Shell.run

アイデアは、シェルを起動するときに凍結しないことです。例えば

:あなたの助けを

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

おかげ

答えて

1

私はPraktikに同意し、同意しません。 Excelで実際のマルチスレッドアプリケーションを作成できないため、私は同意します。私はあなたが別のスクリプトを実行するためのトリックを使用することができるので、同意しない。 "Script.vbs"という名前のvbsスクリプトがあるとします。次に、taskId = Shell("wscript Script.vbs parms")のようにsthをコードすることができます。スクリプトはあなたのVBAプログラムから独立して実行されます。しかし、それはあなたが望むものではないかもしれません。

+0

こんにちは。あなたはvbaスクリプトからシェルを起動することを意味しますか?私たちはすでにそれを行うことができます(例えば私の元の投稿)。しかし、コマンド "objShell.run"を起動すると、cmd/K CD C:\&Dir ""私はExcelのコントロールを取り戻すために最後を待たなければならないと思います。 – Coolpix

+0

はい、vbaスクリプトからシェルを起動しますが、objShell.runでは起動しません。あなたが言ったように、それで待たなければならないからです。あなたがシェルを使用する場合は、私はあなたが戻ってコントロールをほぼ永遠に取得し、Script.vbsが終了するのを待つ必要はないと示唆しました。 – Storax

+0

申し訳ありませんが、あなたのアプローチをテストしただけで動作します。あなたはほとんどすぐにコントロールを取り戻すでしょう。 – Storax

1

答えはNOだろう、あなたはExcelで、マルチスレッドアプリケーションを作成することはできません。

ただし、Application.ScreenUpdating = Falseを使用すると、現在のExcelブックをロックできます。

あなたが役立ちますのでApplication.ScreenUpdating = True

希望のようなコードの末尾に戻ってそれを有効にすることを確認してください!

+0

こんにちは、これはスクリプトの実行には関係しません。このコマンドでは、Excelでディスプレイをリフレッシュしないようにすることしかできません。 – Coolpix