0

我在 VS2010 中编写了这个小程序,可以在 Outlook 2007 上运行。

它适用于收件箱的标准通读,但我无法让它正确指向其他文件夹,我收到“用户代码未处理 COMException”错误,显示“操作失败。找不到对象。 " ...

如果有帮助,我已经包含了我的 Outlook 结构的屏幕截图...

Imports Microsoft.Office.Interop

Public Class ThisAddIn
Private Sub ThisAddIn_Startup() Handles Me.Startup
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub Application_Startup() Handles Application.Startup

    Dim MyApp As Outlook.Application = New Outlook.Application
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim MyEmails As Integer = MyInbox.Items.Count
    Dim MyEMail As Outlook.MailItem
    Dim MyCount As Integer
    Dim MySubFolder As Outlook.MAPIFolder = MyNS.Folders("Kickabout") **<<< Error occurs here**

    For MyCount = MyEmails To 1 Step -1
        MyEMail = MyInbox.Items(MyCount)
        If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
            If MyEMail.Attachments.Count > 0 Then
                MySubFolder = MyNS.Folders("Kickabout\Attachments")
            End If
            MyEMail.Move(MySubFolder)
        End If
    Next
End Sub

End Class

我的展望结构

4

1 回答 1

0

好的,我自己解决了这个问题......如果有人对未来感兴趣,你必须非常明确地设置路径并且需要一个函数来这样做,这是代码......

Imports Microsoft.Office.Interop

Public Class ThisAddIn

Dim strFolderPath As String

Private Sub ThisAddIn_Startup() Handles Me.Startup
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub Application_Startup() Handles Application.Startup

    Dim MyApp As Outlook.Application = New Outlook.Application
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim MyEmails As Integer = MyInbox.Items.Count
    Dim MyEMail As Outlook.MailItem
    Dim MyCount As Integer
    Dim MySubFolder As Outlook.Folder = GetMyFolder("Outlook (Gary)\Kickabout")
    Stop
    For MyCount = MyEmails To 1 Step -1
        MyEMail = MyInbox.Items(MyCount)
        If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
            If MyEMail.Attachments.Count &gt; 0 Then
                MySubFolder = GetMyFolder("Outlook (Gary)\Kickabout\Attachments")
            End If
            MyEMail.Move(MySubFolder)
        End If
    Next
End Sub

Function GetMyFolder(FolderPath)
    ' folder path needs to be something like 
    '   "Public Folders\All Public Folders\Company\Sales"
    Dim aFolders
    Dim fldr
    Dim i
    Dim objNS

    On Error Resume Next
    strFolderPath = Replace(FolderPath, "/", "\")
    aFolders = Split(FolderPath, "\")

    'get the Outlook objects
    ' use intrinsic Application object in form script
    objNS = Application.GetNamespace("MAPI")

    'set the root folder
    fldr = objNS.Folders(aFolders(0))

    'loop through the array to get the subfolder
    'loop is skipped when there is only one element in the array
    For i = 1 To UBound(aFolders)
        fldr = fldr.Folders(aFolders(i))
        'check for errors
        'If Err() &lt;&gt; 0 Then Exit Function
    Next
    GetMyFolder = fldr

    ' dereference objects
    objNS = Nothing
End Function
End Class
于 2012-10-05T12:27:14.847 回答