今、エクセルのマクロ(VBA)でSHELL関数を使いCの実行ファイルを(いくつかの引き数と共に)実行させて、その結果を取得し、エクセルのセルに表示させようとしています。ですが、うまく実行、戻り値取得ができません。
過去ログも調べてみて、似ているものを探したのですが、ありません。どなたか詳しい方教えて下さいませんか?ちなみにVBAは全くの初心者です。よろしくお願いします。
SHELL関数では無理です。
他の方法をさがしましょう。
”初心者”ぶる人好きくないのでここまでです。。
SHELL関数を使う他でCの実行ファイルを動かして、戻り値を取得する方法はありますか?詳しい方よろしくお願いします。
>あんさん
何を根拠におっしゃてるかわかりませんが、VBAに関して全くの初心者です。“初心者ぶる”って勝手な想像でおっしゃらないで下さい。それに、初心者ぶる必要がどこにあるんですか?ここはそういう掲示板なんですか?
>Cの実行ファイル
とはどんなものでしょうか?
コンソールアプリである場合、WScript.Shellオブジェクトが便利です。
参考
http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_03.html
ウィンドウアプリの場合、どのタイミングで処理が終了し、どの結果を取得する
のか判断するのが難しいので実現するのは現実的ではなさそう。
コンソールアプリと仮定した場合、
出力先を決めて、適当なファイルにリダイレクト。
処理を待つ。(終了を待つサンプルは過去ログにあると思います)
上のファイルからVBAで普通に開いて処理。
でどうでしょうか?
書き忘れ。shell関数などを使ったとき。
受け取り側にTextBoxを一つ作って、Cの実行ファイル起動時に
引数でそのハンドルを渡し、Cのアプリからハンドルめがけて
テキストデーターを投げる方法もある。
クリップボード経由で渡す方法もあるし、手はいくらでも。
ただVBAからCに渡す方法はちょっと面倒なのでCの方も、
Windowを持った方法がいいかも。
ExcelVBAなら、専門サイトが多いので、そちらのほうが適切でしょう。
あとは「Cの実行ファイル」とやらの仕様次第ですが、
コマンドプロンプト(DOSプロンプト)上での実行を想定しているのであれば、
http://www.officetanaka.net/excel/vba/tips/tips27.htm
でいけませんか?
まあ、あとはこのへん。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200412/04120036.txt
http://www.keep-on.com/excelyou/2003lng4/200307/03070426.txt
http://www2.moug.net/bbs/wordvba/20060917000001.htm
http://www.vector.co.jp/soft/dl/winnt/prog/se409273.html
遅くなりましたが、無事解決することができました。アドバイスを下さった皆様ありがとうございました。
ツイート | ![]() |