2015-02-17 2 views
0

Я провел здесь немного исследований, чтобы попытаться запустить этот код, но у меня все еще есть проблемы.Код приложения.контакт не работает

Я пытаюсь запустить макрос в заданное время. На самом деле это несколько макросов в разное время. Затем этот макрокоманда копирует блок ячеек в другую область на листе.

Я не смогу использовать планировщик окон, поэтому я пытаюсь сделать это таким образом. Я собираюсь без планировщика, мне придется запускать макрос с помощью кнопки. Поэтому мой первый суб это (кнопка примечание на отдельном листе к данным)

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 довольно ограничены. Точка в правильном направлении была бы большой.

+2

Этот код даже не компилируется. Вы не можете запустить имя процедуры с помощью числового. –

+0

Ваши инструкции OnTime также, как представляется, ссылаются на имена процедур, которые не существуют, то есть 'Call_8amSave', в отличие от' 8 amsave'. Переименуйте свои процедуры так, чтобы они соответствовали вызовам в операторе OnTime', и он должен работать. Например, 'Sub Call_8amSave' и т. Д. –

+0

Вызов' Call' совершенно не нужен - если вы хотите выполнить 'MyProcedure', просто скажите' MyProcedure', это вызов процедуры. Операция 'Call' является реликтом старых, старых версий языка, которые остались там для обратной совместимости ... наряду с ключевым словом' Let' для присваивания значений и ключевым словом 'Rem' для ... комментариев. –

ответ

1

Ваши заявления OnTime также представляют собой ссылки на имена процедур, которые не существуют, то есть Call_8amSave, в отличие от 8amsave. Также обратите внимание, что имена процедур не могут начинаться с числовых (например, 8amsave), и этот код не должен компилироваться, а тем более выполнять.

переименованиее процедуры так, чтобы они соответствовали вызовам в OnTime заявлении, и юридически допустимые имена процедур, как: Sub Call_8amSave и т.д.

Кроме того, OnTime свойство может иметь только одну процедуру в то время, так вы не можете установить 3 будущих раза, вы должны установить их последовательно. Итак, установите OnTime для сохранения 9 часов во время процедуры 8am и т. Д.

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

Спасибо за помощь Дэвид. Я включил этот код, но я все еще получаю ошибку. Кажется, что его невозможно найти «Sub Call_8amsave()» – lordf

+0

Не удается запустить макрос «Z: \ Test sheet new.xlsm»! Call_8amsave. Макрос может быть недоступен в этой книге или все макросы могут быть отключены. – lordf

+0

Вам нужно для включения имени модуля, например 'z: \ my workbook.xlsm!Module_Name.Procedure_Name' –