c++ - 为什么在Excel VBA中调用exe不输出文件?

标签 c++ vba file-io excel

所以我有一个启用宏的 Excel/VBA 工作簿,它带有一个按钮,该按钮写入一个 .txt 文件,然后在同一目录中调用一个 .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"到我的文档文件夹中。

从 Excel/VBA 调用时,如何使该文件重新出现在原始目录中?以及如何确保它实际上会像在 excel 外部调用时那样用信息填充文件?

最佳答案

确定您当前的目录就是您认为的那样吗?

它可能位于您的工作簿路径之外的某个地方,在这种情况下,输出文件将在那里创建,而不是您期望的位置。

检查这一点的最简单方法是在没有路径的情况下执行 C++ 程序:

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

看看它是否提示找不到可执行文件。

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

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

并检查它是否已创建。如果是,那么您的可执行文件没有任何问题,您只是在一个与您认为的不同的目录中。

此外,在整个磁盘中搜索 Output.solution 文件。如果您在不同的目录中,那是文件将被创建的地方。

如果事实证明这是问题所在,最简单的解决方案可能是在运行可执行文件之前更改目录。 VBA 有一个 chdir command就是为了这个目的。之后您可能需要根据需要将其改回原来的状态,为此您可以使用 curdir

关于c++ - 为什么在Excel VBA中调用exe不输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14557345/

相关文章:

c++ - 更新指令 OpenACC

excel - 单元格为空,但 IsEmpty 不起作用

vba - 在 protected 工作表 Excel 功能区上启用清除过滤器

python - 每次打开/关闭文件与保持打开直到过程完成更好吗?

c++ - Qt Creator Options 选项卡等对话框的示例代码

c++ - 移动设备上的 STL 和 TR1

vba - 运行循环以根据标题名称检查列,并在缺少列时插入列

java - 如何在 Java/Scala 中正确地将字节流保存到文件中?如何修复错误保存的流?

Python Fileinput openhook=fileinput.hook_compressed 语法使用

c++ - 我如何使用构造函数代替 setter 成员函数