| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как реализовать паузу в коде ВБА

Как реализовать паузу в коде ВБА

Ответ
Поиск в этой теме
Непрочитано 08.09.2010, 18:02 #1
Как реализовать паузу в коде ВБА
ssn
 
Инженер проектировщик (раздел ТМ - фриланс)
 
Геленджик
Регистрация: 06.12.2003
Сообщений: 1,794

Необходимо в код встроить паузу.
Нашел какой то вариант через активацию библиотек, но почему то не работает.
подскажите пожалуйста рабочий код.
Просмотров: 10120
 
Непрочитано 09.09.2010, 09:19
#2
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Код с реализованой паузой есть в этой теме http://forum.dwg.ru/showthread.php?t=43625
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 09.09.2010, 11:03
#3
asd

всё понемногу
 
Регистрация: 05.03.2008
Украина, Одесса
Сообщений: 215


Через API. Проверено в офисе2007

Код:
[Выделить все]
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
----------------------------------------------------------------------
Private Sub Кнопка1_Click()
    Sleep 10000
    MsgBox ("123")
End Sub
asd вне форума  
 
Автор темы   Непрочитано 09.09.2010, 11:32
#4
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


вот почему то последний вариант в автокаде не работает. по крайней мере у меня.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) - вот это принимать не хочет
ssn вне форума  
 
Непрочитано 09.09.2010, 11:43
#5
asd

всё понемногу
 
Регистрация: 05.03.2008
Украина, Одесса
Сообщений: 215


Может кто-то подскажет. Об автокаде знаю только то, что он существует.

Эта строчка должна быть в самом верху модуля. У меня (в Аксессе) это выглядит так:

Код:
[Выделить все]
Option Compare Database
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
---------------------------------
Private Sub Кнопка0_Click()
....
asd вне форума  
 
Непрочитано 09.09.2010, 12:54
#6
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


А что OnTime, тоже в акаде не работает?
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Автор темы   Непрочитано 09.09.2010, 16:25
#7
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


пока OnTime не попробовал.
теоритически должно. только моего знания ВБА не хватает для понимания как тот код работает.
ssn вне форума  
 
Непрочитано 09.09.2010, 23:50
#8
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Посмотри код, запуская макрос whate, увидишь сообщение сколько ждал секунд, проверял в Excel. Думаю разберёшься.
Код:
[Выделить все]
Public Const cRunIntervalSeconds = 8 'Время в секундах
Public Const cRunWhat = "qwerty"
Public RunWhen As Double
Sub whate()
 RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=True
End Sub
Sub qwerty()
On Error Resume Next
s = "Ты ждал " + Format(cRunIntervalSeconds) + " секунд)"
a = MsgBox(s, vbOKOnly)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=False
End Sub
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Автор темы   Непрочитано 10.09.2010, 09:00
#9
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


допустим у меня есть код, в который надо вставить паузу.
1. Разместить эту конструкцию не в моём коде и из моего кода запустить whate, потом запустится qwerty. а как мне вернуться обратно в мой код....
2. нельзя ли сделать, что бы в "Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat,Schedule:=True" по достижению нужного времени выполнялась не процедура, а допустим была ссылка на метку в коде, ну или просто движение далее по коду....

Последний раз редактировалось ssn, 10.09.2010 в 09:06.
ssn вне форума  
 
Непрочитано 11.09.2010, 13:44
#10
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Насколько я понял, OnTime - единственное нормальное решение для реализации паузы, но по окончании паузы происходит именно запуск нового макроса, если хочешь продолжить выполнение текущего попробуй такую конструкцию:
Код:
[Выделить все]
Private Declare Function WaitMessage Lib "user32.dll" () As Long
Sub whate()
Const cRunIntervalSeconds = 8
Start = Timer
  Do While Timer < Start + cRunIntervalSeconds
  WaitMessage
   DoEvents
  Loop
s = "Ты ждал " + Format(cRunIntervalSeconds) + " секунд)"
a = MsgBox(s, vbOKOnly)
End Sub
Но этот метод использовать в крайних случаях, т.к. он ограничивает возможности пользователя.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 11.09.2010, 19:23
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Вот примеры использования таймеров (может будет интересно почитать).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.09.2010, 21:27
#12
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ну и зачем все это? Чтоб юзер чай с кофэм пил почаще?
gomer вне форума  
 
Непрочитано 12.09.2010, 22:44
#13
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Цитата:
Сообщение от gomer Посмотреть сообщение
Ну и зачем все это? Чтоб юзер чай с кофэм пил почаще?
Скорее наоборот, для всякого рода напоминалок.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 13.09.2010, 00:03
#14
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от KronSerg Посмотреть сообщение
Насколько я понял, OnTime - единственное нормальное решение для реализации паузы, но по окончании паузы происходит именно запуск нового макроса, если хочешь продолжить выполнение текущего попробуй такую конструкцию:
Код:
[Выделить все]
Private Declare Function WaitMessage Lib "user32.dll" () As Long
Sub whate()
Const cRunIntervalSeconds = 8
Start = Timer
  Do While Timer < Start + cRunIntervalSeconds
  WaitMessage
   DoEvents
  Loop
s = "Ты ждал " + Format(cRunIntervalSeconds) + " секунд)"
a = MsgBox(s, vbOKOnly)
End Sub
Но этот метод использовать в крайних случаях, т.к. он ограничивает возможности пользователя.
Работает как часы (А2009)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 13.09.2010, 08:40
#15
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


да не... нужно это вот для чего - програмно печатаю, и видимо скорость отсылки заданий рубит принтер, он не отвечает, и соответственно программа встаёт по ошибке.
хочу внедрить паузу, хотя бы 1 секунду в отсылках заданий
ssn вне форума  
 
Непрочитано 13.09.2010, 08:52
#16
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Ну раз пауза нужна всего в секунду, тогда твой вариант #10
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 13.09.2010, 19:42
#17
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Есть событие EndPlot... Может его можно использовать?
gomer вне форума  
 
Автор темы   Непрочитано 22.09.2010, 20:54
#18
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


спасибо. код из поста 14 очень даже заработал.
ситуация и вправду выпрямилась.
это просто принтер кенен 660F. после каждой печати он посылает сообщение о том, что пора менять печатающуюю голову, что мол качество печати самому ему не нравится.
может конечно можно это отключить где нить в настройках, но я не нашел. сервис говори - нормальное дело, раз в год голову менять. практически по таймеру. но блин, 15 тыров голова, набор чернил ещё 15. и чернильница куда оно сплёвывает лишнее.. тоже денег стоит...
ssn вне форума  
 
Непрочитано 22.09.2010, 21:19
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от ssn Посмотреть сообщение
денег стоит...
Кто вам дохтор... надо было думать, что берете!
gomer вне форума  
 
Автор темы   Непрочитано 22.09.2010, 23:21
#20
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


дык я же говорю, он гад денег просит на ровном месте. все номрально печатает, все линии чёткие... все читается.. а ему хочется под замену голову. ну предательство же...
ssn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как реализовать паузу в коде ВБА

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск