シミュレーションの作り方 4



その4 VBAで自動タイマーを作る。



注意!(Caution!)

自動タイマーは、Stopボタンを作成後に稼働させないと止められなくなります。

(ループから抜け出るボタンがないから)

 強制終了の方法をご存じない方は稼働させる前にこちらで確認してください。

When an Automatic timer is moved before you make a Stop button, it has not been possible to stop an automatic timer eternally at that time.(Way of termination

 

Therefore the thing which makes an Automatic timer operate after you made a Stop button first.

_時計の針が1秒刻みに動くように刻む時間間隔⊿tの値をセルR3に入れておく必要がある。ここでは手動と連動するよう"=1/30"と入れる。
_次に、自動経過時間を表示するセルをR4に用意する。 

_また、右図のように、[START]と[STOP]ボタンも用意しておく。

_最初に[STOP]ボタンにVBAを記述するため、[STOP]ボタンをWクリックしVBAエディタを表示させる。(デザインモードで行う)

_まず、先頭行に”Private 停止 As Boolean”と記述する。 
_続いてPrivate Sub CommandButton3 Click() に、”停止=True”と記述する。これは強制割り込ボタン

注意!(Caution!)

自動タイマーは、上記のStopボタンを作成後に稼働させないと止められなくなります。(CTRL+ALT+DELボタンを同時に押し、タスクマネージャーを起動させタスクを停止させる。または、電源ボタンを30秒間押し続け電源を切り強制終了させる。いずれにしても上書き保存をしておかないと作成したものがパーになるので注意)

When an Automatic timer is moved before you make a Stop button, it has not been possible to stop an automatic timer eternally at that time. 

Therefore the thing which makes an Automatic timer operate after you made a Stop button 

_次に、[START]ボタンの上で左WクリックしVBAエディタを表示し、図のように内容を記述する。
_ここに出てくる「⊿t」「直前時刻」「自動経過時間」等は適当に付けた記号なので何でもよい。
_続いて、[RESET]ボタンの内容も図のように書き換えておく。 

_最後に、P3セルの計算式を”=R4+(o1ー5000)*R3”と書き換える。

_[START]ボタンを押してみて下さい。途中で[STOP]を押し、スピンボタンによる手動で戻したり進めたりし見てください。きれいに自動と手動が連動してるはずです。

 

 

 

条件により自動的にSTOPさせたい時は、1.Timer基本 をDownload しStartボタンのVBA(下記太字部分)をみて追加記載して下さい。

 Private Sub CommandButton1_Click()      'Startボタン

'「 Private 停止 As Boolean 'ストップの判定 」の貼り付けとSTOPコマンドボタンの取り付けを忘れないように。

'****************CommandButton2にSTOPを設定するときのコード記述例 コピーしRem記号(’)を取って使用する。*******************

'Private Sub CommandButton2_MouseDown(ByVal Button As Integer,ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 'stop

'    停止 = True

'    CommandButton1.Caption = "再  開" ’コマンドボタン1に「Start」を設定したとき、Stopを押すと「再開」に代わる。

'

'End Sub

'********************************************************************    

    Dim ⊿t As Single '待機時間

    Dim 開始時刻 As Single 'スタート時刻

    Dim 経過時間 As Single '経過時間

    Dim STtime As Single

    

      kad$ = "B1" '時間間隔⊿tのセル番地     '●書き換えその1/2

      tad$ = "B2" '時間カウンターのセル番地 '●●書き換えその2/2      

            

    ⊿t = Range(kad$) '時間間隔⊿t設定

      t = Range(tad$) '時間カウンター設定

    

    開始時刻 = Timer - t * ⊿t 'tはカウンター

    経過時間 = t * ⊿t '経過時間(自動経過時間+手動経過時間)

    停止 = False '論理STOPはオフ

    Range("A1").Activate '左上がA1になる画面にするため

    

    Do Until 停止 '停止=TRUEまで続ける

        Range(tad$).Value = Int(経過時間 / ⊿t) 'tカウンターを書き換えて行く

        経過時間 = 経過時間 + ⊿t  

  '***************************************************************************************

        停止 = Range("B6")               '●●●書き換えその3/2

        

        '止めたい時刻を過ぎたら"TRUE"と時刻前は"FALSE"と表示するセルを指定し、

        '常に読み込むようにする。特に停止時刻を指定しないときは、ここをカットorREM化する。

  '***************************************************************************************        

        Do Until Timer - 開始時刻 >= 経過時間 '(⊿t経つまでループする)

        Loop

        DoEvents

    Loop

 

End Sub