Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
コンソールアプリが実行できない
投稿日時: 21/07/28 15:07:27
投稿者: zo3zo3

外部ソフトを引数付きで起動する場合、shellでは正常にコンソールでやり取りを行うアプリが立ち上がり画面に表示されますが、
  
    rc = Shell("nslookup”) 'ソフト起動の起動
  
Execコマンドで立ち上げようとすると、画面が表示されず正常に起動しないのはなぜなのでしょうか?
また、コンソールアプリを以下の形式で立ち上げるにはどのようにすればよいのでしょうか?
この形でないと、コンソールの内容は取得できないのでしょうか?
  
  Dim WSH, wExec, sCmd As String, Result As String, tmp, i As Long
  Set WSH = CreateObject("WScript.Shell")
    sCmd = "nslookup"
    Set wExec = WSH.Exec("%ComSpec% /c " & sCmd)
  
  
あまりVBAに詳しくないのでどうぞ、よろしくお願いいたします。

回答
投稿日時: 21/07/28 21:16:07
投稿者: simple

(1)
WshShellオブジェクトの詳細
https://www.atmarkit.co.jp/ait/articles/0407/08/news101.html
Runメソッドについて
https://www.atmarkit.co.jp/ait/articles/0407/08/news101_2.html
Excelメソッドについて
https://www.atmarkit.co.jp/ait/articles/0407/08/news101_3.html
が参考になるでしょう。
 
(2)
例えば、下記のようなコードで標準出力を読み出せます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
    Dim WSH      As Object
    Dim wExec    As Object
    Dim sCmd     As String
    Dim strLines As String

    Set WSH = CreateObject("WScript.Shell")
    sCmd = "nslookup www.google.com"

    Set wExec = WSH.Exec(sCmd)
    Do While wExec.Status = 0
        Sleep 100
    Loop
    
    strLines = wExec.StdOut.ReadAll
    Debug.Print strLines
End Sub

投稿日時: 21/07/29 07:36:55
投稿者: zo3zo3

アドバイスありがとうございます。
 
  Set WSH = CreateObject("WScript.Shell")
    sCmd = "nslookup www.google.co
 
↑この例では、nslookupがwww.google.comはnslookupがgoogleのアドレスを
標準出力に表示して終わるため、結果が取得できるのですが、
 
nslookupを立ち上げ、
既定のサーバー: sv**.**.**.jp
Address: ×.×.×.×
 
> www.google.com
サーバー: sv**.**.**.jp     ←この結果を取得したい
Address: ×.×.×.×
 
アプリ内での情報を取得をするにはどうすればよいのでしょうか?
 

回答
投稿日時: 21/07/29 10:32:54
投稿者: simple

確認ですが、
もともとnslookupは対話型のもののようです。
それを非同期実行であるWSH.Execを使って実行する趣旨は何でしょうか。教えて下さい。
普通に手でコマンド打ったらいかがですか?わざわざVBAにする意味は何でしょうか。
 
また、最初の回答ではどのあたりがまずいですか?教えてください。

投稿日時: 21/07/29 15:33:22
投稿者: zo3zo3

説明が悪くてすみません。
 
ソフトの趣旨としてVBAで外部ソフトを動作させ、対話型でやり取りをしたいという
ことであります。
 
従いまして、外部ソフトを終了させずに、外部ソフトとのやり取りを取得したいということです。
 
よろしくお願いします。

回答
投稿日時: 21/07/29 16:30:38
投稿者: simple

あなたのご要望にお応えできません。他の方の回答をお待ち下さい。

投稿日時: 21/07/29 20:20:04
投稿者: zo3zo3

はーい〜〜

回答
投稿日時: 21/07/29 21:20:33
投稿者: simple

回答者さんへの参考情報です。
https://teratail.com/questions/351750
こちらで解決した模様です。

投稿日時: 21/07/29 22:54:34
投稿者: zo3zo3

ーーーーーーーー