Application.ontime代码不运行

时间:2015-02-17 16:34:42

标签: excel vba excel-vba

我已经在这里做了一些研究,试图让这个代码运行,但我仍然遇到问题。

我正在尝试在设定的时间运行宏。事实上,它是一些不同时代的宏。然后,该宏将一个单元格块复制到工作表上的不同区域。

我将无法使用Windows调度程序,因此我尝试这样做。我收集没有调度程序,我将不得不从一个按钮运行宏。因此,我的第一个子是这个(注释按钮位于数据的单独表格上)

Sub Call_save()

    Call Sheets("Dashboard").8amsave

    Application.OnTime TimeValue("08:10:00"), "Call_8amsave"

    Call 9amsave

    Application.OnTime TimeValue("09:10:00"), "Call_9amsave"

    Call 10amsave

    Application.OnTime TimeValue("10:10:00"), "Call_10amsave"

End Sub

此按钮用于在预定时间运行潜艇。它调用的潜艇是:

Sub 8amsave()
Dim current_data As Variant

    current_data = Worksheets("Dashboard").Range("S6:V22").Value
    Worksheets("Dashboard").Range("B33:E49").Value = current_data


End Sub

Sub 9amsave()
Dim current_data As Variant

    current_data = Worksheets("Dashboard").Range("S6:V22").Value
    Worksheets("Dashboard").Range("B54:E70").Value = current_data


End Sub

Sub 10amsave()
Dim current_data As Variant

    current_data = Worksheets("Dashboard").Range("S6:V22").Value
    Worksheets("Dashboard").Range("B75:E91").Value = current_data


End Sub

现在,当我运行初始按钮时,它会立即运行所有潜艇,并立即将销售复制到正确的位置。这对我来说真的不是问题。但是,在预定的时间我得到一个错误,说无法运行宏...无法找到它或者表无法运行宏...或类似的东西。

我失踪了,有什么令人眼花缭乱的明显吗?我一直在努力工作,因此我的VBA知识相当有限。正确方向上的一点很棒。

1 个答案:

答案 0 :(得分:1)

您的OnTime语句似乎也引用了不存在的过程名称,即Call_8amSave而不是8amsave。另请注意,过程名称不能以数字开头(例如8amsave),并且此代码甚至不应该编译,更不用说执行了。

重命名您的程序,使它们与OnTime语句中的调用相匹配,并且是法律允许的程序名称,例如:Sub Call_8amSave等。

此外,OnTime属性一次只能有一个过程,因此您不能再设置3个未来时间,您必须按顺序设置它们。因此,在上午8点程序中为上午9点设置OnTime,等等。

Option Explicit

Sub Call_save()

    Application.OnTime TimeValue("08:10:00"), "Call_8amsave"

End Sub
Sub Call_8amsave()

    With Worksheets("Dashboard")
        .Range("B33:E49").Value = .Range("S6:V22").Value
    End With

    Application.OnTime TimeValue("09:10:00"), "Call_9amsave"
End Sub

Sub Call_9amsave()

    With Worksheets("Dashboard")
        .Range("B54:E70").Value = .Range("S6:V22").Value
    End With

    Application.OnTime TimeValue("10:10:00"), "Call_10amsave"
End Sub

Sub Call_10amsave()

    With Worksheets("Dashboard")
        .Range("B75:E91").Value = .Range("S6:V22").Value
    End With


End Sub