2011-01-26 49 views
1

我想在VBA中定義一個小函數ZipDistance,它計算兩個郵政編碼之間的距離。由於我在一個.Net應用程序中有這樣的功能,因此對於我來說,使用正確的參數執行此應用程序,然後再讀取結果將是最簡單的。IPC - Excel和.Net應用

.net應用程序的參數是兩個郵政編碼(即整數),並且計算的結果是一個整數。

像下面的東西會工作得很好。

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

有關如何做到這一點的任何建議?任何退出代碼,從.net應用程序使用標準讀取到文件並在Excel中解析該文件都是可以接受的。只要它相當簡單。

+0

已解決。有點!我意識到問題領域可以被大大簡化。我們只需要大約1500個郵編就可以代替1600個郵編碼元。因此我簡單地將它們裝載。 – Benjamin 2011-02-07 14:26:05

回答

1

您要求的功能是Shell()以我的理解。但根據在線幫助,這不會返回您的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

在我看來,這是一個簡單的退出代碼的過於複雜的方法。我已經嘗試過類似的方法,可以說它更加複雜。您必須加載特殊庫並使用掛鉤來等待外部命令和內容的終止。但是,據我所知,唯一的選擇是建立一個網絡服務,這可能會更加複雜。 – Benjamin 2011-02-07 14:22:47