visual programación programacion para lenguaje ejemplos comandos codigos codigo excel vbscript excel-vba

programación - Ejecutando archivo VBScript desde macros VBA de Excel



visual basic excel 2013 (1)

Necesito algunos ejemplos de Excel vba, donde con el código VBA (Macro de Excel) podría llamar a un VBScript y obtendré algunos valores como el nombre de archivo y la información del directorio de vbscript y los asignaré a las variables en código VBA. Gracias de antemano

Algo como esto

Macro VBA:

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


Se puede hacer, pero tendría que estar de acuerdo con Tomalak y otros en que no es la mejor manera de hacerlo. Sin embargo, dicho esto, VBScript puede hacer maravillas ocasionalmente si lo usa como una especie de mecanismo de disparo y olvido. Se puede usar con bastante eficacia para simular el multi-threading en VBA por lo que descompone la carga útil y la distribuye a VBScripts individuales para que se ejecuten de forma independiente. Por ejemplo, podría organizar un "enjambre" de VBScripts individuales para la descarga masiva de sitios web en segundo plano, mientras que VBA continúa con otro código.

A continuación se muestra un código de VBA que he simplificado para mostrar lo que se puede hacer y escribe un simple VBScript sobre la marcha. Normalmente prefiero ejecutarlo usando ''wshShell.Run """" & SFilename & """" que significa que puedo olvidarlo pero he incluido en este ejemplo este método Set proc = wshShell.exec(strexec) que permite una prueba del objeto para completar

Pon esto en 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

Esto demostró varias formas en que las variables pueden transmitirse.