
エクセルVBAでタイマーコントロールは使えますか。
エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。
無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、
一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間
連続で動作させることに不安を感じています。
この他に、VBのタイマーコントロールのような機能を持つオブジェクトや
便利機能等があったら教えていただけませんか。
(一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼
び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド
等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。
尚、私はWindowsMe+エクセル2000でVBAを作成しています。
実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい
ます。
No.4ベストアンサー
- 回答日時:
考え方としてですが
ループとIFでのチェックではなく、
毎日一回、指定時刻に実行なら
1.初回は開始時に、現在時刻から逆算して
開始時間までの秒数を設定
2.次回からは、開始時刻がきた時、起動と同時に
次の開始時刻を計算してセット
処理したらwaitして次回を待つ。
という形にしてループとIFでの時刻監視を
一切やめてしまうことをおすすめします。
#1さんのものでも同じだと思いますが
書かれたコードを単独で実行した時には
負荷はそれほどではないと思います。
OnTimeメソッドのループは不要だと思います。
開始時刻をセット済みなので。
時刻をセットして、監視の処理(ループ)
をはずす、という処理へ変更できませんか。
質問の内容と違っていましたらお手数ですが
質問ください。
この回答への補足
kenken0001さん、ありがとうございます。
kenken0001さんのおっしゃることは、
Dim i as Integer
for i=1 to 365
... ’次回実施時刻の計算
~OnTime~ 又は~Wait~ ’処理の実行
...
next
という意味でしょうか。これなら、1年間は動き続けますね。この考え方は
思いつきませんでした。
それとも、~OnTime~ 又は~Wait~は、時刻設定をすると、ループでまわ
さなくても何度でもステートメントを動作するのでしょうか。
もしまたここをご覧になって、私の解釈に間違いがあったら、教えていただ
けませんでしょうか。
それから、やはりVBAでタイマーコントロールは使えないのでしょうか。
No.5
- 回答日時:
補足に書いていただいたものは
その通りです。
365だと1年しか動きませんので
カウンタiをリセットして
いつまでもループする方が良いのではないでしょうか。
for i=1 to 2
’次回実施時刻の計算・セット
~OnTime~ 又は~Wait~ ’処理の実行
...
i=0
next
予定では、次回まではウェイト状態で
待っていて時間が来るとその度に動くと思います。
VBの知識が無いのでタイマーコントロールが
分かりません。
Private Sub Timer1_Timer()
Label1.Caption = Time
End Sub
VBではこういう書き方があるようですが
個人的な理解ですが
Excelは、オブジェクトである
シートやフォームに対して
イベントを設定する考え方なので
タイマーというものが
無い(今は)のではないかと思います。
シートを開いた時や
マクロがキックされた時など
実体のあるものだけで
時間を扱わない(扱えない)
のでしょうか??
便利そうな機能なので勉強になりました。
将来VBをやる時に使ってみます。
Excel97なので以降のバージョンでは
あるのかもしれませんし
わたしが知らないだけかもしれません。
不勉強のため、確かなことを書けず
申し訳ありません。
何か分かったら教えて下さい。
がんばって下さい。
ではでは。
takao_kwさん、kenken0001さん、ありがとうございました。
勉強になりました。
始めは、無限ループの中でIF文をつかって時刻判定をしていたので、
グルグルまわってしまい、CPUパワーをフルに使っていたようです。
ということで、~OnTime~ 又は~Wait~構文使用時の待ち時間中に
どの位CPUパワーを使うかどうかは未確認ですが、皆さんから教えて
いただいたことを解決の一方法として、検討してみます。
No.3
- 回答日時:
下のものでも結果は同じでしょうか。
待ち時間 = InputBox("待ち時間(秒)", "題名", "5")
開始 = TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 待ち時間)
Application.Wait 開始
Nowで時刻を取得、開始時刻を秒単位で算定
で変更して使えませんか。
No.1
- 回答日時:
下記は11時22分33秒に『時間です』と表示するモジュールです。
こういう意味でよろしいのですか?
Sub DUMMY()
指定時刻 = TimeValue("11:22:33")
Application.OnTime TimeValue(指定時刻), "DUMMY_MODULE"
End Sub
Sub DUMMY_MODULE()
MsgBox "時間です"
End Sub
この回答への補足
takao_kwさん、ご回答ありがとうございます。
エクセルVBAのOnTimeメソッドも試してみましたが、
これを実行すると、実行部分(プロシジャ)を実行するまで、
待機時間中はCPUがフル稼働します。
また、毎日一定時刻に決まったプロシジャを実行しようとすると、
OnTimeメソッドをループでまわす必要があります。本当は、VBの
タイマーコントロールを使ってこの処理をしたかったのですが、
エクセルVBAにタイマーコントロールが見当たらなかったので、
ここで私は無限ループを使ったのですが、ここでもCPUがフル稼働
してしまいます。
このプログラムは24時間稼動のサーバーで実行させて、一定
時刻にデータベースからデータを抽出してデータ処理をさせる
もので、サーバーは他のサービスも提供しているので、CPU負荷
をさげてVBAを実行させたいのです。他に手はありませんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
- Excel(エクセル) エクセルのセル値に対応してマクロを実行する方法を教えてください セルA1が「1」の時にマクロ名「マク 2 2022/06/19 18:45
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- JavaScript javascript で外部サイトにデータ入力させて自動でボタンを押すことは可能ですか? 1 2023/01/30 16:23
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
- Visual Basic(VBA) エクセルVBA エクセルを開いた後に編集可能な状態にするには? 2 2023/06/14 11:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessの重複なしのカウントの...
-
電線等の入線潤滑材の代用品っ...
-
8時間以上だったら1時間マイ...
-
[MS Access]クエリで変換 hhmm...
-
時刻と時間を明確に区別したい...
-
Excelで90分後を自動計算
-
SL(DL)やまぐち号 津和野行きの...
-
トヨタの配当っていくらになる...
-
サンライズエクスプレスの通過時刻
-
貨物列車の時刻 (上越線)
-
エクセルマクロで時間計算のエ...
-
午後11時59分って何時? 昼の11...
-
PC間の時刻同期コマンドが失敗...
-
標準時間と117の時間の10秒のずれ
-
VBA で PCの 時刻を サーバー時...
-
特急や新幹線の領収書から 乗っ...
-
前日に切符を購入した際領収書...
-
羽田空港第3ターミナルの送迎用...
-
JR日豊本線普通列車にトイレは...
-
隣の指定席が空いてので移る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの重複なしのカウントの...
-
午後11時59分って何時? 昼の11...
-
電線等の入線潤滑材の代用品っ...
-
[MS Access]クエリで変換 hhmm...
-
8時間以上だったら1時間マイ...
-
iPhoneのボイスメモ
-
[h]:mm形式→10進法への変換
-
標準時間と117の時間の10秒のずれ
-
エクセルで早朝深夜労働時間を...
-
時間帯別作業時間についてエク...
-
SL(DL)やまぐち号 津和野行きの...
-
エクセルのNow関数の時刻の更新...
-
PC間の時刻同期コマンドが失敗...
-
わざとずらした時間調整
-
時刻と時間を明確に区別したい...
-
VBA で PCの 時刻を サーバー時...
-
サンライズエクスプレスの通過時刻
-
エクセルの関数で教えてください。
-
京都に223系を入れたのは、221...
-
フリー wifi でwindowsの時刻が...
おすすめ情報