首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过发送者outlook统计电子邮件

通过发送者outlook统计电子邮件
EN

Stack Overflow用户
提问于 2022-08-29 12:55:32
回答 1查看 83关注 0票数 0

我必须做一个宏,以计数电子邮件发件人。

这是我的密码

代码语言:javascript
运行
复制
    Dim objDictionary As Object
    Dim objInbox As Outlook.Folder
    Dim i As Long
    Dim objMail As Outlook.MailItem
    Dim strSender As String
    Dim objExcelApp As Excel.Application
    Dim objExcelWorkbook As Excel.Workbook
    Dim objExcelWorksheet As Excel.Worksheet
    Dim varSenders As Variant
    Dim varItemCounts As Variant
    Dim nLastRow As Integer
 
    Set objDictionary = CreateObject("Scripting.Dictionary")
    Set objInbox = Outlook.Application.Session.GetDefaultFolder(olFolderInbox)
 
    For i = objInbox.Items.Count To 1 Step -1
        If objInbox.Items(i).Class = olMail Then
           Set objMail = objInbox.Items(i)
           strSender = objMail.SenderEmailAddress
 
           If objDictionary.Exists(strSender) Then
              objDictionary.Item(strSender) = objDictionary.Item(strSender) + 1
           Else
              objDictionary.Add strSender, 1
           End If
        End If
    Next

    Set objExcelApp = CreateObject("Excel.Application")
    objExcelApp.Visible = True
    Set objExcelWorkbook = objExcelApp.Workbooks.Add
    Set objExcelWorksheet = objExcelWorkbook.Sheets(1)
 
    With objExcelWorksheet
         .Cells(1, 1) = "Sender"
         .Cells(1, 2) = "Count"
    End With
 
    varSenders = objDictionary.Keys
    varItemCounts = objDictionary.Items
 
    For i = LBound(varSenders) To UBound(varSenders)
        nLastRow = objExcelWorksheet.Range("A" & objExcelWorksheet.Rows.Count).End(xlUp).Row + 1
        With objExcelWorksheet
             .Cells(nLastRow, 1) = varSenders(i)
             .Cells(nLastRow, 2) = varItemCounts(i)
        End With
    Next
 
    objExcelWorksheet.Columns("A:B").AutoFit
End Sub

问题是,当我执行代码时,我遇到了这个问题,在这里输入图像描述

错误说明:底层安全系统找不到您的数字ID。

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-29 21:18:55

首先,不需要迭代文件夹中的所有项:

代码语言:javascript
运行
复制
 For i = objInbox.Items.Count To 1 Step -1
        If objInbox.Items(i).Class = olMail Then

相反,您需要使用Find/FindNextItems类的Restrict方法来只获取与您的条件相对应的项。在我所写的文章中,了解更多关于这些方法的内容:

例如,可以使用以下搜索条件从特定发件人的电子邮件地址获取项目:

代码语言:javascript
运行
复制
criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:senderemail" & Chr(34) _ 
& " = 'some@email.com'"

或者更好的是:

代码语言:javascript
运行
复制
 Filter = "@SQL=" & " urn:schemas:httpmail:senderemail Like '%some@email.com%'"

有关详细信息,请参阅使用字符串比较筛选项

在将筛选器应用于集合之后,您可以签出Items类的Items属性,该属性可以给出来自特定发件人的项数。

如果您需要从文件夹中接收到的最新项目,则需要执行以下操作:

  1. 按接收日期计算排序集合中的Items项。
  2. 迭代排序集合中的最后一个/前10个项。

一种可能的选择是使用Find/FindNextItems类的Restrict方法获取特定日期的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73529129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档