Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
1

Создание правила VBA в Outlook

09.01.2015, 15:54. Показов 4252. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помоги создать собственное правило на VBA которое пересылает на определенные адреса письма, попадающие в папку Входящие
К примеру:в организации работают 3 человека,необходимо чтобы каждое входящие письмо по порядку ( в порядке очереди) отправлялись каждому сотруднику на личную почту Outlook
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2015, 15:54
Ответы с готовыми решениями:

Outlook Vba/ Создание папки по названию темы и выгрузка туда прикрепленных файлов к письму
Доброго времени суток, помогите решить следующую задачу. В оутлуке создана папка, куда я скидываю...

Outlook 2007 и его правила
В Outlookе из офиса 2007 устанавливаю правила, ну те что письмо поподающее во входящие по такому то...

Microsoft Outlook 2007 - настройка правила
Здравствуйте, уважаемые форумчане! У нас на работе нельзя своих сотрудников поместить в черный...

Vba Outlook
Ребята нужна помощь !! =) есть одна вещь до которой мой мозг самостоятельно никогда не дойдет =) ...

37
KOPOJI
09.01.2015, 16:19
  #2

Не по теме:

Цитата Сообщение от Екатерина55 Посмотреть сообщение
Помоги
Вы тет-а-тет с кем-то говорите?

0
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
09.01.2015, 17:13  [ТС] 3
*Помогите
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
10.01.2015, 14:43 4
Когда-то авно делал подобное. Раскидывались письма если в теме были определенные слова
выбери что надо
Кликните здесь для просмотра всего текста
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
Option Explicit
 
Dim oNamespace As Outlook.NameSpace
Dim inbox As Outlook.MAPIFolder
Dim MyFol As Outlook.MAPIFolder
Dim MyFolS As Outlook.MAPIFolder
Dim MyFolSi As Outlook.MAPIFolder
Dim Item As Object
Dim STR() ' массив сотрудников с коэффмциентами
 
Sub РАСКИДАТЬ2(Item As Outlook.MailItem)
Dim i, NUM As Integer
Dim oOutlook As New Outlook.Application
Dim SOS()
Dim DEG
SOS = Array("досрочка", "погашення", "теме", "Планета", "Здравствуйте") ' сюда добавлять слова поиска
 
STR = Выбрать_список_сотрудников ' проверяем наличие. нет - создаём папки сотрудников
'obnul
NUM = Val(GetSetting("OUTL", "NASTR", "NUM")) 'считываем последний номер
 
If NUM = 0 Then 'если первый раз
    NUM = 1
End If
Do While NUM > 100 'пока счётчи больше 100
    NUM = NUM - 100 ' уменьшаем на 100
Loop
SaveSetting "OUTL", "NASTR", "NUM", NUM 'запоминаем
 
 
Set oNamespace = oOutlook.GetNamespace("MAPI")
Set inbox = oNamespace.Folders(1).Folders("Входящие")
 
'раскидываем по заголовка писем
    For Each Item In inbox.Items ' перебор всех писем в папке "Входящие"
        For i = 0 To UBound(SOS) '
            If InStr(1, Item, SOS(i)) > 0 Then
                NUM = NUM + 1
                DEG = Первый
Item.Move oNamespace.Folders(1).Folders("Сотрудники").Folders(STR(DEG, 0))
                STR(DEG, 2) = STR(DEG, 2) + 1 'увеличиваем счётчик
                SaveSetting "OUTL", "NASTR", STR(DEG, 0) & "_p", STR(DEG, 2) 'запоминаем
                Exit For
            End If
        Next i
    Next
        
'Для поиска в тексте сообщений необходимо сделать разрешение доступа максиум на 10 минут
'бесплатных прог. для этого нет
'1.вариант: перед запуском программы поставить галочку на 10 мин.
'2.вариант: вроде можно программно изменить ключ в реестре с помощью АПИ функции.
'Но тоже только на 10мин
'я даже находил модульс кодом. Достаточно много кода
'Поэтому пока только по заголовкам
'Если надо искать и в теле писем: разкомментировать блок. При запросе установить галку и 10 мин
'
'''''''''''''''''''''''''''''
''''''''''раскидываем по тексту писем
'    For Each Item In inbox.Items ' перебор всех писем в папке "Входящие"
'        For i = 0 To UBound(SOS) '
'            If InStr(1, Item.Body, SOS(i)) > 0 Then
'                NUM = NUM + 1
'                DEG = Первый
'Item.Move oNamespace.Folders(1).Folders("Сотрудники").Folders(STR(DEG, 0))
'                STR(DEG, 2) = STR(DEG, 2) + 1 'увеличиваем счётчик
'                SaveSetting "OUTL", "NASTR", STR(DEG, 0) & "_p", STR(DEG, 2) 'запоминаем
'                Exit For
'            End If
'        Next i
'    Next
 ''''''''''''''''''''''''
