Folders.Item(FolderName).Folders:Error:System.Runtime.InteropServices.COMExceptions:尝试的操作失败。无法找到对象

时间:2017-08-28 21:21:38

标签: visual-studio vsto outlook-addin outlook-vba

我是vb.net和outlook加载项中的新手,正在开发一个项目来构建一个Outlook加载项(使用VisualStudio 2017的VSTO),我在这里得到了这个错误即使经过数小时的谷歌搜索,任何线索,可能是我没有正确的方向。这就是为什么我来这里寻求你的帮助。感谢

以下是我遇到的错误,并且我已在错误出现的代码中指出该行。

错误:System.Runtime.InteropServices.COMExceptions:尝试的操作失败。无法找到对象。

更新

我正在测试一下,发现如果我不在这行dFolder.Name = "X" + dNamedName = dFolder.Name中重新命名根文件夹,而是在Outlook添加数据文件部分手动重命名名称,然后完整功能正常,没有任何错误。

注意:此代码的目的是将电子邮件从一个文件夹复制到另一个文件夹,其中两个根文件夹名称相同,因为目标文件夹只是源文件夹的镜像副本而且此电子邮件是如果两个文件夹名称相同,则不复制,这就是为什么我在添加到Store Session时必须重命名目标文件夹,以便系统可以将源文件夹和目标文件夹识别为两个不同的位置。我不知道为什么它没有获得dFolders = oNspace.Folders.Item(dName).Folders中的重命名值。请帮忙。

即可。

Public Shared Sub SetSrcAndDst(Src As String, Dst As String)
    Dim oApp As Outlook.Application
    Dim oNspace As Outlook.NameSpace

    Dim sFolders As Outlook.Folders
    Dim sFolder As Outlook.Folder

    oApp = Globals.ThisAddIn.Application
    oNspace = oApp.GetNamespace("MAPI")
    sFolders = oNspace.Folders.Item(Src).Folders

    Dim oStores As Outlook.Stores
    Dim oStore As Outlook.Store

    Dim dPath As String
    Dim dName As String

    Dim dFolders As Outlook.MAPIFolder
    Dim dFolder As Outlook.MAPIFolder

    oStores = oApp.Session.Stores
    oNspace.AddStore(Dst)
    dName = ""

    For Each oStore In oStores
        dFolder = oStore.GetRootFolder
        dPath = oStore.FilePath
        If dPath = Dst Then
            dName = dFolder.FolderPath
            dName = dName.TrimStart({"\"c})
            dFolder.Name = "X" + dName
            dName = dFolder.Name
        End If
    Next


    '''
    ''' Getting error in this below line (dFolders = oNspace.Folders.Item(dName).Folders)
    ''' System.Runtime.InteropServices.COMExceptions: 
    ''' The attempted operation failed. An object could not be found.
    '''

    dFolders = oNspace.Folders.Item(dName).Folders

    For Each sFolder In sFolders
        For Each dFolder In dFolders
            If sFolder.Name = dFolder.Name Then
                Call CopyMail(sFolder, dFolder)
            End If
        Next
    Next
End Sub

enter image description here

(适用$除外).StackTrace

 at Microsoft.Office.Interop.Outlook.FoldersClass.get_Item(Object Index)
 at AutoBackup.ThisAddIn.SetSrcAndDst(String Src, String Dst) in E:\AutoBackup\ThisAddIn.vb:line 56
 at AutoBackup.SettingsForm.PstConfirmBtn_Click(Object sender, EventArgs e) in E:\AutoBackup\SettingsForm.vb:line 37
 at System.Windows.Forms.Control.OnClick(EventArgs e)
 at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
 at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
 at System.Windows.Forms.Control.WndProc(Message& m)
 at System.Windows.Forms.ButtonBase.WndProc(Message& m)
 at System.Windows.Forms.Button.WndProc(Message& m)
 at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

1 个答案:

答案 0 :(得分:1)

错误非常明确 - 具有给定名称的文件夹不存在。

作为测试,遍历所有根文件夹以确保具有给定名称的文件夹确实存在:

for each vFolder in oNspace.Folders
  MsgBox fFolder.Name
next