1

そのため、.txtファイルを書き込んでから同じディレクトリにある.exeを呼び出すボタンを備えたマクロ対応のExcel/VBAワークブックがあります。.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の外部で呼び出されたときと同じように、実際にファイルに情報が入力されるようにするにはどうすればよいですか?

4

2 に答える 2

2

あなたの現在のディレクトリがあなたが思っているものであると確信していますか?

ワークブックのパス以外の場所にある可能性があります。その場合、出力ファイルは期待する場所ではなくそこに作成されます。

これを確認する最も簡単な方法は、パスなしで C++ プログラムを実行することです。

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

実行可能ファイルが見つからないことについてひどく不平を言うかどうかを確認します。

もう 1 つの方法は、出力ファイルに (一時的に) 既知の場所を使用することです。

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

作成されていることを確認します。そうであれば、実行可能ファイルに問題はありません。考えているディレクトリとは異なるディレクトリにいるだけです。

また、ディスク全体でOutput.solutionファイルを検索します。ファイルが作成される別のディレクトリにいる場合

それが問題であることが判明した場合、おそらく最も簡単な解決策は、実行可能ファイルを実行する前にディレクトリを変更することです。VBA には、まさにこの目的のためのchdirコマンドがあります。必要に応じて後で元に戻す必要がある場合があり、これに使用できますcurdir

于 2013-01-28T07:29:10.337 に答える
0

最善の策は、SysInternal の Process Monitor などのツールを使用して、ファイルの書き込みがまったく行われているかどうかを確認し、そうでない場合はその理由を確認することです。

私の推測では、おそらく、実行すると予想されるディレクトリとは異なるディレクトリで実行されている実行可能ファイルに違反していると思います。絶対的な場所に出力してみてください (または最初に SetCurrentDirectory を呼び出して)、これが役立つかどうかを確認してください。

于 2013-01-28T07:29:23.863 に答える