• 締切済み

ExcelVBAでDOSコマンドの標準出力をリアルタイムでフォームへ出力するには

いつもお世話になります。 タイトルにある通りです。 VBAより実行したDOSコマンドの実行結果を、tailコマンドのように、フォーム(テキスト部品など)に出力させたいと考えています。 一度実行結果をファイルへ保存してそれをフォームへ出力させる、というのではなく、あくまでリアルタイムで表示する、ということは可能でしょうか? よろしくお願いします。

みんなの回答

  • pdragon
  • ベストアンサー率35% (5/14)
回答No.4

回答番号:No.1の続きになりますが(こんなレスの付け方でいいのか?) 1. 標準入力から読み込んだ文字列を指定WindowへSendMessageで送信するプロセスを作成。 2. VBAのユーザフォームをサブクラス化してハンドラ作成。(受信文字列をテキストボックスへ追加) 3. VBAから実行するコマンド文字列を、送信プロセスにリダイレクトするように作成して実行。 で、できるような気がしますが、どこがわかりませんか? 回答3にもあるように、 >VBAでやる範疇ではないでしょう。 が全てのような。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAでやる範疇ではないでしょう。 良くわかった人が、APIなど使えば出来るのかもしれないが、そんな回答を丸写ししてでも、課題を達成したいですか。 APIの関連するレベルの質問は本質問コーナーの範囲を超えているーー 方法論に注文(Dosコマンド利用)つけず、全般的にやりたいことを質問に表現して見ては。 あるいは、ひょっとしてVBScriptなどでやれる場合かも知れない。 ーー 質問者の場合と言うのではないが、十分な技量がないのに、「他ソフトとの連携」などの質問が結構有るが、概して難しいものだと思う。 本やWEBで情報も少なく、自分が長期に渉って情報を漁り、背景・基礎知識も含めて、勉強する類のものと思う。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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)
回答No.1

CreatePipe, CreateProcessのWin32APIを使って、cmdの標準出力のパイプをReadするようにすれば取得できると思いますが、リアルタイムを非同期で動かすにはVBAではちょっと・・・ 標準入力を指定WindowsへSend/Postするプロセスを別に作って、cmdの標準出力のパイプをそのプロセスの入力に繋いで起動するのがいいような気がす。

kamakuragengorou
質問者

お礼

回答ありがとうございます。 しかし内容がちょっと高度すぎますね。 もう少し噛み砕いて(具体的に)説明いただけるとうれしいのですが。。。 お手数ですがご教授願えませんか。

