如何将文件传递给可执行文件,拖动n-drop允许的方式?

考虑我有以下几点:

  • 一个Excel工作簿,它通过一个macros生成一个.txt文件。
  • 一个可执行文件( .exe ),它可以parsing这个.txt文件。

我的目标是编程以下algorithm:

  • 让用户在工作表中input他的数据。
  • 根据用户input的内容准备.txt文件。
  • 将新创build的.txt文件传递给外部程序( .exe )。

现在,前两步完美工作,我可以生成正确的.txt文件。 当我需要将它传递给外部可执行文件时,问题就出现了。 以下是试用和观察的内容:

  • 调用Shell()"C:\path\to\program.exe" "C:\path\to\file.txt" (编辑: 作为单个string ); 足够简单,但这不起作用:外部.exe不喜欢被给予一个path。 我也尝试直接input命令进入Windows的Execute实用程序:相同。 这似乎是给程序path.txt是不够的。

  • .txt文件拖到程序的.exe工程中! 外部可执行文件正常工作。 在这里,就好像我已经将“文件”传递给了程序,而不仅仅是它的path 。 作为一个UNIX用户,这听起来对我来说是相当无意义的(没有stream或pipe道的概念),所以也许我在这里错过了一些东西…

现在,这是我的问题。 将文件拖放到可执行文件时,Windows如何“翻译”它? 显然,它不会将其转换为“将文件path作为程序的第一个parameter passing” 。 如何将.txt文件传递给可执行程序,而不用像第一次使用Shell()那样传递它的path?

其他一些说明:

  • 我在Windows 7上使用Microsoft Office Excel 2010。 我已经死了,谢谢你的关心。
  • 这个外部的.exe我说的无法修改和重新编译(这将是可怕的),这是棘手的事情。 无论发生什么事情,我都必须照原样使用它。
  • 使用Shell()不是一个问题,如果你给我正确的命令/修复。 我也尝试调用VBA.CreateObject("WScript.Shell")上的Run ,结果相同。

现在,这是我的问题。 将文件拖放到可执行文件时,Windows如何“翻译”它? 显然,它不会将其转换为“将文件path作为程序的第一个parameter passing”。

它确实如此。 创build一个batch file:

 @echo off echo You passed parameter: %1 pause 

保存为test.bat

在文件浏览器中浏览到它,并拖放一些东西到它上面:

批处理文件的输出示例

先前的评论:

看起来你必须发送path和文件名作为一个参数,例如:

 Shell("C:\path\to\program.exe C:\path\to\file.txt") 

或者如果path中有空格,也许:

 Shell("""C:\path\to\program.exe"" ""C:\path\to\file.txt""") 

http://social.msdn.microsoft.com/Forums/en-US/a3a3d1a7-5c9a-4c91-ab96-41d367eac2fb/using-shell-function-in-vba-how-do-i-pass-a-parameter?论坛= accessdev