【问题标题】:Command line execution of VBScript file to execute VBA macro failing to produce msgbox命令行执行 VBScript 文件以执行 VBA 宏无法生成 msgbox
【发布时间】:2018-05-07 13:04:13
【问题描述】:

情况:

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

  1. 如果我右键单击桌面上的.vbs 文件,然后选择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 (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

注意事项:

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

参考资料:

  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

【问题讨论】:

  • 如何在脚本中调用Sub ExcelMacroExample(),好像不是完整代码?尝试将行 MsgBox WScript.Path 添加到脚本中,以检查位数并确保它不会影响执行。
  • @omegastripes 原谅我在这个领域的无知。恐怕就是整个剧本!我应该将 MsgBox WScript.Path 放入 VBScript 中吗?似乎错了。所以猜我误会了。 Test.bas 中的 MsgBox WScript.Path 没有区别。
  • 我只想命令行执行 Test.vbs > 打开 Excel > 导入 Test.bas > 运行现在已导入的“MessageMe”宏 > 生成一个 msgbox。
  • 我只是说不清楚Sub ExcelMacroExample() 是如何启动的。代码中没有 ExcelMacroExample 调用。是的,将MsgBox WScript.Path放入脚本中,通过命令行运行VBS文件并右键单击时检查路径是否相同。
  • 哈...它与调用的行一起工作,添加为简单的 ExcelMacroExample 在顶部。我多么愚蠢:-( @omegastripes 谢谢。

标签: excel vbscript vba


【解决方案1】:

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

此外,在 cscript 中,大多数人使用而不是 MsgBox,但显然(对我来说是新的)MsgBox 也会弹出......

WScript.Echo "From Main"

Call MessageMe

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

【讨论】:

  • 也许我理解错了,如果是这样我道歉,但我可以右键单击并运行,我会显示 vba msgbox。这行 xlApp.Run "MessageMe" 应该在导入宏后运行宏带有 xlApp.VBE.ActiveVBProject.VBComponents.Import "C:\Users\User\Desktop\Test.bas" 的 excel 项目
  • 如果我执行 WScript.Echo 我没有使用 excel 宏来生成消息框;这是我的意图。
  • 对不起,我更正了我的帖子,MsgBox 确实适用于 CScript(对我来说是新闻)。我认为您只需要从命令行运行的第一个 VBS 脚本调用您的 ExcelMacroExample 代码。
  • 我试过了。我应该补充我的问题。对不起。结果相同。
  • 不知道是不是权限问题?专门创建 Excel 对象。您可以将 CreateObject 调用包装在 try catch 中或单步执行以查看发生了什么。
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 2021-02-01
  • 2021-03-25
  • 2011-07-24
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多