2011-01-26 4 views
1

두 개의 우편 번호 사이의 거리를 계산하는 VBA에서 작은 함수 인 ZipDistance를 정의하려고합니다. NET 응용 프로그램에서 이러한 함수가 있기 때문에 올바른 매개 변수로이 응용 프로그램을 실행 한 다음 결과를 다시 읽는 것이 가장 쉽습니다.IPC - Excel 및 .NET 응용 프로그램

.net 응용 프로그램의 매개 변수는 두 개의 우편 번호 (즉 정수), 계산 결과는 정수입니다.

다음과 같이하면됩니다.

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

어떻게 할 수 있습니까? .net app에서 표준 출력을 사용하여 파일을 읽고 Excel에서 해당 파일을 구문 분석하는 종료 코드의 내용은 모두 허용됩니다. 만큼 간단합니다.

+0

해결되었습니다. 일종의! 나는 문제 영역이 상당히 무겁게 단순화 될 수 있음을 깨달았다. ~ 1600 우편 번호의 계승이되는 대신, ~ 1500 우편 번호 만 필요합니다. 그와 같이 나는 그 (것)들을 단순히 대량 적재했다. – Benjamin

답변

1

당신이 요구하는 기능은 내 이해에 쉘()입니다. 그러나 이것은 온라인 도움말에 따라 응용 프로그램의 "작업 ID", 귀하의 EXE의 반환을 반환하지 않습니다. 응용 프로그램과 통신하려면 자동화, IMO가 필요합니다.

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

내가도를 확인하지 않은 : 당신의 EXE의 출력을 텍스트 파일 (

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

)에 콘솔에 리디렉션 할 수있는 경우

는 는

글쎄, 당신은 좋은 오래된 열기 사용할 수 있습니다 구문에 대한 자세한 내용은 경로를 보여주는 것입니다. 복잡한 파일 (이 방법으로 재구성 된 TransferText)을 읽었으므로 제대로 작동합니다.

나는 그것을 추천하지 않을 것이다. 이것은 하나의 정보가 프로그램에서 프로그램으로 전달되는 방식이 아닙니다. 이처럼 작은 프로그램을 자동화하는 번거 로움을 좋아하지 않으므로 VBA에서 함수를 다시 작성합니다.

+0

이것은 제 생각에는 단순히 종료 코드를 내보내는 지나치게 복잡한 방법입니다. 나는 이미 비슷한 접근법을 시도해 왔으며 그것이 훨씬 더 복잡하다는 것을 알 수있다. 특수 라이브러리를로드하고 후크를 사용하여 외부 명령 및 물건의 종료를 기다려야합니다. 그러나, 내가 아는 한, 이것에 대한 유일한 대안은 더 복잡한 웹 서비스를 설정하는 것입니다. – Benjamin

관련 문제