• 締切済み

一定時間毎に、配列に値を入れたい。

たとえば、1秒おきにある配列に適当な数値を代入するにはどうすればよろしいでしょうか。Timer イベントの発生のさせ方はわかるのですが…。 ってか、これじゃ質問の意味がわかんないですよね。例えば、1秒毎にそのときの時刻の、「秒」を配列 a に格納することにします。。はじめた時間が 14:35:17 なら、 a(0) = 17, a(1) = 18, a(2) = 19, a(3) = 20,… というようにしたいのです。これでなんとなく分かって頂けると思うんですが。よろしくお願いします。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

ぼくはVBのタイマーを信用していません。 VBのタイマーは、タイマーイベントのロジックの処理の重さにより多少ずれているように思えるのです。(正確だというのであればごめんなさい) ちなみにAPI関数でWINDOWSが起動してからどれだけの時間が経過したかなどの、時間に関するものがあります。そういったものを使用したほうが、コンパイル後のEXEが小さくすみます。 タイマーコントロールを使用しないやり方を記述します。 処理の簡単なながれとしては 直前の実行時から1秒経過したら、配列に値をセットするようになってます。 実行秒数は、配列要素の数だけの秒数を実行します。 ----以下のソースを貼り付けてください。---- 必要なものフォームとコマンドボタン1 Option Explicit Private Declare Function timeGetTime Lib "winmm.dll" () As Long Private pTime    As Long Private lngWork(5)  As Long Private lngCount  As Long Private Sub Command1_Click()   Dim maxCount  As Long   Dim lngGetTime As Long      Command1.Enabled = False      lngCount = LBound(lngWork)   maxCount = UBound(lngWork)   'とりあえず開始の時間を取得   pTime = timeGetTime      Do Until lngCount > maxCount     DoEvents     '時間を取得     lngGetTime = timeGetTime     '前回の処理から1秒経過すると以下の処理を行う     If (lngGetTime - pTime >= 1000) Then       lngWork(lngCount) = lngGetTime       pTime = lngGetTime       lngCount = lngCount + 1     End If   Loop   MsgBox "end"   Command1.Enabled = True End Sub

noname#11247
質問者

お礼

ありがとうございます。わざわざソースまで書いてくださって、とてもうれしいです。大変参考になりました。おかげさまで問題はほぼ解決できました。勉強になりました。

  • Zincer
  • ベストアンサー率43% (88/201)
回答No.1

「Timerイベント」が発生するたびに変数が初期化されるのが問題なのでしょうか? でしたら、「Staticステートメントで変数を宣言する。」あるいは、モジュールの宣言セクションで「Publicキーワードを使って”パブリック変数”を宣言する。」を利用してみてはいかがでしょうか? どちらの場合でも、途中で初期化(0?)する必要がある場合はそのタイミングが難しいかも知れません。 ご参考までに...

noname#11247
質問者

お礼

早速のご回答、ありがとうございます。ただ、初心者なので、ちょっと難しいですね。もっともっとレベルアップしたいところです。

関連するQ&A