Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 26.04.2023
Сообщений: 24
Outlook

Запуск макроса при создании нового письма

04.05.2023, 14:41. Показов 3280. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане. При следующем коде запускается макрос при получении нового письма:
В модуле ThisOutlookSession прописан код:

Visual Basic
1
2
3
4
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Call Prog
    ' Your_main_macro
End Sub
В папке Modules в Midule1 - код:

Visual Basic
1
2
3
Sub Prog()
 MsgBox "Hello, World!"
End Sub
А как сделать так, чтобы при создании мной нового письма запускался этот макрос? Что и куда необходимо прописать, какую команду?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2023, 14:41
Ответы с готовыми решениями:

Запуск макроса Outlook при получении письма
Добрый день. Требуется запускать макрос при получении письма. В интернете нашел решение...

Однократный запуск макроса при создании документа из шаблона
Приветствую! Недавно я задался такой задачей. Нужно сделать шаблон с макросом. Суть такова - когда создается документ на основе этого...

Устранение ошибки при создании макроса
(Access 2010)выводит ошибку (при создании макроса), присваиваю условие =*, но вот когда выполняю, то выводится ошибка, прошу помочь...

27
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
10.05.2023, 13:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ALUXiy Посмотреть сообщение
Работает, но есть вопрос: как сделать, чтобы сообщение MsgBox "Создание письма!!" выводилось не перед открытием письма, а когда оно уже открыто-поверх окна?
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'Outlook(32bit) CreationMailEvent (Событие создания письма), by testuser, 10.05.2023
'Код следует поместить в стандартный модуль
'В событие Application_Startup следует поместить вызов Hook
'В событие Application_Quit поместить вызов UnHook
 
Option Explicit
 
Private Declare Function CallNextHookEx Lib "USER32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function SetWindowsHookEx Lib "USER32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "USER32" (ByVal hHook As Long) As Long
Private Declare Function GetClassName Lib "USER32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "USER32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function SetTimer Lib "USER32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "USER32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
 
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5
Private Const HCBT_CREATEWND As Long = 3
Private Const HC_ACTION = 0
Private hHook As Long
 
Private Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim className$, windTitle$, lngBuffer&, RetVal&
    
    Const sclass$ = "rctrl_renwnd32"
    Const swndttl$ = "Без имени - Сообщение" '"Без имени - Сообщение (HTML)"
    
    If lngCode < HC_ACTION Then
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
        Exit Function
    End If
        
    If lngCode = HCBT_ACTIVATE Then
        lngBuffer& = 255
        className$ = String$(256, " ")
        windTitle$ = String$(256, " ")
        RetVal = GetClassName(wParam, className, lngBuffer)
        className = Left$(className, RetVal)
        If className = sclass Then
            RetVal = GetWindowText(wParam, windTitle, lngBuffer)
            windTitle = Left$(windTitle, RetVal)
            If InStr(1, windTitle, swndttl, 1) Then 'If windTitle = swndttl Then
                
                SetTimer 0, 0, 700, AddressOf CreationMaylEvent 'отсрочка 700 мс (0,7 сек)
                
            End If
        End If
          
    End If
 
    CallNextHookEx hHook, lngCode, wParam, lParam
End Function
 
Public Sub Hook()
    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, GetModuleHandle(vbNullString), GetCurrentThreadId)
End Sub
 
Public Sub UnHook()
    UnhookWindowsHookEx hHook
End Sub
 
