2016-04-26 19 views
0

私はVBScriptをかなり使い慣れているので、経験豊富なユーザーとの理解を確認したいと思います。VBScriptは一見Excelマクロが終了するのを待っていますか?

Excelマクロを実行するための基本スクリプトを作成しました。マクロはMainFlowと呼ばれ、終了を意味するメッセージボックスが表示されます。コードは以下の通りです。

今私は驚いたことに、VBScriptはマクロMainFlowが完全に実行されるのを待ってから、次のステートメントに進みます。この場合は、完了したことを示すメッセージボックスが表示されます。これは私の経験から、VBScriptがすぐに次のステートメントに移行することを期待していたため、本当に驚いています。これがより広いバッチプロセスの一部となるため、私が前に移る前に私の理解を確認したかったのです。 1つのマスタースクリプトから複数のVBScriptを実行することがわかっているので、waitonreturnブール値を使用して、次のスクリプトが開始される前に各スクリプトが終了していることを確認する必要があります。スクリプトそのもの。

誰かが私の理解を確認でき(そして理由を説明することができれば)、本当に感謝します。

dim xlApp, xlBook 
Set xlApp = createobject("excel.application") 
xlApp.displayalerts = false 
Set xlbook = xlapp.workbooks.open("G:\Clients\Client\Reporting\Automated\Futures Expiry Warning\All Futures Expiry.xlsm") 
xlapp.run "MainFlow" 
msgbox("Finished") 
xlbook.save 
xlbook.close false 
Set xlbook = nothing 
xlapp.quit 
Set xlApp = nothing 

答えて

0

VBScriptは、Excel VBAコードの実行が完了するのを待ってから処理を進めます。

+0

ありがとうございます。理由を説明できますか? waitonreturnせずに、VBScriptは他のvbscriptの実行が完了するのを待たないので、なぜExcel VBAコードのintrinscallyなのかについては、私は少し勘案しています。 – Andy

+0

これは、Microsoftによって実行メカニズムが実装される方法です。 VBScriptとVBAも異なり、異なる方法で実行されます。 VBScriptは、OSのアプリケーション実行メカニズム(WScriptまたはCScriptを介して)を実行する間に、VBAはCOM経由です。 – MikeC

0

この方法は機能しますか?

fnShellExecuteVB 
function fnShellExecuteVB() 
     dim objShell 
    dim o 
     set objShell = CreateObject("shell.application") 
    objShell.ShellExecute "excel.exe", "C:\DUMMY\x.xlsx", "", "open", 1 

     set objShell = nothing 
    end function 
0

VBAがマルチタスクされていません(書式設定のために、ここで入れ)、それが主流量を完了する前に、あなたの最初のコードに戻ってくるだろう、なぜ私は表示されません。

(MainFlowの)は、VBAが一度に2つのタスクを実行しているように見えることがありますが、そうではありません。 (場合によっては、プロセスを遅くするか、問題に応じて速くする)

Excelがフリーズしたくない場合は、プログレスバーを作成して、Excelとは思えないようにしますクラッシュして中止したい...

seingなしでMainFlowコード、私はそれ以上は分かりません。ただ、すでに例えば私

のためのトリックをしたOpen関数でfalseに読み取り専用パラメータを設定

0

Set objExcelBook = objExcel.Workbooks.Open(xlsFile, false) 
関連する問題