命令行执行VBScript文件以执行VBA宏无法生成msgbox

时间:2018-05-07 13:04:14

标签: excel-vba vbscript vba excel

情况:

我正在尝试从Windows命令行运行VBScript。该脚本打开excel,导入.bas文件并在其中运行宏。然后宏应显示VBA MsgBox。

  1. 如果我右键点击桌面上的.vbs文件,然后选择Run VBScript,则效果非常好。
  2. Right click and run VBScript

    1. 如果我从命令行执行以下操作,在正确的位置(即桌面),虽然看起来一切都没有错误,但没有显示MsgBox。

      Test.vbs
      
    2. 我尝试了什么:

      我看了很多文章,其中一些我列为参考文献。特别是,我通过这个answer工作。我已经尝试过这样的事情:

      CScript Test.vbs
      WScript Test.vbs
      CScript //logo Test.vbs
      WScript //nologo Test.vbs
      

      继续阅读该答案之后,我确认Windows知道如何启动.vbs文件,这似乎是不言而喻的,因为我可以右键单击并运行。

      所以:

      1)运行assoc .vbs给了我预期的结果:

      :\Windows\System32>assoc .vbs
      .vbs=VBSFile
      

      2)运行ftype VBSFile给出了预期的结果:

      VBSFile="%SystemRoot%\System32\WScript.exe" "%1" %*
      

      3)我尝试将Pause和等待时间添加到命令行字符串无效。

      4)我添加了各种标志,包括调试,例如CScript //X,没有区别。

      问题:

      如何从命令行运行我的VBScript并显示msgbox?

      VBSCript(Test.vbs)

      Option Explicit
      
      Sub ExcelMacroExample() 
        Dim xlApp 
        Dim xlBook 
        Set xlApp = CreateObject("Excel.Application") 
        Set xlBook = xlApp.Workbooks.Open("C:\Users\User\Desktop\Test.xlsb", 0, True) 
        xlApp.VBE.ActiveVBProject.VBComponents.Import "C:\Users\User\Desktop\Test.bas"
        xlApp.DisplayAlerts = False
        xlApp.Run "MessageMe"
        xlApp.Wait Now + TimeSerial(0,0,2)
        'xlApp.Quit 
        xlApp.DisplayAlerts = True
       ' Set xlBook = Nothing 
       ' Set xlApp = Nothing 
      End Sub 
      

      Test.bas

      Public Sub MessageMe
         Msgbox "Hello"
      End Sub
      

      备注:

      所有文件都驻留在Desktop文件夹中。

      参考文献:

      1. Running Scripts from the Command Line
      2. VBS file doesn't run through cmd prompt
      3. Running Scripts from the Command Prompt
      4. How to run VBScript from command line without Cscript/Wscript

1 个答案:

答案 0 :(得分:4)

在您的主VBS中,您的MessageMe中的代码将无法运行。您需要包含代码才能调用MessageMe Sub。

另外,在cscript中,大多数人使用而不是MsgBox,但显然(对我而言)MsgBox也会弹出......

WScript.Echo "From Main"

Call MessageMe

Public Sub MessageMe
    ' WScript.Echo "Hello"
    MsgBox "Hello"
End Sub