2017-08-28 13 views
0

我很新的vb.net和Outlook加载项,在一个项目上构建一个Outlook加载项(使用VisualStudio 2017的VSTO),在这里我得到这个错误即使经过数小时的搜索,也没有得到任何线索,可能不会朝着正确的方向发展。这就是为什么林在这里寻求你的帮助。谢谢Folders.Item(FolderName).Folders:错误:System.Runtime.InteropServices.COMExceptions:尝试的操作失败。一个对象无法找到

这是我得到的错误,我已经指出错误出现的代码行。

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

更新:

我在测试一点点,发现如果我不这样行dFolder.Name = "X" + dNamedName = dFolder.Name内观而手动重命名名称添加数据文件部分有问题重命名根文件夹,则全功能工作正常,没有任何错误。

注:这段代码的目的是从一个文件夹复制邮件到另一个地方都根文件夹的名字是一样的,因为目标文件夹仅仅是源文件夹的镜像副本,而对于这个邮件没有如果复制两个文件夹的名称都是相同的,这就是为什么我在添加到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) 
+0

请不要用VBA标签VB.NET代码。 VB.NET与VBA无关。 –

+0

单击“查看详细信息”并将堆栈跟踪粘贴到您的帖子中。这将比这个屏幕截图更有帮助。 –

+0

很可能,'dName'指的是一个不存在的文件夹。 –

回答

1

的错误是非常明确的 - 与特定名称的文件夹不存在。

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

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

我测试了一下,发现如果我没有重新命名根文件夹在这一行有问题'dFolder.Name =“X”+ dName','dName = dFolder.Name'而不是在Outlook添加数据文件部分手动重命名名称,那么完整的功能正常工作,没有任何错误。 – Hayan

+0

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

+0

那么你目前的问题是什么? –

相关问题