2

我需要访问 Excel VBA 宏中的命令行参数,并发现了许多变体,但只有一个与 Excel-2010 一起使用,似乎 API 随着时间的推移而发生了变化。我尝试了我在“外面”找到的这段代码:

  Dim pCmdLine As Long     ' Pointer to the Comand-line string
  Dim strCmdLine As String ' Command line string
  Dim CmdLine As String    ' Command line string

  ' Get the pointer to the command line string
   pCmdLine = GetCommandLineA

   ' Fill the string with zeros
   '    (300 characters for command line seems to be enough)
   strCmdLine = String$(300, vbNullChar)

   ' Copy from the pointer to VBA-style string
   lstrcpynA strCmdLine, pCmdLine, Len(strCmdLine)

   ' At this point we got the string,
   '     now skip the rest of it filled with 0 characters.
   CmdLine = Left(strCmdLine, InStr(1, strCmdLine, vbNullChar) - 1)

  MsgBox "Length of the command line = " & Len(CmdLine) '' Debug
  MsgBox "Command Line:: " & CmdLine '' Debug 

我将其放入电子表格的 Auto_open 宏中。如果我尝试这个电话:

start excel TestMacro.xlsm /e/abcd/xyz

它似乎通常有效并且宏观报告:

Command line = " C:/.../excel.exe TestMacro.xlsm"

所以我得到了调用部分,但是参数丢失了。

部分解决方案: 我发现如果我将调用更改为:

   start excel  /e/abcd/xyz TestMacro.xlsm

它可以工作,除了必须更改解析代码以忽略不在末尾的文件名,而且这种形式似乎不允许任何参数中的任何空格,即使引用。系统似乎将它们解释为目标 excel 文件的文件名并给出错误。例如:

start excel /e/abc/"my sheet"/ TestMacro.xlsm

给出错误:

file 'sheet"/.xlsx' not found

尽管在虚假启动错误之后,预期的工作表确实打开并让整条生产线都可以使用。

4

0 回答 0