(1)ループさせ続ける
無限ループのようなコードを書き、時刻を適宜チェックするという荒業。
CPU使いっぱなしになりますし、ループを続ける事によって
フリーズしたりする可能性も結構高いので、一時凌ぎ以外には使えません。
(2)タイマーコントロール系のフリーソフトを使う
どれがどれやら・・・何とも言えません。
(3)Windowsのタスクスケジューラを使う
Excelを動かし続けるのではなくて
WindowsのタスクスケジューラでExcelを定時的に起動させるのがスマート。
マクロ名をAutoExecにしておけばブックを開いた時に動きだします。
VBScriptを使えればExcelを起動することなく(実際には裏で動いているけど)行えるので
よりスマートなシステムにすることも可能だけれど覚える事が増えるので割愛。
kn1967さんの(1)の方法でやってみました。
Do~Loopで無限ループにすると、私のPC環境はクアッドコアだったので、
4つのコアの内1つが常に最大状態で、25%程度の使用率。
できなくもないが、一般的じゃなくてメモリのこともあるし実用的じゃないですね。
(3)のタスクスケジューラでブックを開くときにマクロが実行されて、終了したら閉じるようにするのが実用的だと思います。
因みに、(1)で作ったコードは以下。
シートにスタートストップボタンを作って、シートモジュールに
Private Sub CommandButton1_Click() If fRun Then fStop = True CommandButton1.Caption = "スタート" Else CommandButton1.Caption = "ストップ" Call TimerTest End If End Sub
標準モジュールに
Option Explicit Public fStop As Boolean Public fRun As Boolean Sub TimerTest() Dim i As Integer Dim f As Boolean Dim strTime As String Dim strTime2 As String Dim setTime(1 To 6) As String setTime(1) = "8:30" setTime(2) = "8:50" setTime(3) = "9:00" setTime(4) = "9:15" setTime(5) = "9:30" setTime(6) = "11:00" fRun = True Do DoEvents If fStop Then Exit Do strTime = Hour(Now) & ":" & Minute(Now) f = False For i = 1 To UBound(setTime) If setTime(i) = strTime And setTime(i) <> strTime2 Then f = True strTime2 = setTime(i) Exit For End If Next If f Then 'ここに処理が入ります。 MsgBox strTime End If Loop fRun = False fStop = False End Sub
ご丁寧な回答を本当に有難うございます。
明日からインターネットのできる温泉に1週間籠もりますので・・・さっそくチャレンジしてみます。
既に解決しているかもしれませんが・・・
一般的に、10回/日であれば、kn1967さんが書かれているWindowsのタスクの機能がいいと思います。
標準モジュールにauto_run()を記載しておき、タスクでそのExcelファイル名を指定しておく。
ボタンを押した処理をauto_run()に書いておく。
(ただし、セキュリティレベルを「低」にしておく必要があります)
autoexecはAccessの方と思いますので、Excelではauto_runですね。
回答ありがとうございます。いろいろ難しそうですね。高齢者になって・・・頭がなかなか回りません(笑)
エクセルシートにボタンを付けて押すとその時の株値等をコピペできるようにしましたが、
これを8:30 8:50 9:00 9:15 9:30 11:00 に自動で押してくれるととてもウレシイのです。