Excel 启动时认为我的参数字符串是文件名

Excel 启动时认为我的参数字符串是文件名

我刚刚编写完我的第一个 VBA 程序,该程序通过以下指令调用:

start excel "S:\stat\global\workgroup\BCDM\VBA\central_SDLC_doc_setup.xlsm" /e %1

该指令是一个cmd脚本文件,其中 %1 的值如下:

"verbose=False|requester=S:\stat\global\macros\validation\wendy\v1.00\01_sdlc_docs|macro_name=wendy|macro_version=v1.00|macro_owner=rbaumann|macro_effective_start_date=2021-10-29"

我已经按照看似标准的方式设置了参数接口函数:

Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As LongLong
Declare PtrSafe Function lstrlenW Lib "kernel32" (ByVal lpString As LongLong) As LongLong
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As LongLong)

Function CmdToSTr(Cmd As LongLong) As String etc. etc.

该程序似乎运行完美,直到最后出现以下错误消息:

Sorry, we couldn’t find verbose=FaIse|requester=S:/stat/gIobal/macros/vaIidation/wendy/v1.00/01 _sdIc_docs|macro_name=wendy|macro_version=v1.001|macro_owner=rbaumann|macro_efective_start_date=2021-10-29.  Is it possible it was moved, renamed or deleted?

也就是说,它将我的参数字符串解释为文件名。我翻遍了所有的 VBA 代码,试图找到该消息的可能依据,但一无所获。在程序中的最后一条 VBA 指令之后,我添加了一条 MsgBox “I am done” 指令,该指令按预期在我下次调用程序时弹出,然后仍然出现上述错误消息。

我最终意识到问题不在于我的 VBA 程序代码,而在于某种约定,即任何时候使用参数字符串调用 Excel 时,它总是将参数字符串视为文件的名称并尝试打开它。

确实如此吗?如果是这样,我该如何覆盖这种行为,以便在我的 VBA 代码完成执行后不再发生任何事情?

谢谢。

答案1

由于我不完全理解的原因,问题不再发生。我的 VBA 代码现在从头到尾运行,之后 Excel 没有发送任何消息,说明能够找到它已视为文件名的参数字符串。我比较了 Excel 工作簿的几个连续版本和其中的 VBA 代码,但无法识别任何可以解释为什么上述错误消息不再在每次执行程序结束时弹出的内容。再次感谢 @david 和 harrymc 提供有关问题可能原因的早期想法。

相关内容