2011-01-26 14 views
1

私は2つの郵便番号の間の距離を計算するVBAで小さな関数ZipDistanceを定義しようとしています。私は.Netアプリケーションでこのような機能を持っているので、正しいパラメータでこのアプリケーションを実行してから結果を読み取るのが最も簡単です。IPC - Excelと.Netアプリケーション

.netアプリケーションのパラメータは、2つの郵便番号(すなわち整数)であり、計算結果は整数である。

次のようなものは問題ありません。

Dim ret as Integer 
ret = Execute("my-net-app.exe 9000 8000") 

どのようにすればいいですか? .net appからの標準出力を使ってファイルに読み込み、Excelでそのファイルを解析することで、終了コードから何かが受け入れられるでしょう。限り、それはかなり簡単です。

+0

解決済み。並べ替えの!私は、問題のドメインが非常に重く単純化できることに気づいた。 〜1600の郵便番号の階乗ではなく、約1500の郵便番号しか必要としません。そういうわけで私は単純にそれらを積み重ねました。 – Benjamin

答えて

1

あなたが求めている機能は、シェル()です。しかし、これはあなたのexeの戻り値ではなく、オンラインヘルプによると、アプリケーションの "タスクID"を返します。アプリケーションと通信するには、自動化、IMOが必要です。

さて、あなたのexeファイルの出力はテキストファイルにコンソールにリダイレクトすることができた場合(

Shell "my-net-app.exe 9000 8000 > g:\distance\result.txt" 

)、あなたは古き良き開く]を使用することができます。

Dim intFile As Integer, strDistance As String 
intFile = Freefile 
Open "g:\distance\result.txt" For Input As #intFile 
Input #intFile, strDistance 
Close #intFile 

私もチェックしていません構文の詳細は、これはパスを表示するだけです。私は複雑なファイル(この方法でTransferTextを再構築)を読んだので、うまくいきます。

私はそれをお勧めしません。これは、単一の情報をプログラムからプログラムに渡す方法ではありません。このような小さなプログラムを自動化するのは面倒ではないので、VBAの機能を再構築します。

+0

これは、私の意見では、単純に終了コードを取得するという非常に複雑な方法です。私はすでに同様のアプローチを試みており、さらに複雑であることがわかります。特別なライブラリをロードし、外部コマンドやものの終了を待つフックを使用する必要があります。しかし、私が見つけた限りでは、これに代わる唯一の選択肢は、さらに複雑になる可能性のあるWebサービスを設定することです。 – Benjamin

関連する問題