使用 PickFolder 引用文件夹时出现类型不匹配错误

Type Mismatch Error when referencing Folder with PickFolder

下面应该启动弹出式文件夹选择器,然后将当前项目移动到所选文件夹。

 Sub MoveItems()
     Dim myNameSpace As Outlook.NameSpace
     Dim myInbox As Outlook.Folder
     Dim mySubFolder As Outlook.Folder
     Dim myDestFolder As Outlook.Folder
     Dim myItem As Object

     Set myNameSpace = Application.GetNamespace("MAPI")
     Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
     Set mySubFolder = myNameSpace.PickFolder
     Set myDestFolder = myInbox.Folders(mySubFolder)
     Set myItem = GetCurrentItem()

     myItem.Move myDestFolder

End Sub

我在

行遇到类型不匹配问题
Set myDestFolder = myInbox.Folders(mySubFolder)

那一行应该是Set myDestFolder = mySubFolder

您可能还想使用 If mySubFolder Is Nothing Then Exit Sub 以防万一用户决定取消 myNameSpace.PickFolder 这样您就不会得到 run-time error

Option Explicit
Sub MoveItems()
     Dim myNameSpace As Outlook.NameSpace
     Dim myInbox As Outlook.Folder
     Dim mySubFolder As Outlook.Folder
     Dim myDestFolder As Outlook.Folder
     Dim myItem As Object

     Set myNameSpace = Application.GetNamespace("MAPI")
     Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
     Set mySubFolder = myNameSpace.PickFolder

    If mySubFolder Is Nothing Then Exit Sub

     Set myDestFolder = mySubFolder
     Set myItem = GetCurrentItem()

     myItem.Move myDestFolder

End Sub

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select

    Set objApp = Nothing
End Function

IsNothing Function

IsNothing returns True if the expression represents an object variable that currently has no object assigned to it; otherwise, it returns False.