Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 提取电子邮件数据,例如;从「;及;至;_Excel_Vba_Email_Outlook_Extract - Fatal编程技术网

Excel 提取电子邮件数据,例如;从「;及;至;

Excel 提取电子邮件数据,例如;从「;及;至;,excel,vba,email,outlook,extract,Excel,Vba,Email,Outlook,Extract,我想进入Outlook中的指定文件夹,并根据变量(Excel中的值/命名范围)从电子邮件(收件人、主题等)中提取数据 我只能提取电子邮件的“主题”和“大小”数据 例如,如果我尝试拉入“to”数据,它会 运行时错误“438”:对象不支持此属性或方法错误 Sub-FetchEmailData() 像对象一样看 作为对象的模糊olNs 将文件夹设置为对象 作为对象 Dim iRow作为整数 '获取/创建Outlook应用程序 出错时继续下一步 设置appOutlook=GetObject(,“Outl

我想进入Outlook中的指定文件夹,并根据变量(Excel中的值/命名范围)从电子邮件(收件人、主题等)中提取数据

我只能提取电子邮件的“主题”和“大小”数据

例如,如果我尝试拉入“to”数据,它会

运行时错误“438”:对象不支持此属性或方法错误

Sub-FetchEmailData()
像对象一样看
作为对象的模糊olNs
将文件夹设置为对象
作为对象
Dim iRow作为整数
'获取/创建Outlook应用程序
出错时继续下一步
设置appOutlook=GetObject(,“Outlook.Application”)
如果appOutlook不算什么
设置appOutlook=CreateObject(“Outlook.Application”)
如果结束
错误转到0
Set olNs=appOutlook.GetNamespace(“MAPI”)
设置olFolder=olNs.Folders(“邮箱名称”)。Folders(“收件箱”)。Folders(“XYZ”)。Folders(“2017”)。Folders(“4月4日”)。Folders(“等”)
“清楚
此工作簿.Sheets(“Test”).Cells.Delete
“构建标题:
此工作簿.Sheets(“Test”).Range(“A1:D1”)=数组(“发件人电子邮件地址”、“主题”、“收件人”、“大小”)
对于iRow=1到olFolder.Items.Count
此工作簿.Sheets(“Test”).Cells(iRow,1)。选择
'ThisWorkbook.Sheets(“Test”).Cells(iRow,1)=olFolder.Items.Item(iRow).SenderEmailAddress
此工作簿.Sheets(“Test”).Cells(iRow,2)=olFolder.Items.Item(iRow).Subject
'ThisWorkbook.Sheets(“Test”).Cells(iRow,3)=olFolder.Items.Item(iRow).To
此工作簿.Sheets(“Test”).Cells(iRow,4)=olFolder.Items.Item(iRow).Size
下一步
端接头
如何提取“From”和“To”等字段

此外,如果我的
设置文件夹
值是Excel中随日期动态变化的命名范围(
=Today()
),并使用
文件夹位置
作为Excel中的命名范围,写入是否正确

Set olFolder = ThisWorkbook.Sheets("Setup").Range("Folder_Location")
在哪里


当我尝试将它链接到
olFolder

时,会出现此错误。我知道这是一个老问题,但我最近遇到了相同的问题,在仔细检查了您已经做过的事情后,我能够解决此问题

我只需要做一些更改;首先,为了简单起见,我将所选文件夹设置为收件箱:

Set olFolder = olNs.GetDefaultFolder(6) ' 6 == Inbox for some reason
然后,为了便于阅读,我更改了您制作的标题(不是功能性更改):

最后,为了获得您想要的功能,需要对for循环中“Cells”参数中的标记进行一个小的更改:

For iRow = 1 To olFolder.Items.Count
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 1) = olFolder.Items.Item(iRow).SenderEmailAddress
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 2) = olFolder.Items.Item(iRow).Subject
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).To
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 4) = olFolder.Items.Item(iRow).Size
下一步

其中的“+1”使我们不会覆盖标题。因此最终版本如下所示:

Sub FetchEmailData()

Dim appOutlook As Object
Dim olNs As Object
Dim olFolder As Object
Dim olItem As Object
Dim iRow As Integer

' Get/create Outlook Application
On Error Resume Next
Set appOutlook = GetObject(, "Outlook.Application")
If appOutlook Is Nothing Then
    Set appOutlook = CreateObject("Outlook.Application")
End If
On Error GoTo 0

Set olNs = appOutlook.GetNamespace("MAPI")
Set olFolder = olNs.GetDefaultFolder(6) ' 6 == Inbox for some reason

' Clear
ThisWorkbook.Sheets("Test").Cells.Delete

' Build headings:
ThisWorkbook.Sheets("Test").Range("A1:D1") = Array("Sender Email Address:", "Subject:", "To:", "Size:")

For iRow = 1 To olFolder.Items.Count
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 1) = olFolder.Items.Item(iRow).SenderEmailAddress
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 2) = olFolder.Items.Item(iRow).Subject
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).To
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 4) = olFolder.Items.Item(iRow).Size
Next iRow

End Sub
For iRow = 1 To olFolder.Items.Count
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 1) = olFolder.Items.Item(iRow).SenderEmailAddress
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 2) = olFolder.Items.Item(iRow).Subject
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).To
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 4) = olFolder.Items.Item(iRow).Size
Sub FetchEmailData()

Dim appOutlook As Object
Dim olNs As Object
Dim olFolder As Object
Dim olItem As Object
Dim iRow As Integer

' Get/create Outlook Application
On Error Resume Next
Set appOutlook = GetObject(, "Outlook.Application")
If appOutlook Is Nothing Then
    Set appOutlook = CreateObject("Outlook.Application")
End If
On Error GoTo 0

Set olNs = appOutlook.GetNamespace("MAPI")
Set olFolder = olNs.GetDefaultFolder(6) ' 6 == Inbox for some reason

' Clear
ThisWorkbook.Sheets("Test").Cells.Delete

' Build headings:
ThisWorkbook.Sheets("Test").Range("A1:D1") = Array("Sender Email Address:", "Subject:", "To:", "Size:")

For iRow = 1 To olFolder.Items.Count
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 1) = olFolder.Items.Item(iRow).SenderEmailAddress
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 2) = olFolder.Items.Item(iRow).Subject
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 3) = olFolder.Items.Item(iRow).To
    ThisWorkbook.Sheets("Test").Cells(iRow + 1, 4) = olFolder.Items.Item(iRow).Size
Next iRow

End Sub