Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Outlook 2007. Макрос поиска во всех элементах. / 7 сообщений из 7, страница 1 из 1
01.10.2009, 12:39
    #36227177
CAHEKK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
Подскажите пожалуйста код макроса для поиска во всех элементах Outlook с фильтром "a.ivanov@mail.ru".
...
Рейтинг: 0 / 0
01.10.2009, 15:51
    #36227737
CAHEKK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
Интересует строчка фильра (например: Filter = "urn:schemas-microsoft-com:office:office#Keywords = 'Х'"
), т.е. что нужно написать чтобы поиск проходил по всем элементам outlook'a, а не в категориях как в примере?
...
Рейтинг: 0 / 0
01.10.2009, 21:34
    #36228430
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
Поиск по папкам, вложениям, напоминаниям?.. По чем ?
В чем надо, там и ищите, а фильтр организовуйте через if
Код: plaintext
if item.name = "a.ivanov@mail.ru" then
...
Рейтинг: 0 / 0
02.10.2009, 08:05
    #36228706
CAHEKK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
MaximuS_GПоиск по папкам, вложениям, напоминаниям?.. По чем ?
По всем элементам Outlook'a (Почте, календарю, задачам, заметкам и т.д.)

А как будет выглядеть код если использовать IF? в настоящее время у меня я использую такой код макросов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Папка_Поиска_1()
Dim Filter
Set MyOutlookApplication = Outlook.Application
SearchSubFolders = True
Set MapiNamespace = Application.GetNamespace("MAPI")
Const Scope As String = "'Inbox', 'Outbox', 'Calendar', 'Tasks', 'Contacts', 'Drafts', 'Journal', 'Notes', 'Sent Items'"
Filter = "urn:schemas-microsoft-com:office:office#Keywords = 'X'"
Set Search = MyOutlookApplication.AdvancedSearch(Scope, Filter, SearchSubFolders)
ResultsFolderName = "1"
Set ResultsFolder = Search.Save(ResultsFolderName)
End Sub
...
Рейтинг: 0 / 0
04.10.2009, 15:29
    #36231457
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
А как будет выглядеть код если использовать IF?
Я просто не знал, что существует метод поиска AdvancedSearch... Только что посидел немного, но полностью разобраться не получилось... Единственное, что нужно, насколько я понял, это что бы сам код был в ThisOutlookSession и обязательно с процедурой Application_AdvancedSearchComplete. Вот например, у меня работал вот такой код (полностью из справки):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public blnSearchComp As Boolean

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
    MsgBox "The AdvancedSearchComplete Event fired"
    blnSearchComp = True
End Sub

Sub TestAdvancedSearchComplete()
    Dim sch As Outlook.Search
    Dim rsts As Outlook.Results
    Dim i As Integer
    blnSearchComp = False
    Const strF As String = "urn:schemas:mailheader:subject = 'моя тема'"
    Const strS As String = "Inbox"
    Set sch = Application.AdvancedSearch(strS, strF)
    While blnSearchComp = False
        DoEvents
    Wend
    Set rsts = sch.Results
    For i =  1  To rsts.Count
        MsgBox rsts.Item(i).SenderName
    Next
End Sub
Тоесть Вам получается нужно разобратся, как искать по всем элементам, в справке это есть, и что в принципе сложнее, мне кажется, это разобратся вот с этим:
Const strF As String = " urn:schemas:mailheader:subject = 'моя тема'"
что писать и как писать...

Альтернативный вариант поиска, это то что предлагал я: пройтисть по всем элементам аутлука и через if найти нужные нам елементы...
...
Рейтинг: 0 / 0
04.10.2009, 16:00
    #36231465
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
Вот где то так:

Код: plaintext
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.
Sub KonechnoNeSuperNoChtoto()
Dim arr( 1  To  12 )
Dim i As Byte, j As Byte
Dim mynamespace As Outlook.NameSpace
Dim myfolder As Outlook.MAPIFolder
Dim m As Outlook.MAPIFolder

