こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが

Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが、以下のエラーメッセージが出ました。

マクロ "C:\aaa\Timer.xls'!Record1'が見つかりません。


マクロは、Timer.xlsブックのThisWorkbookに記述しています。



----------------------------------------------------------------------
Sub timer1()
指定時刻 = TimeValue("09:00:00")
終了時刻 = TimeValue("11:00:00")
Application.OnTime 指定時刻, "Record1"
End Sub

----------------------------------------------------------------------
Sub Record1()
Dim sh1, sh2

If TimeValue(Now) >= 終了時刻 Then '終了時刻になら終わる
MsgBox "終了時刻になりました。"
Application.CutCopyMode = False
Exit Sub
End If


Set sh1 = Worksheets("1")
Set sh2 = Worksheets("2")

sh1.range("G5:G506").Copy 'コピー
sh2.range("Q5:Q506").PasteSpecial Paste:=xlValues
Selection.Offset(0, 2).Select '2行ずらす
指定時刻 = Now + TimeValue("00時05分00秒") '5分後
Application.OnTime 指定時刻, "Record1"

End Sub
----------------------------------------------------------------------


どこを直せばよろしいのでしょうか?
よろしくお願いします。

投稿日時 - 2010-10-03 18:45:48

QNo.6225287

暇なときに回答ください

質問者が選んだベストアンサー

どちらかというと、Timer1() は、標準モジュールで Auto_Open() のほうがよいです。
以下を参考にしてみてください。

たぶん、DDEかOLEでデータを入れていると思いますが、データが入ってくる時とぶつかることを考えたら、Time Lapse は30秒でよいからいれたほうがよいですね。

>Selection.Offset(0, 2).Select '2行ずらす

これは意味が分かりません。
おそらく、2列置きにデータを入れると解釈しました。

以下のコードは、深夜0時をまたぐ場合には向いていません。Now にするか、TimeSerial の部分にDate を加えてください。

'ThisWorkbookよりも、標準モジュールのほうが、このようなコードでは効率がよいです。

Dim 指定時刻 As Date '←モジュールの先頭に入れる
Dim 終了時刻 As Date
Dim i As Long
Sub timer1() 'Auto_Open()
  指定時刻 = TimeSerial(09, 0, 0)
  終了時刻 = TimeSerial(11, 0, 0)
  Application.OnTime 指定時刻, "Record1", 指定時刻 + TimeSerial(0, 0, 30)
End Sub

Sub Record1()
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
  If Time >= 終了時刻 Then '終了時刻になったら終わる
  MsgBox "終了時刻になりました。", 64
  Set sh1 = Nothing: Set sh2 = Nothing
  Exit Sub
 End If
 'コピー列を2列ずつ動かす。
 sh2.Range("Q5:Q506").Offset(, i * 2).Value = sh1.Range("G5:G506").Value
 ''sh2.Range("Q5:Q506").Value = sh1.Range("G5:G506").Value 'そうでないならこちらを使う
 i = i + 1
 指定時刻 = Time + TimeSerial(0, 5, 0) '5分後
 Application.OnTime 指定時刻, "Record1", 指定時刻 + TimeSerial(0, 0, 30)
End Sub

投稿日時 - 2010-10-03 20:57:26

お礼

私のやりたい事のマクロをバッチリ書いて頂き大変感謝してます。
マクロを絶えず起動していてもPC重たくならずに快適です。
とても勉強になりました。
ありがとうございます。

投稿日時 - 2010-10-04 22:26:25

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

Record1がThisWorkbookクラスにある場合、以下の通り変更してください。

Application.OnTime 指定時刻, "Record1"
     ↓
Application.OnTime 指定時刻, "ThisWorkbook.Record1"

投稿日時 - 2010-10-03 19:51:02

お礼

エラーでなくなりました。
ありがとうございます。

投稿日時 - 2010-10-04 22:22:50

ANo.1

Sub Record1()を標準モジュールに入れてください。

投稿日時 - 2010-10-03 19:35:32

お礼

Sub Record1()を標準モジュールにいれたらエラーがなくなりました。
ありがとうございます。

投稿日時 - 2010-10-04 22:21:46

あなたにオススメの質問