Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
1

Аналог Application.OnTime в OutLook

13.02.2015, 17:14. Просмотров 2097. Ответов 8
Метки нет (Все метки)

нужен аналог функции Application.OnTime в Outlook, по аналогии Excel
такое решение подходит так как грузит зря процессор
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Sub MainF()
Dim t As Date, t1 As Date
  t = VBA.Now
  t1 = t + VBA.TimeValue("00:00:30")
 Do While t < t1
  t = VBA.Now
  DoEvents
 Loop
 Call MainF
End Sub
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2015, 17:14
Ответы с готовыми решениями:

Application.Ontime и процедура с параметрами
Добрый день. Хочу вызвать процедуру BlinkingCell через каждые 3 секунды. Проблема в том, что...

Application.onTime повторно вызывает открытие документа
Добный день. Целый день бьюсь над этой проблемой. Суть в том, что скорее всего (это я уже методом...

Перевод функций Application.OnTime и Format из VBA в VBS
хочу перевести в vbs файл код из vba excel. Private Sub Workbook_Open() ' если будет файлик...

Application.OnTime: Удалить строку во время, в ней указанное
В excele бд, в 9 столбце которой находиться время(везде разное). Нужно, чтобы макрос, в указанное в...

Возможно ли использование более одной Application.OnTime в VBA MS Word
Добрый день! Возник такой вопрос - возможно ли использование более одной Application.OnTime в...

8
Димит
88 / 35 / 14
Регистрация: 03.11.2010
Сообщений: 429
13.02.2015, 21:03 2
API? нечем проверить:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
 
 
Public Sub mytimer()
    SetTimer Application.hwnd, 0, 2000, AddressOf TimerProc 'старт таймера на 2000мсек
    Beep
End Sub
 
Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    KillTimer Application.hwnd, 0
    MsgBox "gbg"
End Sub
0
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
15.02.2015, 15:11  [ТС] 3
Димит,
Как здесь запустить макрос?
0
Димит
88 / 35 / 14
Регистрация: 03.11.2010
Сообщений: 429
16.02.2015, 19:32 4
Как обычно. Это пример, запустите макрос через панель VisulBasic (выполнить макрос) mytimer.
Услышите биип, через 2 сек выпадет сообщение MsgBox "gbg".
Ни чего более дельного Вам показать не могу, поскольку и ваш пример не рабочий.
(судя по коду, происходят самозапуск пустого макроса каждые 30 сек
Кстати, если нужно периодическое срабатывание, то в моём коде уберите KillTimer. Это остановка таймера,
сделайте её в конце работы.
0
16.02.2015, 19:32
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
17.02.2015, 18:09  [ТС] 5
Димит, спс
0
Night Ranger
Заблокирован
17.02.2015, 18:48 6
Вот нормальный пример, в интернете скопипастил только кнопки








остальное сам написал:

Код модуля, не важно с каким именем главное чтобы модуль:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Dim iTmr&
 
Sub StartTimer()
    [b1].NumberFormat = "[h]:mm:ss;@"
    iTmr = SetTimer(0, 0, 100, AddressOf TimerProg)
End Sub
 
Sub TimerProg(ByVal hWnd As Long, ByVal msg As Long, ByVal idEvent As Long, ByVal TimeSys As Long)
    On Error GoTo errr
    [a1].Value = [a1].Value + 1
    Debug.Print TimeSys
    [b1].Value = Format(Time, "h:m:s")
errr:
End Sub
 
Sub EndTimer()
    KillTimer 0, iTmr
End Sub
0
Миниатюры
Аналог Application.OnTime в OutLook  
Вложения
Тип файла: xls Timer.xls (25.5 Кб, 13 просмотров)
Night Ranger
Заблокирован
17.02.2015, 21:44 7
В событии книги нужно было еще поставить это
Visual Basic
1
2
3
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    EndTimer
End Sub
это чтобы среда програмирования не вылетала по закрытию

И таймер бы надо убивать перед пуском нового

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Dim iTmr&
 
Sub StartTimer()
    [b1].NumberFormat = "[h]:mm:ss;@"
    If iTmr Then KillTimer 0, iTmr  'Убить старый таймер
    iTmr = SetTimer(0, 0, 100, AddressOf TimerProg)
End Sub
 
Sub TimerProg(ByVal hWnd As Long, ByVal msg As Long, ByVal idEvent As Long, ByVal TimeSys As Long)
    On Error GoTo errr
    [a1].Value = [a1].Value + 1
    [b1].Value = Format(Time, [b1].NumberFormat)
errr:
End Sub
 
Sub EndTimer()
   iTmr = KillTimer(0, iTmr)
End Sub

Цитата Сообщение от Димит Посмотреть сообщение
Application.hwnd
Димит заметьте что я ставлю 0 так-как оконный hwnd не реагирует на сообщения TimerProg
от того, если применить к макросам, запустится, но не остановится
пробовал уже, через переменную (msg) ловить сообщение WM_CLOSE
не получается, если сделать хук то оно ловится, но не в таймере почемуто
0
yuran1174
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 97
23.06.2015, 20:02 8
Цитата Сообщение от Night Ranger Посмотреть сообщение
В событии книги нужно было еще поставить это
У меня вопрос. Как этот код переделать под 64битную версию?
Visual Basic
1
2
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
0
Night Ranger
Заблокирован
24.06.2015, 14:06 9
Всё просто, поищите в поисках *API под 64 бит* "VB API 64" ну типо того ...

там декларации немного отличаются, не помню точно.. помоему слева дописанно еще одно ключевое слово, что и будет для компа понятно что вы обращаетесь 64-разрядной API
0
24.06.2015, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2015, 14:06

Не удается вызвать процедуру Application.OnTime в модуле объекта, как исправить?
привет всем, при нажатии кнопки вызывается процедура CommandButton3_Click(), которая должна...

Аналог Excel-метода "OnTime"
Здравствуйте. Что можно использовать вместо Excel-метода &quot;OnTime&quot;, чтобы запускать нужную...

Маленькое продолжение темы "Аналог Excel-метода "OnTime"" или про многопоточность
Коллеги, хочу добавить несколько слов ... (раз уж речь зашла про 2003 офис) Комментарий: на счет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru