- ベストアンサー
Excel2003 VBAタイマーでマクロ実行エラー
- Excel2003のVBAでタイマーを組み合わせてマクロを実行したいが、エラーメッセージが表示される。
- マクロが見つからないエラーメッセージが表示される。
- どの部分を修正すれば良いかわからない。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どちらかというと、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
その他の回答 (2)
- jcctaira
- ベストアンサー率58% (119/204)
Record1がThisWorkbookクラスにある場合、以下の通り変更してください。 Application.OnTime 指定時刻, "Record1" ↓ Application.OnTime 指定時刻, "ThisWorkbook.Record1"
お礼
エラーでなくなりました。 ありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
Sub Record1()を標準モジュールに入れてください。
お礼
Sub Record1()を標準モジュールにいれたらエラーがなくなりました。 ありがとうございます。
お礼
私のやりたい事のマクロをバッチリ書いて頂き大変感謝してます。 マクロを絶えず起動していてもPC重たくならずに快適です。 とても勉強になりました。 ありがとうございます。