【问题标题】:Folders.Item(FolderName).Folders : Error: System.Runtime.InteropServices.COMExceptions: The attempted operation failed. An object could not be foundFolders.Item(FolderName).Folders:错误:System.Runtime.InteropServices.COMExceptions:尝试的操作失败。找不到对象
【发布时间】:2018-02-06 05:28:53
【问题描述】:

我是 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

($exception).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)

【问题讨论】:

  • 请不要用 VBA 标记 VB.NET 代码。 VB.NET 与 VBA 无关。
  • 单击“查看详细信息”并将堆栈跟踪粘贴到您的帖子中。它会比那张截图更有帮助。
  • 很可能,dName 指的是一个不存在的文件夹。
  • 不声明空字符串也一样,报同样的错误

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


【解决方案1】:

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

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

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

【讨论】:

  • 我进行了一些测试,发现如果我没有在这一行中重命名根文件夹有问题 dFolder.Name = "X" + dNamedName = dFolder.Name 而不是在 Outlook 添加数据文件部分手动重命名名称,然后是完整的功能正常工作,没有任何错误。
  • 注意:此代码的目的是将电子邮件从一个文件夹复制到另一个文件夹,其中两个根文件夹名称相同,因为目标文件夹只是源文件夹的镜像副本如果两个文件夹名称相同,则不会复制此电子邮件,这就是为什么我在添加到 Store Session 时必须重命名目标文件夹,以便系统可以将源文件夹和目标文件夹识别为两个不同的位置。我不知道为什么它没有在 dFolders = oNspace.Folders.Item(dName).Folders 中获得重命名值。请帮忙。
  • 那么您当前的问题是什么?
  • 每当我添加一些字符串来重命名根文件夹/PST 以区分相同的名称(如 work.pst 和 work_backup.pst)时,它不需要像这样 dFolders = oNspace.Folders.Item(work_backup).Folders 和给出错误An object could not be found.
  • 您需要更改 Store.DisplayName.,但它在 Outlook 对象模型中是只读的。
猜你喜欢
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2018-09-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多