投稿者 daive  (社会人) 投稿日時 2014/12/1 19:40:33
お役にたつかどうか解りませんが、

1.Windows API による 232 通信でも、受信バッファに受信されたデータ数を
  検出する事が可能です。
  ⇒やさしく書いた過去サイトが、無いか検索してみました。
    例えば、
    WindowsでRS232Cを使う
    http://members.jcom.home.ne.jp/0434383301/vc10.htm
    受信されたデータ数を実際にReadFile()を呼び出す前に知りたい場合があります。
      省略    
  ⇒データが固定長であれば、決まった長さになるまで、受信データ数を、定期的にチェックする。
    ↑説明通りであれば、固定長の筈ですよね?
    可変長であれば、ターミネータ(C/R、L/F、EOT etc)で判別、
    固定長でもなく、ターミネータでも判定出来ない、適当通信であれば、
    データ数の増加がなくなったら、1回分受信終了と判定するなど。

  現状のコード構成に近いままで行うには、
>    Do While CommInput(hCom, buf, Len(buf)) = 0    ' 受信する(Module1内の受信命令を実行)
>          DoEvents  
>     Loop
  固定長データなのですから、
  上記のコードの後に、決まったデータ数に達するまで、
  データを追加で読込むコードを追加すれば良いのでは?

2.イベント駆動型プログラミングでは、
 >'23時のデータを受信するまで常にデータを受信する
 >Do While nipo <> 2300    
 >     DoEvents      
 >  :中略
 > Loop
 の様な、無限ループ的プログラムは、書かない事が前提です。
 DoEventsは、現在の環境では、DoEventsの利点よりも、欠点の方が多く、
  安易な使用は避けるべきものです。
 EXCEL-VBAでは、標準でインターバルタイマが実装されていないので、
 application.ontime(検索ワード:vba application.ontime)の使い方を工夫して、
 定周期に、受信バッファのデータ数を調べる方法へ、変更をお勧めします。
 (データ受信間隔:1時間に1回程度ですので、対応可能。)
 または、1分以上に1回程度チェックするのであれば、テーブルクエリのデータ更新間隔を
 イベントに使う事も可能。
3.苦労して、Windows API から 232 を使わなくても、VB.NET であれば、
  232 通信は、簡単にできるのですが、敷居が高いようであれば、
  受信バッファに受信されたデータ数を検出する事
  からかも。

  VB.NET から EXCEL を使う方法もありますが、
  慣れていないと混乱するかもしれません。
  EXCEL-DNA という手段もあります。