运行计时器错误“;5“;将Outlook Folder.items分配给Excel中的对象时

运行计时器错误“;5“;将Outlook Folder.items分配给Excel中的对象时,excel,vba,outlook,Excel,Vba,Outlook,我遇到了一些Excel报告无法解决的问题 运行计时器错误“5” 将Outlook文件夹.items分配给对象时 这是这一条的后续线索 修复自动错误后,我遇到运行时错误5,运行代码时过程调用或参数无效: ''Set-olItem=MyFolder.Items'' 谁能帮忙吗 Sub CountInboxSubjects() Dim olApp As Outlook.Application Dim olNs As Outlook.Namespace Dim olFldr A

我遇到了一些Excel报告无法解决的问题

运行计时器错误“5”

将Outlook
文件夹.items
分配给对象时

这是这一条的后续线索

修复自动错误后,我遇到运行时错误5,运行代码时过程调用或参数无效: ''Set-olItem=MyFolder.Items''

谁能帮忙吗

Sub CountInboxSubjects()

    Dim olApp As Outlook.Application
    Dim olNs As Outlook.Namespace
    Dim olFldr As Outlook.MAPIFolder
    Dim MyFolder As Outlook.MAPIFolder
    Dim MyFolder1 As Outlook.MAPIFolder
    Dim MyFolder2 As Outlook.MAPIFolder
    Dim MyFolder3 As Outlook.MAPIFolder
    Dim olMailItem As Outlook.MailItem
    Dim propertyAccessor As Outlook.propertyAccessor
    Dim olItem As Object
    'Dim olItem As Outlook.Items
    Dim dic As Dictionary
    Dim i As Long
    Dim Subject As String
    Dim val1 As Variant
    Dim val2 As Variant

    val1 = ThisWorkbook.Worksheets("EPI_Data").Range("I2")
    val2 = ThisWorkbook.Worksheets("EPI_Data").Range("I3")

    Set olApp = New Outlook.Application
    Set olNs = olApp.GetNamespace("MAPI")
    'Set olFldr = olNs.GetDefaultFolder(olFolderInbox)
    Set olShareName = olNs.CreateRecipient("F0400602@email.com")
    Set olFldr = olNs.GetSharedDefaultFolder(olShareName, olFolderInbox)

    If ThisWorkbook.Worksheets("EPI_Data").Range("I5") = "Inbox" Then
        Set MyFolder = olFldr
        MsgBox (MyFolder)
    ElseIf ThisWorkbook.Worksheets("EPI_Data").Range("I5") = "Feasibilities" Then
        Set MyFolder = olFldr.Folders("Feasibilities")
        MsgBox (MyFolder)
    ElseIf ThisWorkbook.Worksheets("EPI_Data").Range("I5") = "FNC's" Then
        Set MyFolder = olFldr.Folders("Feasibilities").Folders("FNC's")
        MsgBox (MyFolder)
    ElseIf ThisWorkbook.Worksheets("EPI_Data").Range("I5") = "ISAs - Actioned" Then
        Set MyFolder = olFldr.Folders("Feasibilities").Folders("ISAs - Actioned")
        MsgBox (MyFolder)
    End If

    Set olItem = MyFolder.Items
    'Set myRestrictItems = olItem.Restrict("[ReceivedTime]>'" & Format$("01/01/2019 00:00AM", "General Date") & "' And [ReceivedTime]<'" & Format$("01/02/2019 00:00AM", "General Date") & "'")
    Set myRestrictItems = MyFolder.Items.Restrict("[ReceivedTime]>'" & Format$(val1, "General Date") & "' And [ReceivedTime]<'" & Format$(val2, "General Date") & "'")

    For Each olItem In myRestrictItems
            If olItem.Class = olMail Then
            Set propertyAccessor = olItem.propertyAccessor
            Subject = propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0E1D001E")
            If dic.Exists(Subject) Then dic(Subject) = dic(Subject) + 1 Else dic(Subject) = 1
        End If
    Next olItem

    With ActiveSheet
        .Columns("A:B").Clear
        .Range("A1:B1").Value = Array("Count", "Subject")
        For i = 0 To dic.Count - 1
            .Cells(i + 2, "A") = dic.Items()(i)
            .Cells(i + 2, "B") = dic.Keys()(i)
        Next
    End With

