アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
----------------------------------------------------------------------


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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/10/04 22:26

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



Application.OnTime 指定時刻, "Record1"
     ↓
Application.OnTime 指定時刻, "ThisWorkbook.Record1"
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/10/04 22:22

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2010/10/04 22:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!