为什么在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)来查看是否有帮助。