SaveSetting "OUTL", "NASTR", "NUM", NUM ' запоминаем последнее значение счётчика
MsgBox "OK", 64, ""
End Sub
 
Private Function Выбрать_список_сотрудников()
Dim i
Dim oOutlook As New Outlook.Application
    Dim oNamespace As Outlook.NameSpace
    Dim oChildFolder As Outlook.MAPIFolder
    Set oNamespace = oOutlook.GetNamespace("MAPI")
    
    If Not StartProc1("Сотрудники") Then
        Set oNamespace = oOutlook.GetNamespace("MAPI")
        Set MyFol = oNamespace.Folders(1)
        Set MyFolS = MyFol.Folders.Add("Сотрудники")
        MsgBox "Была создана отсутствующая папка " & """" & "Сотрудники" & """" & vbCrLf _
        & "Создайте в папке " & """" & "Сотрудники" & """" & "папки по фамилиям сотрудников", 64, ""
        Exit Function
    End If
    Выбрать_список_сотрудников = SOTR("Сотрудники")
 
End Function
 
Private Function Первый()
Dim i, MIN, MAX, T, P, K
MIN = 1E+31
MAX = 0
 
For i = 1 To UBound(STR)
    If STR(i, 2) = 0 Then
        T = STR(i, 1)
        If MAX < T Then MAX = T: P = i
    End If
Next
 
If MAX > 0 Then Первый = P: Exit Function
 
For i = 1 To UBound(STR)
    If STR(i, 2) > 0 Then
        If STR(i, 1) > 0 Then
            T = STR(i, 2) / STR(i, 1)
            If MIN > T Then MIN = T: K = i
        End If
    End If
Next
Первый = K
 
End Function
 
Private Function SOTR(FOLD)
Dim m(), ST, P, Nm, J, R()
Dim i
Dim oOutlook As New Outlook.Application
Dim oNamespace As Outlook.NameSpace
Dim oChildFolder As Outlook.MAPIFolder
ReDim m(2, 0)
Set oNamespace = oOutlook.GetNamespace("MAPI")
     For Each oChildFolder In oNamespace.Folders(1).Folders(FOLD).Folders
     Nm = oChildFolder.Name
     ST = (Replace(GetSetting("OUTL", "NASTR", Nm), ".", ",")) 'считываем коэффициент
     If ST <> "" Then ST = CDbl(Replace(ST, ".", ","))
  
     If ST = "" Then ' если не было коэффициента
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ST = InputBox("Введите коэффициент нагрузки для этого сотрудника", _
        "Сотрудник без коэффициента " & Nm, 1)
        If ST = "" Then
            MsgBox "Новому сотруднику писем не будет разноситься!", 64, ""
            SaveSetting "OUTL", "NASTR", Nm, 0 'запоминаем
            SaveSetting "OUTL", "NASTR", Nm & "_p", 0 'запоминаем
        Else
            SaveSetting "OUTL", "NASTR", Nm, ST 'запоминаем
            SaveSetting "OUTL", "NASTR", Nm & "_p", 0 'запоминаем
            
'            если появился новый сотрудник обнулим счётчики писем
            J = J + 1
            ReDim Preserve m(2, J)
            m(0, J) = Nm
            m(1, J) = ST
            m(2, J) = ST
            
            ReDim R(UBound(m, 2), UBound(m))
            
            For J = 1 To UBound(m, 2)
                 R(J, 0) = m(0, J)
                 R(J, 1) = m(1, J)
                 R(J, 2) = m(2, J)
            Next J
            
            For i = 1 To UBound(STR)
                SaveSetting "OUTL", "NASTR", STR(i, 0) & "_p", 0 'обнуляем ссётчики
            Next
 
        End If
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     Else
        J = J + 1
        ReDim Preserve m(2, J)
        m(0, J) = Nm
        m(1, J) = ST
        m(2, J) = P
     End If
     Next
     ReDim R(UBound(m, 2), UBound(m))
     For J = 1 To UBound(m, 2)
          R(J, 0) = m(0, J)
          R(J, 1) = m(1, J)
          R(J, 2) = m(2, J)
     Next J
     SOTR = R
End Function
 
