【发布时间】:2018-05-07 13:04:13
【问题描述】:
情况:
我正在尝试从 Windows 命令行运行 VBScript。该脚本打开 excel,导入 .bas 文件并在其中运行宏。然后该宏应显示一个 VBA MsgBox。
- 如果我右键单击桌面上的
.vbs文件,然后选择Run VBScript,它就可以完美运行。
-
如果我从命令行在正确的位置(即桌面)执行以下操作,则不会显示任何 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
注意事项:
所有文件都位于桌面文件夹中。
参考资料:
【问题讨论】:
-
如何在脚本中调用
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 谢谢。