代码之家  ›  专栏  ›  技术社区  ›  QHarr

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

  •  2
  • QHarr  · 技术社区  · 6 年前

    情况:

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

    1. 如果我右键单击 .vbs 文件,然后选择 Run VBScript ,它工作得很好。

    Right click and run VBScript

    1. 如果我从命令行在正确的位置(即桌面)执行以下操作,则不会显示MsgBox,尽管所有操作看起来都运行正常。

      Test.vbs
      

    我所尝试的:

    我看过很多文章,其中一些是我列出的参考文献。特别是,我通过自己的方式解决了这个问题 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) 我尝试在命令行字符串中添加暂停和等待时间,但没有成功。

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

    问题:

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

    VBSCript(测试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 
    

    测验bas公司

    Public Sub MessageMe
       Msgbox "Hello"
    End Sub
    

    备注:

    所有文件都位于桌面文件夹中。

    参考文献:

    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 回复  |  直到 6 年前
        1
  •  5
  •   William Walseth    6 年前

    在主VBS中,MessageMe中的代码不会运行。您需要包含调用MessageMe Sub的代码。

    此外,在cscript中,大多数人使用MsgBox来代替MsgBox,但显然(对我来说)MsgBox也会弹出。。。

    WScript.Echo "From Main"
    
    Call MessageMe
    
    Public Sub MessageMe
        ' WScript.Echo "Hello"
        MsgBox "Hello"
    End Sub