ho trascorso gran parte della giornata alla ricerca di una soluzione a questo, sto iniziando a pensare che la sua forse non è possibile per le mie esigenzereale tempo di uscita della console da WScript.Shell Exec
La mia configurazione di base è quello di eseguire un vbscript (.vbs) chiamato da un codice vba excel. Il codice VBA deve continuare e lasciare il vbscript in esecuzione, ma controllerà di tanto in tanto con Exec.Status
Nel vbscript sto usando WScript.StdOut.WriteLine "whatever"
per rintracciare/debug è progresso, ma così com'è posso solo leggere viene emesso dopo che il codice vba excel è terminato, cosa deve fare.
Quello che voglio è quello di vedere una vera e propria uscita di tempo per la console dal VBScript
Ecco il codice VBA ...
Dim WSH As IWshRuntimeLibrary.WshShell 'Windows Script Host Object Model
Dim Exec As WshExec
Set WSH = CreateObject("WScript.Shell")
Set Exec = WSH.Exec("%COMSPEC% /C CSCRIPT.EXE //nologo " _
& VbsFileDir _
& " " & Arg1 _
& " " & Arg2 _
& " " & Arg3 _
& " " & Arg4)
sono stato in grado di ottenere una produzione in tempo reale convertendo WSH.Exec
-WSH.Run
, ma ho bisogno l'accesso ai Exec.Status
, che non è disponibile in WSH.Run
AGGIORNAMENTO - 2015-02-06
per chiarire ulteriormente ... Utilizzando l'esempio' ... B.vbs' codice fornito da @ di Ekkehard.Horner risposta ... Il seguente codice di Excel VBA visualizzare un'uscita in tempo reale alla console ...
WSH.Run("cscript C:\28353522-B.vbs")
... ma quanto segue non visualizzerà nulla alla console
WSH.Exec("cscript C:\28353522-B.vbs")
non posso usare il .Run()
perché io uso il .Status
bandiera da .Exec()
Inoltre, non posso spostare il vbscript nel codice VBA perché VBA continua a svolgere altre attività in parallelo con vbscript.
P.s Se qualcuno può presentare una risposta che spieghi perché non può essere eseguita, la contrassegnerò come accettata.
I darò un suggerimento al tuo suggerimento stamattina e ti farò sapere Solo per assicurarmi di aver capito bene ... Il mio excel vba code eseguirà Exec the middle-man (A.vbs) che eseguirà il mio vbscript principale (B.vbs) ed Echo output. Ma, domanda ... Se il mio codice excel vba chiama l'A.vbs con lo stesso metodo con cui chiama già il B.vbs, allora perché l'A. vbs avrà una fortuna migliore? E non ho fatto niente di speciale per il .Run(), ho appena sostituito .Exec() e ha funzionato. – Skytunnel
@Skytunnel - no, A è un falso per il tuo codice VBA. –
Quindi ho bisogno di replicare il codice A riscritto come codice VBA? Il problema con questo è il mio codice VBA ha altro lavoro da fare, non posso averlo seduto a guardare il B.vbs. Ho cercato di spiegarlo sulla domanda. – Skytunnel