- 締切済み
ExcelVBAでDOSコマンドの標準出力をリアルタイムでフォームへ出力するには
いつもお世話になります。 タイトルにある通りです。 VBAより実行したDOSコマンドの実行結果を、tailコマンドのように、フォーム(テキスト部品など)に出力させたいと考えています。 一度実行結果をファイルへ保存してそれをフォームへ出力させる、というのではなく、あくまでリアルタイムで表示する、ということは可能でしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- pdragon
- ベストアンサー率35% (5/14)
回答番号:No.1の続きになりますが(こんなレスの付け方でいいのか?) 1. 標準入力から読み込んだ文字列を指定WindowへSendMessageで送信するプロセスを作成。 2. VBAのユーザフォームをサブクラス化してハンドラ作成。(受信文字列をテキストボックスへ追加) 3. VBAから実行するコマンド文字列を、送信プロセスにリダイレクトするように作成して実行。 で、できるような気がしますが、どこがわかりませんか? 回答3にもあるように、 >VBAでやる範疇ではないでしょう。 が全てのような。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでやる範疇ではないでしょう。 良くわかった人が、APIなど使えば出来るのかもしれないが、そんな回答を丸写ししてでも、課題を達成したいですか。 APIの関連するレベルの質問は本質問コーナーの範囲を超えているーー 方法論に注文(Dosコマンド利用)つけず、全般的にやりたいことを質問に表現して見ては。 あるいは、ひょっとしてVBScriptなどでやれる場合かも知れない。 ーー 質問者の場合と言うのではないが、十分な技量がないのに、「他ソフトとの連携」などの質問が結構有るが、概して難しいものだと思う。 本やWEBで情報も少なく、自分が長期に渉って情報を漁り、背景・基礎知識も含めて、勉強する類のものと思う。
- redfox63
- ベストアンサー率71% (1325/1856)
WSHを使っていいならば Dim oWShell as Object, oWExec as Object dim ss as String Set oWShell = CreateObject("WScript.Shell") Set oWExec = oWShell.Exec( "実行するコマンド" ) do ss = oWExec.StdOut.ReadLine() TextBox1.Text = TextBox1.Text & ss & vbCrLf Loop while oWExec.StdOut.AtEndOfStream <> True set oWExec = Nothing Set oWShell = Nothing といった具合で出来そうです ただし oWShell.Execで起動したDOS窓側の出力はされませんが ・・・ DOS窓側へも出力したいとなると パイプ処理などが必要になりそうです
- pdragon
- ベストアンサー率35% (5/14)
CreatePipe, CreateProcessのWin32APIを使って、cmdの標準出力のパイプをReadするようにすれば取得できると思いますが、リアルタイムを非同期で動かすにはVBAではちょっと・・・ 標準入力を指定WindowsへSend/Postするプロセスを別に作って、cmdの標準出力のパイプをそのプロセスの入力に繋いで起動するのがいいような気がす。
お礼
回答ありがとうございます。 しかし内容がちょっと高度すぎますね。 もう少し噛み砕いて(具体的に)説明いただけるとうれしいのですが。。。 お手数ですがご教授願えませんか。