从批处理调用 VBS 时出现运行时错误

Runtime Error when Calling VBS from Batch

批号(选项 1)

我通常使用它来简单地从批处理中调用 vbs,不包括变量。

@echo off
myVBSpath=\UNC\path
set vbsFileName=myVBS.vbs
cscript "%myVBSpath%\%vbsFileName%"
pause

批号(选项 2)

我通常在将变量从批处理传递到 VBS 时使用此选项...包括 vbs 文件路径和名称后的变量名称和值。

@echo off
set myVBSpath=\UNC\path
set vbsFileName=myVBS.vbs
cscript //NoLogo "%myVBSpath%\%vbsFileName%" /attachment: "%myAttachment%"
pause

生成的批处理错误消息

无论我在上面使用哪个选项,我都会收到以下错误消息:

\UNC\path\myVBS.vbs(11, 1) Microsoft VBScript runtime error: Argument not optional

VBS代码

Dim xlApp 
Dim xlBook 
'Dim attachmentFullName
'attachmentFullName = WScript.Arguments.Named("attachment")

Set xlApp = CreateObject("Excel.Application") 
Set xlBook = xlApp.Workbooks.Open("\UNCpath\myExcelFile.xlsm", 0, True) 

xlApp.DisplayAlerts = False
xlApp.Run "myMacro" ', Cstr(attachmentFullName)
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

疑难解答

要求将变量传递给vbs,所以批处理代码(选项1)应该是可行的方法,我就是这样开始的。当我收到上面的运行时错误消息时,我尝试使用选项 2 传递一个假变量,只是为了查看它是否提供了 cscript 命令正在寻找的额外参数。不幸的是,选项 2 给出了相同的错误信息。

这是一个相当直接的批处理脚本,所以我真的不知所措,觉得我可能只是盯着它看了太久,让它变得比需要的更难,而且我只是缺少一些简单的东西。

你们中的任何人都可以给我一个新的视角并告诉我是什么导致了我的运行时错误吗?

谢谢!

我的解决方案可能是一次性的 - 但这里是针对那些在批处理脚本中注意到此错误的人的故障排除步骤的快速摘要:

  1. 检查 cscript 行以确保没有参数被意外传递(或未传递)。
  2. 检查 VBS 以确保代码不再请求参数变量(或者在通过时接受参数变量)——感谢@Hackoo
  3. 检查 VBA 以确保 Sub 没有请求变量——谢谢@DavyC!