dili1234 Ответов: 2

Есть ли возможность импортировать электронную почту outlook inbox в excel


Я попытался импортировать электронную почту непосредственно из почтового ящика outlook, но получил сообщение об ошибке "Ошибка времени выполнения 13" несоответствие типа
Sub outlooktoimport()

Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Namespace
Dim Folder As MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer

Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Items


i = 1

For Each OutlookMail In Folder.Items

If OutlookMail.ReceivedTime >= Range("email_start_date").Value Then
Range("email_Subject").Offset(i, 0).Value = OutlookMail.Subject
Range("email_Date").Offset(i, 0).Value = OutlookMail.ReceivedTime
Range("email_Sender").Offset(i, 0).Value = OutlookMail.SenderName
Range("email_Body").Offset(i, 0).Value = OutlookMail.Body

i = i + 1
End If
Next OutlookMail

Set Folder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing

MsgBox "All imported"


End Sub


Что я уже пробовал:

Я меняю почтовый ящик retreiving, но он не работает

Richard MacCutchan

Вам нужно найти строку, в которой возникает ошибка, и посмотреть, какие переменные вызывают проблему.

Sandeep Mewara

Вы пытаетесь это сделать: https://www.techrepublic.com/blog/microsoft-office/quickly-export-outlook-e-mail-items-to-excel/

посмотрите и поделитесь, если это не так.

ZurdoDev

Ошибка ничего не значит для нас, если мы не знаем, какая строка кода вызвала ее.

dili1234

Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Items

Когда я отлаживаю его, в этой строке появляется ошибка

ZurdoDev

Несоответствие типов означает, что две вещи не совпадают. Я не знаю этого кода, но просто глядя на него, вы пытаетесь установить элементы в папке в саму папку. Папка объявляется как папка MAPI, но вы пытаетесь установить элементы внутри папки в эту переменную, что не будет работать.

dili1234

Когда изменилась программа

Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox)


ошибка приходит как время выполнения 438 и как только она отлаживается она указывает на ошибку

If OutlookMail.ReceivedTime >= Range("email_start_date").Value Then

2 Ответов

Рейтинг:
2

dili1234

Я исправил эту проблему

Option Explicit
Sub Getinboxcontents()

Dim ol As Outlook.Application

Dim ns As Outlook.Namespace
Dim fol As Outlook.Folder
Dim I As Object
Dim mi As Outlook.MailItem
Dim n As Long
n = 2
Dim rh As Double


rh = Range("A1").RowHeight
Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)

For Each I In fol.items


If I.Class = olMail Then


n = n + 1

Set mi = I
If mi.ReceivedTime >= Range("B1").Value And mi.ReceivedTime <= Range("C1").Value Then

Cells(n, 1).Value = mi.SenderName
Cells(n, 2).Value = mi.Subject
Cells(n, 3).Value = mi.ReceivedTime
Cells(n, 4).Value = mi.Body

End If

End If
Next I

Range("A1").CurrentRegion.EntireColumn.AutoFit
Range("A1").CurrentRegion.EntireRow.RowHeight = rh
Set fol = Nothing
Set ns = Nothing
Set ol = Nothing


End Sub


Рейтинг:
1

dili1234

Я изменил код на этот, и проблема была решена. Но так как я ставлю критерии для начальной даты есть пробел пока он не достигнет критерия в excel он показывает пустые строки

Option Explicit
Sub Getinboxcontents()

Dim ol As Outlook.Application

Dim ns As Outlook.Namespace
Dim fol As Outlook.Folder
Dim I As Object
Dim mi As Outlook.MailItem
Dim n As Long
n = 2
Dim rh As Double


rh = Range("A1").RowHeight
Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)

For Each I In fol.items


If I.Class = olMail Then


n = n + 1

Set mi = I
If mi.ReceivedTime >= Range("B1").Value And mi.ReceivedTime <= Range("C1").Value Then

Cells(n, 1).Value = mi.SenderName
Cells(n, 2).Value = mi.Subject
Cells(n, 3).Value = mi.ReceivedTime
Cells(n, 4).Value = mi.Body

End If

End If
Next I

Range("A1").CurrentRegion.EntireColumn.AutoFit
Range("A1").CurrentRegion.EntireRow.RowHeight = rh
Set fol = Nothing
Set ns = Nothing
Set ol = Nothing


End Sub