Private Sub obnul()
Dim i
For i = 1 To UBound(STR)
SaveSetting "OUTL", "NASTR", STR(i, 0) & "_p", 0 'запоминаем
Next
End Sub
2
KOPOJI
10.01.2015, 17:30
  #5

Не по теме:

Цитата Сообщение от Alex77755 Посмотреть сообщение
Когда-то авно делал подобное
Ради научного интереса только.. Там пропущена буква "д" или "г"..?

0
Заблокирован
10.01.2015, 17:33 6
Новое слово родилось , авно
0
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 19:44  [ТС] 7
Alex77755,
Большое спасибо.Подскажите,пожалуйста,а можно ли в Outlook добавить поле,в котором вводятся фамилии сотрудников( т.к.каждый день на работу приходят разные сотрудники).При нажатии на кнопку разослать ,сотрудникам рассылаются входящие письма на их эл.почту
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.01.2015, 22:00 8
Лучший ответ Сообщение было отмечено Екатерина55 как решение

Решение

Запросить можно InputBox
1
Заблокирован
11.01.2015, 22:05 9
Всё верно, наверняка Alex77755 знает про этот способ
поэтому и сказал, а вообще удивительно, что тому кому помогают
просыпаются на второй, или третий день после своего-же вопроса,
как будто нам это надо...
0
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 22:22  [ТС] 10
Т.е. можно только в экселе запросить?а в outloke каким методом можно вводить данные?(фамилии сотрудников)
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.01.2015, 22:28 11
Простым InputBox
0
Заблокирован
11.01.2015, 22:28 12
Тогда, просто InputBox, без префикса Application

Пример:
Visual Basic
1
2
    Do:  s = InputBox("Введите...", , "Тэст!")
    Loop While Len(s)
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.01.2015, 22:37 13
Можно сделать на форме список с мультивыбором.
Запрашивать через импутбокс не рационально: возможны опечатки.
Лучше отказаться от ручного ввода.
0
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 23:04  [ТС] 14
а как создать список с мультивыбором?
0
Заблокирован
11.01.2015, 23:14 15
В инициализации нужно поставить это

Visual Basic
1
2
        .ListStyle = fmListStyleOption
        .MultiSelect = fmMultiSelectMulti
Кликните здесь для просмотра всего текста
и всё


Добавлено через 2 минуты
Если бы Вам стало интересно, я бы просто полный пример показал
но похоже вам совсем не интересно, поэтому это было последнее, разбирайтесь сами
1
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 23:17  [ТС] 16
а можете пример показать,плиз..
0
Заблокирован
11.01.2015, 23:25 17
Вот
Visual Basic
1
2
3
4
5
6
Private Sub UserForm_Initialize()
    With ListBox1
        .ListStyle = fmListStyleOption
        .MultiSelect = fmMultiSelectMulti
    End With
End Sub
это чисто программный способ,
хотя можно просто поставить галочки в свойствах

Добавлено через 1 минуту
С другой стороны, я не знаю ни вас, ни того с чем вы мучаетесь, файла нет
я не могу гадать, пусть тот кому вы спасибки ставите вам и помогает, прощайте
1
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 23:34  [ТС] 18
а почему ругается на .ListStyle = fmListStyleOption?
Создание правила VBA в Outlook
0
Заблокирован
11.01.2015, 23:48 19
Лучший ответ Сообщение было отмечено Екатерина55 как решение

Решение

Не достаточно создать модуль, я не знаю к сожалению в чем вы там варитесь,
но надо создать форму потыкайте там у себя чтонибудь найдите UserForm

Добавлено через 2 минуты
После того как это удасться, закиньте на форму объект ListBox,
если всё получиться можно продолжить разговор
1
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 62
11.01.2015, 23:58  [ТС] 20
UserForm нашла,но объект ListBox не удается разместить на форме выдает ошибку (на картинке)
Создание правила VBA в Outlook
Could not complete the operator due to error
0
11.01.2015, 23:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2015, 23:58
Помогаю со студенческими работами здесь

VBA Outlook
Нужно написать скрипт для сортировки почты VBA Outlook. Задача: Приходят файлы в расширении...

VBA MS Outlook
Всем здравствовать! 1. У меня нет опыта работы в VBA MS Outlook. Мне понадобилось написать макрос...

VBA Outlook
Доброго всем времени суток! В коде VBA для файла, вложенного в письмо, есть возможность извлечь...

VBA и Outlook
Всем привет! У меня такой вопрос: позволит ли VBA написать макрос для outlook, который бы чистил...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru