将数据从Outlook导入到Excel

时间:2019-02-11 18:28:28

标签: excel vba

我目前正在为Excel开发宏/加载项,以从Outlook导入电子邮件。

当我使用符合我设置的所有条件的电子邮件进行测试时,它工作得很好。

但是,当我使用多封电子邮件进行测试时,出现“下标超出范围”错误。

我已经从左到右,从右到左阅读了我的代码,但是我找不到我做错了什么。

这是我到目前为止拥有的代码(对于凌乱的代码,我感到抱歉,在一切运行顺利之后,我将对其进行清理)。

Sub GetDataFromOutlook()

Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Namespace
Dim Folder As MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer
'Dim LR As Long
Dim dbf As Worksheet
Dim ar() As String
ReDim ar(0 To i)

Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox)
Set dbf = Sheets("DBF")
'LR = dbf.Range("A" & Rows.Count).End(xlUp).Row + 1
i = 0

For Each OutlookMail In Folder.Items
ar() = Split(OutlookMail.Body, ",")
    If InStr(OutlookMail.Subject, "Exportation of purchase order") > 0 Then
        For Each Item In ar
            Range("batch_reference").Offset(i, 0).Value = Left(ar(i), WorksheetFunction.Find("-", ar(i), 1) - 1)
            Range("batch_reference").Offset(i, 0).Columns.AutoFit
            i = i + 1
        Next Item
    End If
Next OutlookMail

    Columns("A:A").Select
    dbf.Range("$A$1:$A$100").RemoveDuplicates Columns:=1, Header:=xlYes
    dbf.Sort.SortFields.Clear
    dbf.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("DBF").Sort
        .SetRange Range("A2:A100")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


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

End Sub

带有错误的高亮行是“ Range(” batch_reference“)。Offset(i,0).Value = Left(ar(i),WorksheetFunction.Find(”-“,ar(i),1)- 1)“

对我所缺少的东西有见识吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

创建ar数组时,它将是0..n的数组,每次。因此,尽管i会指向第一个邮件项的所需数组元素,但是当您处理第二个邮件项时,ar还是基于0的数组,但是{{1} }指向工作表的下一行,该行将比i大得多。

建议类似:

0

或者,也许:

 Range("batch_reference").Offset(i, 0).Value = Left(Item, WorksheetFunction.Find("-", Item, 1) - 1)