【发布时间】:2015-06-01 12:16:07
【问题描述】:
我正在使用以下功能将选定的电子邮件移动到另一个文件夹。
错误提示“找不到对象。”
它第一次工作,但任何后续尝试都失败了:
Set TestFolder = SubFolders.Item(FoldersArray(i))
执行以下行时,当我在监视窗口中展开文件夹时,没有出现子文件夹:
Set TestFolder = Application.Session.Folders.Item(FoldersArray(0))
我正在从一个 sub 调用该函数:
Option Explicit
Private Item As Object, olkItem As Object
Private AutoReply As String
Private myDestFolder As Outlook.Folder, myInbox As Outlook.Folder
Private myNameSpace As Outlook.NameSpace
Sub ReplywithNote2()
Set myNameSpace = Application.GetNamespace("MAPI")
Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
Set myDestFolder = GetFolder("\\PO_Queries\Inbox\Completed")
For Each olkItem In Application.ActiveExplorer.Selection
With olkItem
If .Class = olMail Then
'.Move myDestFolder
End If
End With
Next
End Sub
功能:
Function GetFolder(ByVal FolderPath As String) As Outlook.Folder
Set GetFolder = Nothing
Dim TestFolder As Outlook.Folder
Dim FoldersArray As Variant
Dim i As Integer
'On Error GoTo GetFolder_Error
If Left(FolderPath, 2) = "\\" Then
FolderPath = Right(FolderPath, Len(FolderPath) - 2)
End If
'Convert folderpath to array
FoldersArray = Split(FolderPath, "\")
Set TestFolder = Application.Session.Folders.Item(FoldersArray(0))
If Not TestFolder Is Nothing Then
For i = 1 To UBound(FoldersArray, 1)
Dim SubFolders As Outlook.Folders
Set SubFolders = TestFolder.Folders
Set TestFolder = SubFolders.Item(FoldersArray(i))
If TestFolder Is Nothing Then
Set GetFolder = Nothing
End If
Next
End If
'Return the TestFolder
Set GetFolder = TestFolder
On Error GoTo 0
Exit Function
GetFolder_Error:
Set GetFolder = Nothing
Exit Function
End Function
当我重新启动 Outlook 时,它可以工作。我尝试将几个变量设置为 Nothing,执行“End”以希望重置相关变量。重新启动 Outlook 时会重置什么?
编辑 - 我已将范围缩小到移动线。移动项目后运行 sub 时会出现问题。
【问题讨论】:
-
工作正常,与我的测试 Sub。包含足够的代码以允许其他人重现该问题。 stackoverflow.com/help/mcve