関連するQ&A

  • ACCESSでのVBA標準出力について

    いつもお世話になっております。 皆様の知識をご教授いただければと思います。 ■実現したい内容 テキストボックスにコマンドプロンプトの出力結果を表示させたいと考えております。 テキストボックス1 = shell (cmd /k ”ipconfig.exe”) コマンドボタンを実行すると コマンドプロンプトが起動 ”ipconfig”実行 実行結果をみると、テキストボックスには数字の0が表示されているので 何がしかの結果がかえってきているのですが 何かが足りないとは思うのですが 何かがわかりません。 ””内にリダイレクトを入れると、テキストなどに標準出力を変更するのは できたのですが、ACCESSのフォーム内のテキストボックスに変更するのは 可能なのか否か 可能であれば、EXCELのフォームにも応用が利きそうなので

  • 【DOSコマンド】一致した文字列の次の単語を出力

    コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを検索し、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、abcdefgを出力したいです。 hogehogeは大文字小文字入り交じっています。

  • DOSにコマンドを送って実行

    DOSモードでしか実行できないソフトがあるんですが、 VBからそのソフトをDOSで実行し、コマンドを送って、結果を得られるようにしたいのですが。 それと、DOSで実行している過程は表示されないようにしたいです。 そのソフトの使用方法は起動してコマンドを入力するだけで結果が出てきます。 どなたかご存知の方がいらっしゃいましたら宜しくお願い致します。

  • VBでDosコマンドを動かすには

    VB6でDosのコマンドを入力して実行させたいと思っているのですが、どのように設定すればいいのでしょうか? わざわざVB6からDosプロンプトを起動させるわけではございません。 理想ではテキストボックスにコマンドを入力してボタンを押すと実行すると言う形にしたいのですが・・・。 ご存知の方ご指導よろしくお願いします たぶんAPIを使うのだと思いますがAPIまだまだ知識不足なので、分かりやすく解説していただければ助かります。 よろしくお願いします。

  • シェル(sh)で実行コマンドを標準出力するには

    kshでコマンドを実行して結果をファイルにリダイレクトしています。 結果のみファイルに出力され、実行したコマンドを確認することができません。 実行コマンドも一緒にファイルに出力する方法がありましたら教えてください。 なお、実行コマンドをechoするってのはなしで。 多量のコマンドを実行する場合にめんどくさいので。

  • VBでDOSコマンドを実行し、結果をEXCELシートに貼りたい

    EXCELからVB等を使ってDOSコマンドを実行し、その実行結果を指定したEXCELシートに貼り付けることは出来ますでしょうか?例えば、EXCELシート内に配置したボタンを押すと、DOSコマンド「ipconfig」等が起動され、その出力結果を指定したEXCELシートに貼り付けるという動作をさせたいと考えています。よろしくお願いいたします。

  • DOSコマンドでファイルのショートカットを作る方法

    VBAでファイル名に日付を含むExcelファイルを日々作り出し、それと共にそれを起動するショートカット(名前は固定)を更新したいのですが、VBAからDOSコマンドを実行する方法は判ったのですが、DOSコマンドでショートカットを作る命令が在るのかどうかわかりません。またVBAから他に簡単な方法で同じことが出来る方法が在りますでしょうか?

  • エクセルのVBAからDOSコマンドのDIRを実行したい

    DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • Windows Dosコマンドで

    WinXP HE あるいは PEでのお話です。 Dosコマンドで(バッチ処理をさせたいのですが)、 あるテキストファイルの1行目の先頭文字2文字を 切り取って標準出力する方法はあるのでしょうか? いろいろ調べてみたのですが、 UNIXほど強力なテキストエディット機能が無いようで困っています。

  • AccessのフォームをExcelに出力

    いつもお世話になっております。 現在、Access2003でDBを作成中です。 "テーブル1"をパラメータクエリで抽出します。"クエリ1"。 そのクエリを基にフォームを作成しています。"フォーム1"。これは抽出して印刷したり、Excelに出力するために作成しました。レポートではなく、フォームにした理由は、コマンドボタン等を配置できることからです。 Excelに出力する際のVBAでつまづいてしまいました。 DoCmd.OutputTo acOutputForm, "フォーム1", acSpreadsheetTypeExcel9 これで問題なく出力できています。が、、、 Access2007の一部のPCでこれを実行するとエラーが出ます。 原因は"OutputTo"が含まれているとエラーになるようです。 ちなみにエラーは「現在出力しようとしているオブジェクトの形式は無効です。」 「2007 Office スイート Service Pack 2」こちらをインストールすると良いそうなのですが、だめでした。 WindowsXP、Office2007はこのVBAだとエラーになります。 WindowsVista、Office2007は正常に使えました。 PCの何か設定?と考えたりもしたのですが、はっきりとした原因がわからないのでは、他の人にDBを使っていただけないので、エラーにならないVBAでいきたいです。 もうひとつ、 mFileName = InputBox("ファイル名を入力してください。") DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "フォーム1", mFileName こちらのVBAはクエリの出力だとうまくいくのですが、フォームだとだめでした。 クエリから抽出して保存すれば良いのですが、理想はこの形です。 1.フォーム1を開くと「担当者を入力」とパラメータクエリが働き、抽出結果をフォーム1に表示される。 2.[出力]ボタンを押すと、ダイアログボックスが開いてファイル名を指定して保存する。または、ダイアログボックスが開かなくても名前を指定できれば良いです。最悪、指定できなくても良いですが、原因となる、"OutputTo"を避けたVBAでいきたい。 3.mFileName = InputBox("ファイル名を入力してください。") DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "クエリ1", mFileName これだと、1.でパラメータクエリで抽出結果をフォームに表示させて、2.で[出力]ボタンを押すと、また、パラメータクエリで抽出しなければならなくなるのでできれば避けたいです。 こちらの条件でご教授お願い致します。 また、WindowsXP、Office2007でエラーが出ましたので、これを解決する方法でも良いです。 よろしくお願い致します。

専門家に質問してみよう