если есть эта папка, передайте еще, создайте ее - PullRequest
0 голосов
/ 11 июля 2019

Я хотел бы создать код, если в outlook есть папка, а не просто пропустить и запустить остальную часть кода, иначе создайте папку, чем просто запустите остальную часть кода

    Sub MoveItems()

 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myitems As Outlook.Items
 Dim myitem As Object
 Dim objApp As Outlook.Application
 Dim objFolder As Outlook.Folder
 Dim objTestFolder As Outlook.Folder

    Set objFolder = objNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)

    On Error Resume Next
    Set objTestFolder = objFolder.Folders("test")
    If objTestFolder Is Nothing Then
        Set objTestFolder = objFolder.Folders.Add("test", Outlook.OlDefaultFolders.olFolderInbox)
    End If
    On Error GoTo 0

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myitems = myInbox.Items
 Set myDestFolder = myInbox.Folders("test")

 Set oDeletedItems = Application.Session.GetDefaultFolder(olFolderDeletedItems)
 Set myitems = oDeletedItems.Items

 Debug.Print myitems.Count

 For I = myitems.Count To 1 Step -1
    myitems.Item(I).Move myDestFolder

 Next

End Sub

Ответы [ 3 ]

0 голосов
/ 11 июля 2019

Обычно вы должны использовать следующую конструкцию:

If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

Итак, используйте вместо этого следующий код:

Sub MoveItems()

 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myitems As Outlook.Items
 Dim myitem As Object
 Dim objApp As Outlook.Application
 Dim objFolder As Outlook.Folder
 Dim objTestFolder As Outlook.Folder

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)

    On Error Resume Next
    Set objTestFolder = myInbox.Folders("test")
    If objTestFolder Is Nothing Then
        Set myDestFolder = myInbox.Folders.Add("test", Outlook.OlDefaultFolders.olFolderInbox)
    End If
    On Error GoTo 0

 Set oDeletedItems = Application.Session.GetDefaultFolder(olFolderDeletedItems)
 Set myitems = oDeletedItems.Items

 Debug.Print myitems.Count

 For I = myitems.Count To 1 Step -1
    myitems.Item(I).Move myDestFolder

 Next

End Sub
0 голосов
/ 11 июля 2019

Как уже упоминалось, вам нужно использовать ключевое слово Set, чтобы назначить объект переменной.Следующий код сначала проверит, существует ли папка.Если нет, он создает один.

Dim objFolder As Outlook.Folder
Dim objTestFolder As Outlook.Folder

Set objFolder = objNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)

On Error Resume Next
Set objTestFolder = objFolder.Folders("test")
If objTestFolder Is Nothing Then
    Set objTestFolder = objFolder.Folders.Add("test", Outlook.OlDefaultFolders.olFolderInbox)
End If
On Error GoTo 0
0 голосов
/ 11 июля 2019

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/object-required-error-424

Вы не используете Set для назначения objFolder

В VBA Set требуется при назначении объектов переменной.

См .: Что на самом деле делает ключевое слово Set в VBA?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...