Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / запуск vba процедуры в заданное время в outlook / 6 сообщений из 6, страница 1 из 1
27.08.2016, 13:12
    #39298973
den_alex_94
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
Здравствуйте. Не работает код, выдается ошибка "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
27.08.2016, 16:26
    #39299005
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
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
27.08.2016, 16:56
    #39299016
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
У SetTimer аргументы имеют тип Long. А передаёшь ты Integer.
Нужно
Код: sql
1.
t = SetTimer(0&, 0&, 2000&, AddressOf TimerProc)
...
Рейтинг: 0 / 0
27.08.2016, 21:15
    #39299058
den_alex_94
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
The_Prist , спасибо, работает. А почему если вставлять не в модуль, а в thisoutlooksession то пишет "compile error: Invalid use of AddressOf operator"?
...
Рейтинг: 0 / 0
27.08.2016, 21:30
    #39299061
den_alex_94
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
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
27.08.2016, 21:52
    #39299067
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск vba процедуры в заданное время в outlook
den_alex_94А почему если вставлять не в модульПотому что процедура обратного вызова должна быть доступна из проекта. При помещении в модуль класса(коим и является thisoutlooksession) эта процедура не видна из других модулей. Поэтому не может быть вызвана.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / запуск vba процедуры в заданное время в outlook / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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