【发布时间】:2018-02-06 05:28:53
【问题描述】:
我是 vb.net 和 Outlook 插件的新手,正在开发一个构建 Outlook 插件的项目(使用 VisualStudio 2017 的 VSTO),我遇到了这个错误,我什至没有任何线索经过数小时的谷歌搜索,我可能没有朝着正确的方向前进。这就是为什么我在这里寻求您的帮助。谢谢
这是我遇到的错误,我已经指出了代码中出现错误的行。
错误:System.Runtime.InteropServices.COMExceptions:尝试的操作失败。找不到对象。
更新:
我正在测试一点,发现如果我没有在这一行中重命名根文件夹有问题 dFolder.Name = "X" + dName , dName = 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