【发布时间】:2020-07-28 17:09:10
【问题描述】:
我正在尝试从特定文件夹中的未读电子邮件中提取信息并将其粘贴到结构化的 Excel 文件中。
我需要主题、正文、发件人、接收时间、对话 ID 和附件名称。
重要提示:它必须是 Outlook 宏,而不是 Excel 宏。
我有以下代码,但它给了我
“运行时错误'9':下标超出范围。
Sub WriteTextFile()
Dim wkb As Workbook
Set wkb = Workbooks.Open("C:\Users\bebxadvypat\Desktop\Test VBA Macros.xlsx")
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set Workbook = objExcel.Workbooks.Open("C:\Users\bebxadvypat\Desktop\Test VBA Macros.xlsx")
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim row As Integer
row = 2
objExcel.Worksheets("Sheet1").Cells(1, 1).Value = "Sender"
objExcel.Worksheets("Sheet1").Cells(1, 2).Value = "Subject"
objExcel.Worksheets("Sheet1").Cells(1, 3).Value = "Date"
objExcel.Worksheets("Sheet1").Cells(1, 4).Value = "ID"
objExcel.Worksheets("Sheet1").Cells(1, 5).Value = "Body"
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders.GetLast
Set objFolder = objFolder.Folders("Deleted Items")
For Each item In objFolder.Items
objExcel.Worksheets("Sheet1").Cells(row, 1).Value = item.sender
objExcel.Worksheets("Sheet1").Cells(row, 2).Value = item.Subject
objExcel.Worksheets("Sheet1").Cells(row, 3).Value = item.ReceivedTime
objExcel.Worksheets("Sheet1").Cells(row, 4).Value = item.ConversationID
objExcel.Worksheets("Sheet1").Cells(row, 5).Value = item.Body
Next
Workbook.Save
Workbook.Saved = True
Workbook.Close
objExcel.Quit
Set Workbook = Nothing
Set objExcel = Nothing
End Sub
【问题讨论】:
-
哪一行报错?
-
我能看到的只有几件事会引发错误 9 - 其中之一是硬编码的工作表名称。 “Sheet1”可能不是您要使用的工作表的实际名称,尤其是。如果 Excel 没有安装英文版。例如,默认工作表名称将是法语中的“Feuil1”。考虑将
objExcel.Worksheets(1)拉到它自己的Worksheet变量中,而不是每次都取消引用它。另一个是硬编码的“已删除邮件”文件夹名称。如果指定的硬编码字符串不是您要从中提取的集合中的键,则会引发错误 9。 -
嗨@MathieuGuindon,确实问题与非英语版本有关!多谢。但是:a)我还应该使用哪一行代码来获取附件名称? b) 如何将附件下载到特定文件夹? c) 实际上只对未读电子邮件执行所有这些操作
-
按 F2 以调出 对象浏览器,然后找到
MailItem类并搜索看起来像附件集合的东西。然后寻找一个可能成为附件的类 - 该类可能具有Name属性。 -
您将
objFolder设置为objNS.Folders.GetLast,然后将其重置为objFolder.Folders("Deleted Items")。第一条语句返回的文件夹是否包含文件夹“已删除项目”?如果不是,那将解释错误 9。尝试在每个Set之后添加Debug.Print objFolder.Name,看看它会给你什么。