こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA & easycomm で長時間測定の問題

エクセルVBAとフリーソフトeasycommで複数同一機種の測定器からデータを吸い上げてエクセルに張り付けるプログラムを組んでいます。実験で使うので、体裁はどうでも良いですが、1秒おきのデータを1日程度取りたいです。
下記のプログラムを作ったのですが、かなりの頻度でフリーズしてしまいます(汗)
数分の測定なら問題ないのですが・・・
どうすれば長時間安定して動作させられるかご教授ください! よろしくお願いします!

*******************************

For kai = 1 To kaisuu '測定回数がkaisuuに入ります

For dai = 1 To daisuu '測定台数がdaisuuに入ります

KOMU = KOMU1 + dai - 1 'KOMU1は1台目のCOMポートの番号で、それ以降はCOMは連続して接続されています

Application.EnableCancelKey = xlErrorHandler
On Error GoTo Esc_EXIT ' ESCキーが押されるまで繰り返す処理を記述

ec.COMn = KOMU ' COMを開く

ec.Setting = "4800,e,7,2" ' Baud Rate 4800 7bit 2stop Even
ec.HandShaking = ec.HANDSHAKEs.No ' ハンドシェイクなし
ec.Delimiter = ec.DELIMs.CrLf ' デリミタにCr/Lfを指定

ec.AsciiLine = "&Q/F" ' &Q/F というコマンドを測定器に送信

Q_F = ec.AsciiLine '受信内容を Q_F に格納

Dim EQU_WAKE As Variant
Dim EQU_WAKE2 As Variant
Dim TEN_WAKE As Variant

' ****************受信データの一部分だけを抜き出す*********************

EQU_WAKE = Split(Q_F, "=") 'Q_F を=で分けたものをEQU_WAKEとする

EQU_WAKE2 = EQU_WAKE(1) 'EQU_WAKE の 2番目の文字列を EQU_WAKE2 とする

TEN_WAKE = Split(EQU_WAKE2, ",") 'EQU_WAKE2 を , で分けた文字列を TEN_WAKE とする
'*********************************************************************

Cells(kai + 6, dai + 2) = TEN_WAKE(0) ' 欲しいデータを縦軸に回数、横軸に台数にわけて張り付けていく

ec.COMn = 0 ' すべてのポートを閉じる

ec.WAITmS = 1000 '測定間隔を1秒にする

Next

Next

Esc_EXIT: '押された後の処理
ec.COMn = 0 ' すべてのポートを閉じる

投稿日時 - 2011-03-11 12:57:27

QNo.6586312

すぐに回答ほしいです

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

エクセルのバージョンが古ければ、行数の制限に引っかかっている可能性はあります。
ファイルに書き出すには、何通りかの方法があります。

VBAを起動させ、ツールの参照設定で、
microsoft scripting runtime にチェックをいれ、

最初(ループの外)に
Dim fso As New FileSystemObject
Dim ts As TextStream
Set ts = fso.OpenTextFile("C:\Documents and Settings\All Users\デスクトップ\test.txt", ForAppending, True)
などと書いてておき、(ダブルクオート内はパス付きファイル名)

Cells(kai + 6, dai + 2) = TEN_WAKE(0) ' 欲しいデータを縦軸に回数、横軸に台数にわけて張り付けていく
の代わりに

ts.WriteLine kai & vbtab & dai & vbtab & TEN_WAKE(0)

最後に(ループの外で)
ts.close
Set ts = Nothing

とでもすれば、タブ区切りでデータを書いていくことができます。
CSV区切りなどにしたければ、ts.writelineの行をそのように変えればよいだけです。
このように変更して落ちなければ多分エクセルの行数制限に引っかかっているのだと思います。

書かれたデータを、何に、どのように読み込むかはまた、別問題です。

投稿日時 - 2011-03-17 20:00:44

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>かなりの頻度でフリーズしてしまいます
うまくいくときもあるが、ほとんどの場合エラーで落ちるのではなく、フリーズ状態になるということでしょうか?
エクセルのバージョンは2007以降ですか?
OSはなんですか? フリーズするときのメモリ使用率はどの程度ですか?

アドバイスとしては、データを一旦テキストファイルなどにに書き出しその後ファイルが出来上がってから、エクセルで処理されると良いと思います。 

投稿日時 - 2011-03-11 13:39:14

補足

早速の回答、有難うございます!
うまくいっても、4時間ほど(15000回程度)でフリーズします。ダメな時は1000回くらいでフリーズ(砂時計表示で、エクセル自身も終わらせれられなくなります)します。 
エクセルは97-2300ブックで保存しています。OSはXPです。
メモリー使用率は、当方、PCに詳しくないので分かりません・・・

<アドバイスとしては、データを一旦テキストファイルなどにに書き出しその後ファイルが出来上がってから、エクセルで処理されると良いと思います

ですが、どうやってVBAでテキストファイルに書き出すのでしょうか?ご指導よろしくお願いします! 

投稿日時 - 2011-03-11 14:21:57

あなたにオススメの質問