2017-08-28 12 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

那麼你目前的問題是什麼? –

相關問題