2013-08-22 2 views
2

У меня есть один скрипт vb и страница excel с кнопкой команды.Передача аргумента от vba до vbs

VB Script --- test.vbs

MsgBox("Hello world") 

первенствовать УВА

Private Sub CommandButton1_Click() 
    Dim SFilename As String 
    SFilename = "C:\Users\mkamaraj\Desktop\test.vbs" 'Change the file path 

    ' Run VBScript file 
    Set wshShell = CreateObject("Wscript.Shell") 
    wshShell.Run """" & SFilename & """" 
End Sub 

При нажатии на кнопку в Excel он выполняет VBScript и отображается MessageBox. Теперь мне нужно передать TextBoxзначение от Excel VBA до VBScript, и это значение должно быть отображено с этим VBScriptMessagBox.

Как я могу это сделать?

+1

mehow, спасибо за ваш полезный редактировать – Pinky

ответ

2

Вы можете отправить параметры в VBScript. Посмотрите на ссылку ниже:

Can I pass an argument to a VBScript (vbs file launched with cscript)?

VBScript:

MsgBox("Hello " & WScript.Arguments(0)) 

VBA:

Private Sub CommandButton1_Click() 
    Dim SFilename As String 
    SFilename = "C:\Users\mkamaraj\Desktop\test.vbs " & """Something Else""" 'Change the file path 

    ' Run VBScript file 
    Set wshShell = CreateObject("Wscript.Shell") 
    wshShell.Run """" & SFilename & """" 
End Sub 
+0

Привет Марк Wylde, я попробовал ваш код , Он показывает ошибку, как «Прогон метода объекта IWshShell3 сбой». – Pinky

+0

Я отредактировал свой оригинальный ответ, чтобы включить двойные кавычки между Something Else. Попробуйте еще раз :) – Mark

+0

Марк, параметр должен быть добавлен с помощью метода Run. Я пробовал код вроде wshShell.Run "" "" & SFilename & "" "" и "SomethingElse". Теперь он отображает MessageBox с помощью Hello SomethingElse. Спасибо за помощь. – Pinky

0

Простой тестовый скрипт, чтобы иметь дело с безымянными аргументами (showparms.vbs):

Option Explicit 

Function qq(s) 
    qq = """" & s & """" 
End Function 

Function Coll2Arr(oColl, nUB) 
    ReDim aTmp(nUB) 
    Dim i : i = 0 
    Dim e 
    For Each e In oColl 
     aTmp(i) = e 
     i  = i + 1 
    Next 
    Coll2Arr = aTmp 
End Function 

Dim oWAU : Set oWAU = WScript.Arguments.Unnamed 
Dim aWAU : aWAU  = Coll2Arr(oWAU, oWAU.Count - 1) 
Dim sArgs : sArgs = "no arguments given" 
If -1 < UBound(aWAU) Then 
    sArgs = qq(Join(aWAU, """ """)) 
End If 
MsgBox sArgs ' WScript.Echo sArgs 

Простой VBA суб вызвать .vbs с неназванными аргументами (содержащие пробелы):

Option Explicit 

Sub callVBS() 
    Dim sFSpec As String: sFSpec = "p:\ath\to\showparms.vbs" 
    Dim sParms As String: sParms = "one ""t w o"" three" 
    Dim sCmd As String: sCmd = """" & sFSpec & """ " & sParms 
    Dim oWSH: Set oWSH = CreateObject("WScript.Shell") 
    oWSH.Run sCmd 
End Sub