powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / запуск vba процедуры в заданное время в outlook
6 сообщений из 6, страница 1 из 1
запуск vba процедуры в заданное время в outlook
    #39298973
den_alex_94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Не работает код, выдается ошибка "Compile error: Type mismatch ". Почему это происходит. Делал по инструкции http://citforum.ru/programming/vb/vba_winapi/8.shtml . Интерпретатор ,вроде как, показывает, что ошибка в процедуре starttimer

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As Long, _
        ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Dim t As Long

Public Sub TimerProc(ByVal hwnd As Long, ByVal msg As Long, ByVal idEvent As Long, ByVal TimeSys As Long)

          msg("aaa")
            KillTimer 0, t
           End Sub

Public Sub starttimer()
t = SetTimer(0, 0, 2000, AddressOf TimerProc)
End Sub
...
Рейтинг: 0 / 0
запуск vba процедуры в заданное время в outlook
    #39299005
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
den_alex_94, попробуйте так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, _
        ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As LongPtr

Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
Dim t As LongPtr

Public Sub TimerProc(ByVal hwnd As LongPtr, ByVal msg As LongPtr, ByVal idEvent As LongPtr, ByVal TimeSys As LongPtr)
    MsgBox ("aaa")
    KillTimer 0, t
End Sub

Public Sub starttimer()
    t = SetTimer(0, 0, 2000, AddressOf TimerProc)
End Sub
...
Рейтинг: 0 / 0
запуск vba процедуры в заданное время в outlook
    #39299016
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У SetTimer аргументы имеют тип Long. А передаёшь ты Integer.
Нужно
Код: sql
1.
t = SetTimer(0&, 0&, 2000&, AddressOf TimerProc)
...
Рейтинг: 0 / 0
запуск vba процедуры в заданное время в outlook
    #39299058
den_alex_94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist , спасибо, работает. А почему если вставлять не в модуль, а в thisoutlooksession то пишет "compile error: Invalid use of AddressOf operator"?
...
Рейтинг: 0 / 0
запуск vba процедуры в заданное время в outlook
    #39299061
den_alex_94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
пробовал, как Вы предложили, т.е.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As Long, _
        ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Dim t As Long

Public Sub TimerProc(ByVal hwnd As Long, ByVal msg As Long, ByVal idEvent As Long, ByVal TimeSys As Long)

          MsgBox ("aaa")
            KillTimer 0, t
           End Sub

Public Sub starttimer()
t = SetTimer(0&, 0&, 2000&, AddressOf TimerProc)
End Sub


,но все равно выдает "Compile error: Type mismatch ". По идее integer должен в long неявно преобразовываться. Следующий код работает
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub b(ByVal a As Long)
MsgBox (a)
End Sub

Sub a()
Dim a As Integer
a = 5
Call b(a)
End Sub
...
Рейтинг: 0 / 0
запуск vba процедуры в заданное время в outlook
    #39299067
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
den_alex_94А почему если вставлять не в модульПотому что процедура обратного вызова должна быть доступна из проекта. При помещении в модуль класса(коим и является thisoutlooksession) эта процедура не видна из других модулей. Поэтому не может быть вызвана.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / запуск vba процедуры в заданное время в outlook
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]