End Sub
subcountinboxsubjects()
Dim olApp作为Outlook.Application
将OLN设置为Outlook.Namespace
将olFldr设置为Outlook.Mapi文件夹
将MyFolder设置为Outlook.MAPIFolder
将MyFolder1设置为Outlook.MAPIFolder
将MyFolder2设置为Outlook.MAPIFolder
将MyFolder3设置为Outlook.MAPIFolder
将olMailItem设置为Outlook.MailItem
将propertyAccessor设置为Outlook.propertyAccessor
作为对象
'我是Outlook.Items
词典
我想我会坚持多久
模糊主题为字符串
Dim val1作为变体
Dim val2作为变体
val1=此工作簿。工作表(“EPI_数据”)。范围(“I2”)
val2=此工作簿。工作表(“EPI_数据”)。范围(“I3”)
Set olApp=newoutlook.Application
Set olNs=olApp.GetNamespace(“MAPI”)
'设置olFldr=olNs.GetDefaultFolder(olFolderInbox)
设置olShareName=olNs.CreateRecipient(“F0400602@email.com")
设置olFldr=olNs.GetSharedDefaultFolder(olShareName,olFolderInbox)
如果此工作簿.工作表(“EPI_数据”).范围(“I5”)=收件箱,则
设置MyFolder=olFldr
MsgBox(我的文件夹)
否则,此工作簿。工作表(“EPI_数据”)。范围(“I5”)=“可行性”
设置MyFolder=olFldr.Folders(“可行性”)
MsgBox(我的文件夹)
否则,此工作簿。工作表(“EPI_数据”)。范围(“I5”)=“FNC”然后
设置MyFolder=olFldr.Folders(“可行性”).Folders(“FNC”)
MsgBox(我的文件夹)
否则,此工作簿。工作表(“EPI_数据”)。范围(“I5”)=“ISAs-已执行”然后
设置MyFolder=olFldr.Folders(“可行性”).Folders(“ISAs-已采取行动”)
MsgBox(我的文件夹)
如果结束
Set-olItem=MyFolder.Items

“设置myRestrictItems=olItem.Restrict(“[ReceivedTime]>”)和“[ReceivedTime]”和“[ReceivedTime]”格式$(val1,“General Date”)&“,[ReceivedTime]使用Dim olitems作为Outlook.Items或切换设置myRestrictItems=myfolder.Items

Items属性包含文件夹中Outlook项目对象的集合


范例

选项显式
subcountinboxsubjects()
Dim olApp作为Outlook.Application
Set olApp=newoutlook.Application
将OLN设置为Outlook.Namespace
Set olNs=olApp.GetNamespace(“MAPI”)
将ShareName设置为Outlook.Recipient
设置olShareName=olNs.CreateRecipient(“email@email.com")
将olFldr设置为Outlook.Mapi文件夹
设置olFldr=olNs.GetSharedDefaultFolder(olShareName,olFolderInbox)
将myRestrictItems暗显为Outlook.Items
设置myRestrictItems=olFldr.Items.Restrict(“[ReceivedTime]>”)&Format$(val1,“General Date”)&_

“'和[ReceivedTime]我尝试了A)使用Dim.Items作为Outlook.Items,但它不起作用,仍然给我运行时错误5 B)切换到设置myRestrictItems=myfolder.Items,我不能这样做,因为我需要用它来限制特定时间范围内的搜索。@lyricZZ好的,试试这个-删除
Set-olItem=MyFolder.Items
现在将
myRestrictItems
修改为
Set-myRestrictItems=MyFolder.Items.restrict([ReceivedTime]>”&Format$(val1,“General Date”)&“)和[ReceivedTime]@lyricZZ让我知道。看起来它通过了,但新的错误显示Rum时间错误“91”显示…“对象变量或未设置块变量”。我相信这是由“对于myRestrictItems中的每个olItem”造成的,而olItem未定义,我尝试用MyFolder.Items In“对于myRestrictItems中的每个olItem”替换olItem“而且它不会工作。报告错误编译错误:需要变量-无法分配给此表达式。”。
Option Explicit
Sub CountInboxSubjects()
    Dim olApp As Outlook.Application
    Set olApp = New Outlook.Application

    Dim olNs As Outlook.Namespace
    Set olNs = olApp.GetNamespace("MAPI")

    Dim olShareName As Outlook.Recipient
    Set olShareName = olNs.CreateRecipient("email@email.com")

    Dim olFldr As Outlook.MAPIFolder
    Set olFldr = olNs.GetSharedDefaultFolder(olShareName, olFolderInbox)


    Dim myRestrictItems As Outlook.Items
    Set myRestrictItems = olFldr.Items.Restrict("[ReceivedTime]>'" & Format$(val1, "General Date") & _
                                          "' And [ReceivedTime]<'" & Format$(val2, "General Date") & "'")

    Dim olItem As Object

    Dim lng As Long
    For lng = myRestrictItems.Count To 1 Step -1

        Set olItem = myRestrictItems(lng)
        If olItem.Class = olMail Then
            Debug.Print olItem.Subject
        End If

    Next

End Sub