arr( 1 ) = olFolderCalendar
arr( 2 ) = olFolderContacts
arr( 3 ) = olFolderDeletedItems
arr( 4 ) = olFolderDrafts
arr( 5 ) = olFolderInbox
arr( 6 ) = olFolderJournal
arr( 7 ) = olFolderNotes
arr( 8 ) = olFolderOutbox
arr( 9 ) = olFolderSentMail
arr( 10 ) = olFolderTasks
arr( 11 ) = olPublicFoldersAllPublicFolders
arr( 12 ) = olFolderJunk

Set mynamespace = GetNamespace("MAPI")

For i =  1  To  12 
    Set myfolder = mynamespace.GetDefaultFolder(arr(i))
        For j =  1  To myfolder.Items.Count
            If myfolder.Items(j).Subject = "ключевое слово" Then
                'здесь делаете то что нужно
            End If
        Next
Next i
End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.12.2013, 14:37
    #38513175
niteo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Outlook 2007. Макрос поиска во всех элементах.
MaximuS_G,
Понимаю что поздно, но сам выстрадал этот код. Может кому пригодится

Код: vbnet
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.
Public m_SearchComplete As Boolean

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
        m_SearchComplete = True
End Sub

' Оформляет строку в кавычки
Function Quote(strText As String) As String
    Quote = Chr(34) & strText & Chr(34)
End Function

' Рекурсивный поиск всех папок и подпапок и формирование нормального Scope
Function GetFullScope(rootFolder As Folder) As String
    Dim objFld As Folder
    Dim strScope As String
    For Each objFld In rootFolder.Folders
        strScope = strScope & ",'" & objFld.FolderPath & "'"
        If objFld.Folders.Count > 0 Then
          strScope = strScope & "," & GetFullScope(objFld)
        End If
    Next
    GetFullScope = Mid(strScope, 2)
End Function

Public Function StartSearch(myStore As Outlook.store, strPhrase) As Search 'Outlook.Results
    Dim objSearch As Search
    ' Ищем в subject и в textdescription по условию LIKE
    strFind = Quote("urn:schemas:httpmail:subject") & " LIKE '%" & strPhrase & "%' OR _
            " & Quote("urn:schemas:httpmail:textdescription") & " LIKE '%" & strPhrase & "%'"
    Set objSearch = Application.AdvancedSearch(Scope:=GetFullScope(myStore.GetRootFolder), Filter:=strFind, _
                                   SearchSubFolders:=True, Tag:=myStore.FilePath & " - " & strPhrase)
    While m_SearchComplete = False
        DoEvents
    Wend
    m_SearchComplete = False
    Set StartSearch = objSearch
End Function

Sub FindAndReply()
  Dim objOL As Outlook.Application
  Dim ns As Outlook.NameSpace
  Dim stre As Outlook.store
  Dim objRsts As Outlook.results
  Dim objMail As Outlook.MailItem: Dim mailOut As Outlook.MailItem
  Dim dateMail As Date
  Set objOL = Application 'Outlook.Application
  Set ns = objOL.GetNamespace("MAPI")
  dateMail = Now
  ' Перебор идёт всех Store. Если есть Архивная папка, или несколько ящиков, будет искать и там
  For Each stre In ns.Stores ' Application.Session.Stores 
    ' Исключаем папку "Общие папки"
    If stre.DisplayName = "Общие папки" Then GoTo Continue
    ' Тут вызывается сама функция поиска по Store
    Set objRsts = StartSearch(stre, "СТРОКА_ПОИСКА").results 
    ' Дальше идет перебор всех найденных элементов.
    For Each result In objRsts
      If result.Class = olMail Then
        If Not IsEmpty(result.ReceivedTime) Then
          ' Находим самое старое письмо
          If dateMail > result.ReceivedTime Then
            Set objMail = result
            dateMail = result.ReceivedTime
          End If
        End If
      End If
    Next
Continue:
  Next
  If Not objMail Is Nothing Then
    Set mailOut = objMail.Reply
    mailOut.Display
  End If
  Set objMail = Nothing
  Set objRsts = Nothing
  Set ns = Nothing
End Sub



В принципе код был взят от сюда: MSDN Application.AdvancedSearch Method и в необходимой степени модифицирован. Но вот с перебором Store пришлось самому разбираться, в интернете мало информации. Вот тут MSDN Store interface немного объяснений.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Outlook 2007. Макрос поиска во всех элементах. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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