2016-04-26 12 views
0

Ich bin ziemlich neu in VBScript so würde gerne mein Verständnis mit erfahreneren Benutzern überprüfen :)VBScript scheint zu warten, bis Excel Macro fertig ist?

Ich habe ein grundlegendes Skript geschrieben, um ein Excel-Makro auszuführen. Das Makro heißt MainFlow und dann erscheint ein Meldungsfeld nach dem Fertigstellen. Der Code ist unten.

Jetzt zu meiner Überraschung scheint VBScript darauf zu warten, dass das Makro MainFlow vollständig ausgeführt wird, bevor dann zur nächsten Anweisung übergegangen wird, in diesem Fall ein Meldungsfeld mit der Aussage "Fertig". Das hat mich wirklich überrascht, weil ich aus meiner Erfahrung erwartet hätte, dass VBScript sofort zur nächsten Anweisung übergehen würde. Da dies ein Teil eines größeren Batch-Prozesses sein wird, wollte ich mein Verständnis überprüfen, bevor ich weitermachte. Ich weiß, dass ich mehrere VBScripts aus einem Master-Skript ausführen muss. Daher muss ich den boolean waitonreturn verwenden, um sicherzustellen, dass jedes Skript beendet ist, bevor das nächste gestartet wird. Das hat mich überrascht, dass das Makro auf das Ende wartet das Skript selbst.

Wenn jemand mein Verständnis bestätigen könnte (und sogar erklären warum), würde das wirklich geschätzt werden.

Antwort

0

VBScript wartet, bis der Excel-VBA-Code die Ausführung abgeschlossen hat, bevor er fortfährt.

+0

Danke Mike. Würdest du erklären können warum? Wie ohne Wartezeit, VBScript wartet nicht auf andere Vbscripts, um die Ausführung zu beenden, daher bin ich ein wenig verwirrt, warum es für Excel VBA-Code intrinsisch tut. – Andy

+0

So werden die Ausführungsmechanismen von Microsoft implementiert. VBScript und VBA sind ebenfalls unterschiedlich und werden unterschiedlich ausgeführt. VBA ist über COM, während VBScript den Anwendungsausführungsmechanismus des Betriebssystems (über WScript oder CScript) durchläuft. – MikeC

0

Würde diese Methode funktionieren? (Hier setzt in für die Formatierung)

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 ist nicht Multitasking, so dass ich sehe nicht, warum es vor dem Abschluss MainFlow zurück zu Ihrem ursprünglichen Code kommen würde.

Manchmal macht es ein DoEvents (in MainFlow) es sieht aus wie VBA macht zwei Aufgaben gleichzeitig, aber es ist nicht. (in einigen Fällen wird es sogar den Prozess verlangsamen, oder es schneller machen, je nach dem Problem)

Wenn Sie nicht möchten, Excel "Einfrieren", machen Sie einen Fortschrittsbalken, so dass der Benutzer Excel nicht denkt abgestürzt und möchte abbrechen ...

ohne MainFlow code, ich kann nicht mehr sagen.

0

Gerade die Readonly-Parameter auf false in der Open-Funktion Einstellung hat bereits den Trick für mich

z.B.

Set objExcelBook = objExcel.Workbooks.Open(xlsFile, false) 
Verwandte Themen