2015-08-24 4 views
0

У меня есть проблема с куском кода:Application.OnTime не работает с UserForm

Private Sub cyclic() 

Static i As Integer 
i = i + 1 

Cells(i, 11) = i 
Open source For Append As #1 
Write #1, Cells(i, 11) 
Close #1 

Application.Wait (Now + TimeValue("0:00:01")) 

Open source For Input As #1 
Do While Not EOF(1) 
Input #1, x1 
Loop 
Cells(i, 1) = x1 
Close #1 

Application.OnTime Now + TimeValue("00:00:03"), "cyclic" 

End Sub 

Это довольно много, как это. Он отлично работает с уровнями макросов alt + f8, но когда я хочу использовать его с Userform, просто щелкнув CommandButton, он не будет периодическим с интервалом в 4 секунды, но сделает только один цикл. Если я хочу заполнить больше ячеек моими номерами, я должен щелкнуть по щелчку мыши и нажать кнопку проклятия. Я бы хотел, чтобы это было более автоматическим.

Ниже приведен фрагмент кода Userform, который я использую для вызова циклической функции. Он должен повторять, но это не так.

Private Sub cbCyclic_Click() 
cyclic 
End Sub 

Что я делаю неправильно?

ответ

0

Процедура, относящаяся к Application.OnTime, должна находиться в стандартном модуле кода. Он не может быть расположен в модуле класса, а пользовательские формы - это специализированные классы.

Процедура, вызываемая в стандартном модуле кода, должна быть общедоступной.

Ваш лучший выбор - переместить циклический() в стандартный модуль кода и сделать его общедоступным. Процедура события нажатия кнопки команды в пользовательской форме должна работать без изменений.

+0

Спасибо, ты спас мне жизнь. Это сработало :) – Pawel