【问题标题】:Reference to shared folder lost after first run首次运行后对共享文件夹的引用丢失
【发布时间】:2020-07-09 19:18:59
【问题描述】:

我想将电子邮件从共享收件箱移动到同一收件箱中的共享子文件夹。

我有两个邮箱,第二个是共享的。

"Outbound TTA" = 第二个共享邮箱的名称。

"réception" = "Outbound TTA" 中收件箱文件夹的名称

"MyFolderEmails" = "réception" 文件夹中子文件夹的名称。

代码只运行一次

第二次出现

运行时错误“-2147221233 (8004010f)”:尝试的操作失败。找不到对象。

错误出现在Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")

Public Sub test2()
    MoveSelectionToFolder
End Sub


Private Sub MoveSelectionToFolder()
    Dim NS As nameSpace

    Dim sharedInbox As folder
    Dim sharedDestinationFolder As folder

    Dim sharedItems As Selection

    Dim i As Long

    Set NS = Application.GetNamespace("MAPI")
    Set sharedInbox = NS.Folders("Outbound TTA").Folders("réception")
    Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")
        
    Set sharedItems = ActiveExplorer.Selection

    For i = sharedItems.Count To 1 Step -1
        sharedItems(i).Move sharedDestinationFolder
    Next i

    Set NS = Nothing
    Set sharedItems = Nothing
    Set sharedInbox = Nothing
    Set sharedDestinationFolder = Nothing

End Sub

另外,即使是相似的代码也有相同的命运,只能工作一次;之后他们显示错误。

【问题讨论】:

  • 这很令人费解。您的代码似乎没有任何问题。在移动项目之前,请尝试在循环 If TypeName(sharedItems(i)) = "MailItem" Then 中添加此条件。还有,你说“第一次”和“第二次”,什么时候又变成“第一次”了?我的意思是它什么时候再次起作用?是在您退出Outlook并重新启动它的时候吗?我只是在想你可以在代码的开头重置一些东西。
  • 是的,在我关闭并重新启动 Outlook 后,它再次起作用。是的,重置是解决方案。但是要重置什么?我在这个问题上待了一个星期,无法超越这一点。工作一次,之后出错。问题是它没有“看到”“接收”收件箱中的任何子文件夹(我的意思是代码)。这个问题在我的一个学院的另一台计算机上是相同的。所以前景非常好......
  • 尝试通过在Set NS = Application.GetNamespace("MAPI") 之后添加此行NS.Logon "", "", False, True 来刷新您的收件箱。来自access-programmers.co.uk/forums/threads/…
  • 我确实这样做了,行为是一样的:工作一次,之后不再工作(它给出了与上面相同的错误)。

标签: vba error-handling outlook move shared-directory


【解决方案1】:

好的,尝试将文件夹的引用保存为像这样的静态变量。 (重启你的outlook,然后使用代码)

' Set it as a static variable
Global sharedDestinationFolder As Folder

Public Sub test2()
    MoveSelectionToFolder
End Sub


Private Sub MoveSelectionToFolder()
    Dim NS As Namespace

    Dim sharedInbox As Folder
    'Dim sharedDestinationFolder As Folder

    Dim sharedItems As Selection

    Dim i As Long
       
    If sharedDestinationFolder Is Nothing Then
        Set NS = Application.GetNamespace("MAPI")
        Set sharedInbox = NS.Folders("Outbound TTA").Folders("réception")
        Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")
        
        MsgBox "Setting destination folder"
    End If
        
    Set sharedItems = ActiveExplorer.Selection

    For i = sharedItems.Count To 1 Step -1
        If TypeName(sharedItems(i)) = "MailItem" Then
            sharedItems(i).Move sharedDestinationFolder
        End If
    Next i

    Set NS = Nothing
    Set sharedItems = Nothing
    Set sharedInbox = Nothing
    'Set sharedDestinationFolder = Nothing

End Sub

理论上,第一次运行代码时,您会看到消息框。当您再次运行它时,它不会是 Nothing,因此,它应该具有对正确文件夹的有效引用(再次在理论上)

【讨论】:

  • 第一次运行:一切正常。消息框显示:设置目标文件夹,邮件按计划移动。第二次:出现错误。注意:就像第二次 sharedDestinationFolder 什么都不是...
  • 对不起,我的错。再试一次。我忘了删除最后一行。请记住,您是手动将 sharedDestinationFolder 设置为 Nothing
  • 我可以说我爱你吗?有用 ! :)
  • 你可以,但现在我必须向我妻子隐藏通勤者:) 很高兴它成功了
  • :)) 这很特别。这是许多有相同问题的解决方案。我是一位经验丰富的程序员,但我根本找不到解决方案。这也是我第一次在野外得到另一位程序员的帮助 :) 非常非常感谢您的宝贵时间。我承诺与有需要的人一样:)
猜你喜欢
  • 2012-11-17
  • 2015-05-17
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多