Eseguire il file VBScript dalle macro VBA di Excel

Ho bisogno di alcuni esempi di excel vba, where con il codice VBA (Excel Macro) potrei call un VBScript e get alcuni valori come il nome del file e le informazioni di directory dal vbscript e assegnarle alle variables nel codice VBA. Grazie in anticipo

Qualcosa come questo

VBA macro:

Sub Foo2Script Dim x As Long x=2 'Call VBscript here MsgBox scriptresult End Sub 

VBScript:

 Dim x, y ,Z x = x_from_macro y = x + 2 Z = X+Y scriptresult = y,Z 

Può essere fatto ma dovrei essere d'accordo con Tomalak ed altri che non è il modo migliore per andare. Tuttavia, dicendo che, VBScript può fare miracoli occasionalmente se lo usi come un tipo di fuoco e dimenticare il meccanismo. Può essere utilizzato in modo efficace per simulare il multi-threading in VBA in base alla quale è ansible suddividere il payload e farla uscire ai singoli VBScript per eseguire in modo indipendente. Ad esempio si potrebbe organizzare uno "swarm" di singoli VBScripts da scaricare in massa da siti web in background mentre VBA continua con altri codici.

Di seguito è riportto un codice VBA che ho semplificato per mostrare cosa può essere fatto e scrive un semplice VBScript al volo. Normalmente preferisco eseguirlo usando 'wshShell.Run """" & SFilename & """" che significa che posso dimenticarlo ma ho incluso in questo esempio questo metodo Set proc = wshShell.exec(strexec) che consente un test dell'object per il completamento

Inserisci questo in MODULE1

 Option Explicit Public path As String Sub writeVBScript() Dim s As String, SFilename As String Dim intFileNum As Integer, wshShell As Object, proc As Object Dim test1 As String Dim test2 As String test1 = "VBScriptMsg - Test1 is this variable" test2 = "VBScriptMsg - Test2 is that variable" 'write VBScript (Writes to Excel Sheet1!A1 & Calls Function Module1.ReturnVBScript) s = s & "Set objExcel = GetObject( , ""Excel.Application"") " & vbCrLf s = s & "Set objWorkbook = objExcel.Workbooks(""" & ThisWorkbook.Name & """)" & vbCrLf s = s & "Set oShell = CreateObject(""WScript.Shell"")" & vbCrLf s = s & "Msgbox (""" & test1 & """)" & vbCrLf s = s & "Msgbox (""" & test2 & """)" & vbCrLf s = s & "Set oFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf s = s & "oShell.CurrentDirectory = oFSO.GetParentFolderName(Wscript.ScriptFullName)" & vbCrLf s = s & "objWorkbook.sheets(""Sheet1"").Range(""" & "A1" & """) = oShell.CurrentDirectory" & vbCrLf s = s & "Set objWMI = objWorkbook.Application.Run(""Module1.ReturnVBScript"", """" & oShell.CurrentDirectory & """") " & vbCrLf s = s & "msgbox(""VBScriptMsg - "" & oShell.CurrentDirectory)" & vbCrLf Debug.Print s ' Write VBScript file to disk SFilename = ActiveWorkbook.path & "\TestVBScript.vbs" intFileNum = FreeFile Open SFilename For Output As intFileNum Print #intFileNum, s Close intFileNum DoEvents ' Run VBScript file Set wshShell = CreateObject("Wscript.Shell") Set proc = wshShell.exec("cscript " & SFilename & "") ' run VBScript 'could also send some variable 'Set proc = wsh.Exec("cscript VBScript.vbs var1 var2") 'run VBScript passing variables 'Wait for script to end Do While proc.Status = 0 DoEvents Loop MsgBox ("This is in Excel: " & Sheet1.Range("A1")) MsgBox ("This passed from VBScript: " & path) 'wshShell.Run """" & SFilename & """" Kill ActiveWorkbook.path & "\TestVBScript.vbs" End Sub Public Function ReturnVBScript(strText As String) path = strText End Function 

Ciò ha dimostrato diversi modi in cui le variables possono essere passate in giro.