Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 11:40   #1
iamaxl
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 14
По умолчанию связанные процедуры в Excel

здравствуйте, есть вот такой код. при наступлении определенного времени выполняется процедура box, после нее должна выполняться процедура box2, не могу понять, как сделать переход. через main - не работает. спасибо
Sub main()
itime
box
box2
End Sub

Sub itime()
Application.OnTime _
earliesttime:=TimeValue("10:40"), _
procedure:="box"
Application.OnTime _
earliesttime:=TimeValue("10:45"), _
procedure:="box"
End Sub

Sub box()
MsgBox ("box")
End Sub

Sub box2()
MsgBox ("box2")
End Sub
iamaxl вне форума Ответить с цитированием
Старый 27.08.2009, 11:42   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Так?
Код:
Sub main()
    itime
End Sub

Sub itime()
    Application.OnTime TimeValue("10:40"), "box"
    Application.OnTime TimeValue("10:45"), "box"
End Sub

Sub box()
    MsgBox ("box")
    box2 ' запуск второй процедуры
End Sub

Sub box2()
    MsgBox ("box2")
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 27.08.2009, 15:26   #3
iamaxl
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 14
По умолчанию

спасибо, работает. а вот скажите, если при входе в процедуру с помощью application on time в процедуре начинает выполняться цикл и условия его прекращения не выполняются до наступления следующего входа в процедуру с помощью application on time, то что происходит - цикл продолжает выполняться или принудительно исполняется процедура application on time.
iamaxl вне форума Ответить с цитированием
Старый 27.08.2009, 15:37   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
что происходит - цикл продолжает выполняться или принудительно исполняется процедура application on time.
Запускается вторая копия процедуры - и, пока не закончит работу цикл из 2-й процедуры, 1-й цикл стоит "на паузе".
Как только выполнение второй процедуры закончилось, продолжает выполняться первая.

PS: Больше чем уверен, что в Вашем случае использование Application.OnTime неоправданно.
Какой смысл запускать 2 раза одну и ту же процедуру с интервалом 5 минут?
Что это за цикл такой, что ему 5 минут недостаточно?
EducatedFool вне форума Ответить с цитированием
Старый 02.09.2009, 11:20   #5
iamaxl
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 14
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Что это за цикл такой, что ему 5 минут недостаточно?
вот он, этот цикл. не знаю , как реализовать то что мне надо, чтобы работа правильно). пока никто не разобрался. может быть у Вас получится. аpplication.ontime использую, так как не знаю других способов заставить макрос работать в нужное мне время. Спасибо

Sub itime()
Application.OnTime _
earliesttime:=TimeValue("13:40"), _
procedure:="copyPrice" ' идея в том, чтобы процедура copyPrice выполнялась в начале каждой пятиминутки
Application.OnTime _
earliesttime:=TimeValue("13:45"), _
procedure:="copyPrice"

Application.OnTime _
earliesttime:=TimeValue("13:50"), _
procedure:="copyPrice"
End Sub

Public Sub copyPrice() 'тут просто действия над значениями ячеек

demand = Range("d2")

Range("e2").Copy _
Destination:=Range("a8")
initial_capital = Range("d8")
open_price = Range("a8")
amount_of_shares = initial_capital \ open_price '

Range("e8") = amount_of_shares


current_capital = initial_capital - open_price * amount_of_shares

Range("f8") = current_capital
iresidual
End Sub


Sub iresidual()


Range("c8") = Range("d2") * 100 / Range("a8") - 100
residual = [c8]
While (residual > -0.1 And residual <= 0.5)

Range("c8") = Range("d2") * 100 / Range("a8") - 100

residual = [c8]
DoEvents
Wend
'вот здесь проблема, если условия цикла выполняются в течение 5 минут,
'то все нормально, но если residual не принял
' нужного значения за 5 минут, то принудительно исполняется
'следующий вход в Application.ontime,
'необходимо же, чтобы работало в этом случае так:
' цикл продолжается, пока не исполнится условие для выхода, сколь угодно долгое время
' как только это произошло исполняется оставшаяся часть макроса и он опять переходит к
'application.ontime и ждет начала пятиминутки и все по новой.

residual = Range("c8")
If (residual >= 0.5) Then
Range("d8") = Range("e8") * Range("d2") + Range("f8")

End If
If (residual < -0.1) Then
Range("d8") = Range("e8") * Range("d2") + Range("f8")

End If

End Sub
iamaxl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные списки в C++ Rembo Общие вопросы C/C++ 47 11.07.2016 12:45
Связанные формы Jq KEV JavaScript, Ajax 1 28.05.2009 20:03
связанные списки и не только.... owl-ka Microsoft Office Excel 1 11.02.2009 00:27
Связанные таблицы в Аксессе mirawoo Microsoft Office Access 8 12.03.2008 00:13
Не отображаются данные связанные с гл. таблицей? zimmion БД в Delphi 11 27.02.2008 18:50