Private Sub CreationMaylEvent(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    KillTimer 0, uElapse
    
    MsgBox "Вы создаете новое письмо!!!", vbInformation + vbSystemModal, "Внимание!"
    
End Sub
1
0 / 0 / 0
Регистрация: 26.04.2023
Сообщений: 24
10.05.2023, 14:13  [ТС]
testuser2, Отлично! -выводится поверх, но после того, как закроешь его - оно еще раз выходит
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
10.05.2023, 14:45
Лучший ответ Сообщение было отмечено ALUXiy как решение

Решение

ALUXiy, скорее всего хук был установлен два раза, допустим при запуске и в ручную.

Добавлено через 11 минут
Или вернутьс к старому варианту фильтра
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Static classOk&
    Dim className$, windTitle$, lngBuffer&, RetVal&
    
    Const sclass$ = "rctrl_renwnd32"
    Const swndttl$ = "Без имени - Сообщение" '"Без имени - Сообщение (HTML)"
    
    If lngCode < HC_ACTION Then
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
        Exit Function
    End If
    lngBuffer& = 255
    className$ = String$(256, " ")
    windTitle$ = String$(256, " ")
    
    Select Case lngCode
      Case HCBT_CREATEWND
        if classok = 0 then
            RetVal = GetClassName(wParam, className, lngBuffer)
            className = Left$(className, RetVal)
            If className = sclass Then classOk = 1      
        end if
        
      Case HCBT_ACTIVATE
        If classOk Then
          classOk = 0
          RetVal = GetWindowText(wParam, windTitle, lngBuffer)
          windTitle = Left$(windTitle, RetVal)
          If InStr(1, windTitle, swndttl, 1) Then 'If windTitle = swndttl Then
              
              SetTimer 0, 0, 700, AddressOf CreationMaylEvent 'отсрочка 700 мс (0,7 сек)
              
          End If
        End If          
    End Select
    
    CallNextHookEx hHook, lngCode, wParam, lParam
End Function
1
0 / 0 / 0
Регистрация: 26.04.2023
Сообщений: 24
10.05.2023, 15:42  [ТС]
testuser2, Спасибо огромное за проделанную работу! Старый вариант помог. И теперь расскажу, для чего это нужно было. На работе сканируем накладные и отправляем сканы по почте оператору для внесения их в 1С. Каждый раз в теме письма указываю наименование поставщика. Чтобы этого не делать каждый раз, решил вставить макрос с выпадающим списком поставщиков. Там достаточно вбить первые буквы, чтобы форма выдала совпадение. Всё ради удобства) Можно было бы постоянно запускать макрос вручную из окна письма, но хотелось автоматики). Теперь вместо надписи "Создание сообщения" вставил эту форму и она работает при открытии нового сообщения автоматом. И вот снова проблема. Сканы мы делаем сторонней программой от производителя сканера, которая автоматически шлёт pdf скан в новое письмо outlook-а вложением. И вот незадача: если в outlooke макрос работает корректно (скрин 1), то при запуске письма из сторонней программы макрос открывается без выпадающего списка (скрин2). Даже подпись автоматически не ставится в тело письма. Видимо, не хватает каких-то прав для программы. Обидно. Столько работы проделано, а конечного результата не достиг. Возможно, есть и на это решение. Кто знает-подскажите, пожалуйста.
Миниатюры
Запуск макроса при создании нового письма   Запуск макроса при создании нового письма  
0
0 / 0 / 0
Регистрация: 26.04.2023
Сообщений: 24
10.05.2023, 16:24  [ТС]
Ещё проблемка. При первом создании сообщения из outlook - всё работает, но при последующих новых сообщениях форма уже не выходит.
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
10.05.2023, 18:01
ALUXiy, тут сложно что-то подсказать, просто интересно, откуда у вас берутся данные в выпадающем списке?
0
0 / 0 / 0
Регистрация: 26.04.2023
Сообщений: 24
10.05.2023, 18:54  [ТС]
Они прописывается в коде самой формы.
Делал всё, как тут написано https://ru.extendoffice.com/do... -list.html
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
10.05.2023, 23:22
Думаю, можно сделать так. Добавить кнопку "перезагрузки" формы", нажав на которую форма должна закрыться, может быть скрыться, затем снова показаться..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2023, 23:22

Ошибки при создании макроса в SolidWorks
Всем добрый день! Хотел записать макрос в SolidWorks, но при его воспроизведении программа выдает ошибку снова и снова. Каждый раз вылезает...

Не отображаются все письма в Outlook при выполнении макроса из Excel
Добрый день. Хочу макросом найти ответы на письма с темой из ячейки.Если ответ пришел, то ставим единицу. Но при входе в цикл мы попадаем...

Выполнение макроса при входящем сообщении с уникальной темой письма
Доброе утро! Пытаюсь найти решение для запуска макроса в OUTLOOK 2019 в ответ на входящее сообщение с определенной темой. ...

Не отправляет письма при регистрации нового пользователя
Друзья Подскажите чайнику, в чем может быть причина отсутствия писем подтверждения после регистрации на WordPress. Новый...

При создании нового проекта
при создании нового проекта - C++ Win32 Console Application, после названия поэкта открывается не обычное окошко, где я могу выбрать пустой...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru