为什么在Excel VBA中调用的exe文件不能输出文件?

所以我有一个启用macros的Excel / VBA工作簿,其中包含一个写入.txt文件的button,然后在同一个目录中调用一个.exe文件。 .exe是用C ++编写的, 应该输出另一个文件。

我遇到的问题是,由于某些原因,当Excel工作簿调用C ++ .exe时,可执行文件处理.txt中的信息就好了,但是输出文件不会显示出来。 但是,如果我有工作簿,只需制作.txt文件,然后自己执行C ++程序,则程序将正确输出文件。

从Excel / VBA工作簿调用.exe似乎导致.exe不输出文件。

这是Excel / VBA代码

Open (ActiveWorkbook.Path & "\excel.txt") For Output As #1 Print #1, MyString Close #1 ActiveWorkbook.FollowHyperlink (ActiveWorkbook.Path & "\MyProgram.exe"), NewWindow:=True 

而C ++被分割成多个文件,但是可能导致问题的关键部分在下面

 ofstream OutputFile; int Sequence[12]; ... ... OutputFile.open("Output.solution"); for (int i=1;i<12;i++) OutputFile << Int_to_String(Sequence[i]) << " "; OutputFile.close(); 

那么如何从Excel VBA中调用C ++可执行文件输出“Output.solution”文件呢? 只是要清楚 – 如果我单独运行C ++程序,它输出文件。

编辑:单独执行.exe时,将正确的信息放入同一目录下的“Output.solution”文件中,但是从Excel / VBA调用时,.exe将一个空的 “Output.solution”放入My文档文件夹。

从Excel / VBA调用时,如何使该文件出现在原始目录中? 我怎样才能确保它将实际上填充文件的信息,就像它在Excel外调用时一样?

确定你目前的目录是你认为的吗?

这可能是它的工作簿path以外的地方,在这种情况下输出文件将被创build在那里,而不是你所期望的。

最简单的方法来检查这是执行C ++程序没有path:

 ActiveWorkbook.FollowHyperlink ("MyProgram.exe"), NewWindow:=True 

看看它是否抱怨找不到可执行文件。

另一种方法是对输出文件使用已知的位置(临时):

 OutputFile.open("c:\\knowndir\\Output.solution"); 

并检查它是否被创build。 如果是这样,那么你的可执行文件没有问题,你只是在一个不同于你的想法的目录。

此外,search您的整个磁盘的Output.solution文件。 如果你在一个不同的目录下这个文件将被创build。

如果事实certificate这是问题,最简单的解决scheme可能是在运行可执行文件之前更改目录。 VBA有一个chdir命令就是为了这个目的。 您可能需要根据您的需要将它更换回来,您可以使用curdir

最好的办法是使用像SysInternal的进程监视器这样的工具来查看文件是否正在写入,如果没有,为什么不。

我的猜测是,您可能正在将可执行文件运行在您希望运行的目录的不同目录中。 尝试输出到绝对位置(或先调用SetCurrentDirectory)来查看是否有帮助。