• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelで、WScript.Shell、標準出力)

Excelで、WScript.Shell、標準出力

このQ&Aのポイント
  • Excelで、WScript.Shellを使用して標準出力を経由してデータを取得する方法について解説します。
  • 標準出力のサイズ制限に関する問題について、解決策や制限を取り払う方法を模索しています。
  • 下記のコードを使用して標準出力の容量制限を確認しましたが、解決策が見つかっていません。どのように対処すればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

申し訳、ございません。 完全な回答にはなっていないのですが、 Option Explicit Sub Test() Dim w, e As Object Dim c As String Dim r As Integer Set w = CreateObject("WScript.Shell") c = "type D:\t.txt" Set e = w.Exec("%ComSpec% /c " & c) r = 0 Do While e.Status = 0 r = r + 1 Cells(r, 1).Value = e.StdOut.ReadLine Loop Set e = Nothing Set w = Nothing End Sub と、1行ずつ読み込んでエクセルに書き出すと、かなりの量(4096バイトははるかに超えている)が書き出せたのですが、あと、何行か、残ってしまいました(私が読み込んだテキストデータに何か変な文字コードでも入っていた?)。 質問者のプログラムでしたら、「Do Wile・・・」の前に「Result = ""」とし、「Do While・・・Loop」の間に「Result = Result & wExec.StdOut.ReadLine & vbCrLf」とし、最後に「MsgBox Result」としてみてください。

tharch77
質問者

お礼

ReadLineメソッドを教えていただきありがとうございます。 その場合は、ループをAtEndOfStreamプロパティで回すようです。 (参考) http://www.atmarkit.co.jp/ait/articles/0907/29/news113.html ただし、1行が4096を超える場合は対応できないでしょう。(たとえばLFやCRが単独で改行となっている場合など)必要に応じて対応して行こうと考えています。 いずれにしても、一発でいける.ReadAllに頼っていました。手抜き、横着はほどほどに・・・ということですね。 ありがとうございました。