No.2ベストアンサー
- 回答日時:
こんにちは。
>VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか?
Excel VBAの場合は、そういう機能に対するものは、おそらくはクラスとは言わないですが、厳密にはありませんね。
>これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。
それは出来ますが、ワークシートの作業に対して、完全にバックで動かし、影響をなくすのは難しいです。実際は、以下でいう、'指定時刻に実行するマクロ名' マクロの内容にも依存してきます。このマクロ側が、どういう性格なものか分からないと、ちょっと難しいですね。ここのカテゴリで一番良くある例としては、楽天のRSSがあります。
お礼側に出ていコードに手を加えてみました。
'おそらく、標準モジュールのほうがよいでしょう。
Private MacroStop As Boolean
Sub 指定時刻にマクロを実行する()
Dim myWait As Integer
Dim 指定時刻 As Date
myWait = 5 '秒
指定時刻 = Now + TimeSerial(0, 0, myWait)
If MacroStop = False Then
Application.OnTime 指定時刻, "指定時刻にマクロを実行する"
Call 指定時刻に実行するマクロ名
Else
MacroStop = False
End
End If
End Sub
Sub 指定時刻に実行するマクロ名()
Cells(1, 1).Value = Cells(1, 1).Value + 1
End Sub
Sub タイマー停止()
MacroStop = True
End Sub
No.1
- 回答日時:
こんにちは。
私は、ずいぶん、そのコードは書いたけれど、かなり難問のひとつだと思います。理由は、メモリの占有率にあるのですね。タイマーイベントは、VB6 のもので、Excelにはありません。
ですから、Excelでは、どうしても、思ったものが作れないのです。ある方は、APIタイマーを使う人がいますが、責任が持てません。
まず、簡易型を紹介します。1秒ごとに数値が増えるようになっています。ただし、問題点はあります。
Private Sub CommandButton1_Click()
Dim Start As Date
Dim NT As Date
Dim OT As Date
Dim Cnt As Long
On Error GoTo EndLine
'Esc キーでマクロを抜ける
Application.EnableCancelKey = xlErrorHandler
Start = Time
Cnt = 1
Do
NT = Time
If NT > OT Then
Cells(1, 1).Value = Cnt
Cnt = Cnt + 1
OT = NT
End If
Loop While NT < Start + TimeValue("00:10:00") '10分まで
EndLine:
End Sub
ご回答有難うございます。
VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか?
それがあれば、スレッド内で時間を現在の時間を見ながら処理が行えるように思えるのですが。
下記はググッて見つけた指定時間にマクロ実行するサンプルコードです。
これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。
Sub 指定時刻にマクロを実行する()
指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1
待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2
Application.OnTime TimeValue(指定時刻), _
"指定時刻に実行するマクロ名", _
TimeValue(待ち時間)
End Sub
Sub 指定時刻に実行するマクロ名()
' 'ここへマクロを記入
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
モジュール内のマクロを全て実...
-
マクロ 実行ボタンを押さずに...
-
Excel VBA のdebug(F8キー) が...
-
EXCELのセルへ、デジタル時計を...
-
Excelを開いた時に表示さ...
-
Wordで「原稿用紙○枚」を換算す...
-
エクセル グラフの軸の最小値最...
-
ワードからエクセルへ貼り付け...
-
複数ファイルにある特定のシー...
-
エラーになってないのにVBA...
-
EXCEL2000 VBA マクロ実行中に...
-
Excelのブック共有機能の変更箇...
-
Excel文字列中の太字(Bold)部分...
-
実行をキー設定できるキーボー...
-
TeraTermのマクロについて
-
ワードで画像を自動で挿入する方法
-
エクセルのマクロ機能で前のシ...
-
【エクセル】 キーを押すと、...
-
EXCEL VBA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
マクロ 実行ボタンを押さずに...
-
Excel VBA のdebug(F8キー) が...
-
複数ファイルにある特定のシー...
-
EXCELのセルへ、デジタル時計を...
-
Excelを開いた時に表示さ...
-
エラーになってないのにVBA...
-
エクセル グラフの軸の最小値最...
-
ワードからエクセルへ貼り付け...
-
エクセルのマクロ機能で前のシ...
-
Wordの画面を左右にスクロール...
-
モジュール内のマクロを全て実...
-
Wordで「原稿用紙○枚」を換算す...
-
Excelの改ページ 同シート内で...
-
EXCEL 複数のシートの同一の位...
-
Accessのクエリを実行するショ...
-
エクセルで複数のシートをまと...
-
Excelマクロでオプションボタン...
-
【Excel VBA】エラー番号400
-
《エクセル2000》非表示になっ...
おすすめ情報