Страницы: 1
RSS
Найти письмо c темой из ячейки в Outlook
 
Добрый день.
Хочу найти ответы на все разосланные письма в Outlook.
Но выдает ошибку Invalid procedure call of argument
С вызовом Outlook раньше не работал, поэтому пока не понял в чем ошибка.
Подскажите,пожалуйста, из-за чего возможно возникновение данной ошибки.
Код
Sub Poiskpisem()
Dim i As Integer
Dim oOutlook As Object, oItems As Object, oMsg As Object




Set oOutlook = CreateObject("Outlook.Application")
Set oItems = oOutlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
      
      
If oItems.Count > 0 Then
    For i = 2 To Cells(1, 1).End(xlDown).Row
       For Each oMsg In oItems
           If oMsg.Subject = "RE: " & Cells(i, 3).Value Then
                Cells(i, 6) = 1
               oItems.GetNext
               
           End If
        Next oMsg
   Next i
End If
 

End Sub
Изменено: mega31 - 27.08.2018 12:43:10
 
Код
'Удаленные ==> GetDefaultFolder(3)
'Исходящие ==> GetDefaultFolder(4)
'Отправленные ==> GetDefaultFolder(5)
'Входящие ==> GetDefaultFolder(6)

Public Function MassPattern(ByVal GetDefaultFolder%, ByVal Pattern$)
    Dim objOutlApp As Object, oMail As Object
    Dim m(), i%, T
    Dim IsNotAppRun As Boolean

    Application.ScreenUpdating = False

    'подключаемся к Outlook
    On Error Resume Next
    Set objOutlApp = GetObject(, "outlook.Application")
    If objOutlApp Is Nothing Then
        Set objOutlApp = CreateObject("outlook.Application")
    End If

    i% = 1
    For Each oMail In objOutlApp.GetNamespace("MAPI").GetDefaultFolder(GetDefaultFolder%).items
        If oMail.Subject Like "*" & Pattern$ & "*" Then
            ReDim Preserve m(i%)
            m(i%) = oMail.Subject & "_" & oMail.CreationTime
            'oMail.Delete
            Sleep (1)
            i% = i% + 1
        End If
    Next

    'Если приложение Outlook было открыта кодом - закрываем
    If IsNotAppRun Then
        objOutlApp.Quit
    End If
    Set objOutlApp = Nothing
    'возвращаем ранее отключенное обновление экрана
    MassPattern= m
    Application.ScreenUpdating = True
    ' End If
End Function

'задержка
Private Function Sleep(TimeSleep As Double)
    Dim Chas As Date, Z#, T As Date
    Chas = Timer()
    Z = Chas + TimeSleep
1:
    T = Timer()
    DoEvents
    If T < Z Then GoTo 1
End Function
 
Тут конечно не место вопросу ибо к Excel относится это очень слабо.
olFolderInbox - это что? Откуда excel узнает что это 6, если это переменная приложение Outlook? Нужно или определить константу или использовать прямо 6.

P.S. Однако перебор всех сообщений  - это как то мало эффективно.
Изменено: БМВ - 27.08.2018 12:57:35
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Однако перебор всех сообщений  - это как то мало эффективно.
иначе там сложно реализовать.
этот вариант покрывает 90% потребности в оутлук
Изменено: ivanok_v2 - 27.08.2018 12:59:49
 
Цитата
ivanok_v2 написал:
сложно
не означает невозможно, честно скажу и не проверял и не.... просто нагуглил
https://stackoverflow.com/questions/21549938/vba-search-in-outlook последний код
По вопросам из тем форума, личку не читаю.
 
Я немного неправильно поставил вопрос,поэтому возникла путаница. У меня в Excel есть таблица с почтой,темой,телом и приложением. И я хочу в еще один столбец добавить был ли ответ или нет. И сделать это с помощью макроса в Excel. Но почему-то все равно не выходи пока что.
 
Цитата
БМВ написал:
честно скажу и не проверял
Вариант 1
Класический перебор аналог #1

Вариант 2
Использовать SQL
как по мне то для ТС и Вариант 1 сложнен, про SQL молчу
 
mega31, нет путаницы и ivanok_v2, и я все поняли правильно. Конкретно про ошибку я написал, неизвестная переменная равна 0 а он ничего не означает для GetDefaultFolder. Только повторю, все что связывает вопрос Excel это несколько раз употребляемые Cells.
По вопросам из тем форума, личку не читаю.
 
БМВ,спасибо за помощь. Теперь все работает.
Страницы: 1
Наверх