Удалить элементы, используя значения поля ввода

Я пытаюсь написать макрос, который запрашивает у конечного пользователя число, а затем очищает папку «Удаленные» от всего, что старше указанного количества дней.

Приведенный ниже код работает, если я меняю папку на «Входящие» или «Отправленные».

Я пробовал oItems.Item(i).ReceivedTime и получаю то же сообщение об ошибке.

Sub ClearDeletedItems()
 Dim oDeletedItems As Outlook.Folder
 Dim oFolders As Outlook.Folders
 Dim oItems As Outlook.Items
 Dim i As Long
 Set oDeletedItems = 
Application.Session.GetDefaultFolder(olFolderDeletedItems)
 Set oItems = oDeletedItems.Items
 days = CInt(InputBox("How many days of Deleted Items do you want to 
 keep?"))

For i = oItems.Count To 1 Step -1
    If DateDiff("d", oItems.Item(i).SentOn, Now) > days Then
    oItems.Item(i).Delete
 End If
 Next
End Sub

Я получаю сообщение об ошибке 438 — объект не поддерживает это свойство или метод.

Вы получаете одну и ту же ошибку как с ReceivedTime, так и с SentOn? Просто любопытно, основываясь на вашем комментарии о том, что вы пытались ReceivedTime безуспешно, и код показывает, что вы используете свойство SentOn

pstrjds 10.06.2019 18:15

Вы получаете эту ошибку в тестовой среде, где вы знаете, что папка DeletedItems содержит только сообщения электронной почты? Я не связывался с Outlook и API в течение нескольких лет, но, если я правильно помню, вы можете иметь встречи и элементы собраний в папке удаленных элементов. По сути, при отладке вы убедились, что когда вы видите эту ошибку, вы имеете дело с почтовым отправлением, а не с другим типом отправления?

pstrjds 10.06.2019 18:21

Я получаю ту же ошибку как с ReceivedTime, так и с SentOn.

KMOR87 10.06.2019 18:32

Папка DeletedItems содержит только почтовые элементы, у меня есть небольшое количество для тестирования.

KMOR87 10.06.2019 18:33

И вы убедились, что объект, на который вы смотрите, когда вы получаете эту ошибку, на самом деле является MailItem, верно?

pstrjds 10.06.2019 18:36

Полное раскрытие - на этой неделе я изучил VBA, начальный уровень. Не уверен, как я это делаю, любые указатели приветствуются

KMOR87 10.06.2019 18:46

Вы можете выполнить функцию в отладчике и проверить каждое значение перед его обработкой. Я подозреваю, что в вашем коде происходит то, что вы нажимаете на элемент, который не является MailItem, и поэтому он имеет ожидаемые свойства, и поэтому ваш код дает сбой. Пройдитесь с помощью отладчика и проверьте, что представляет собой каждый элемент, или вы можете добавить оператор if, чтобы предотвратить просмотр свойств не-MailItems. Кроме того, вы должны прочитать об обработке ошибок в VBA - excelmacromastery.com/vba-error-handling/#Runtime_Errors, и я рекомендую погуглить "как отлаживать программу VBA"

pstrjds 10.06.2019 19:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как насчет следующего....

Option Explicit
Public Sub Example()
    Dim DeletedFolder As Outlook.MAPIFolder
    Set DeletedFolder = Application.GetNamespace("MAPI" _
                                  ).GetDefaultFolder(olFolderDeletedItems)

    Dim NumDays As String
        NumDays = InputBox(prompt: = "Enter the number of days", _
              Title: = "Enter the number of days", Default: = "Enter number here")
              Debug.Print NumDays 'Immediate Window
        If Trim(NumDays) = vbNullString Then Exit Sub


    If Not IsNumeric(NumDays) Then
        MsgBox "You must enter a numerical value."
        Exit Sub
    End If

    Dim lngDateDiff As Long
        lngDateDiff =  Now -  NumDays
    Dim Filter As String
        Filter = "[SentOn]  < '" & Month(lngDateDiff) & _
                               "/" & Day(lngDateDiff) & _
                               "/" & Year(lngDateDiff) & "'"

    Dim Items As Outlook.Items
    Set Items = DeletedFolder.Items.Restrict(Filter)

    Debug.Print Items.Count  'Immediate Window

'   // Loop through backwards
    Dim i As Long
    For i = Items.Count To 1 Step -1
        DoEvents
        Debug.Print Items(i) 'Immediate Window
'       Items.Remove i ' un-comment to delete items
    Next

    Set DeletedFolder = Nothing
    Set Items = Nothing
End Sub

К сожалению, при использовании этого ничего не происходит, ничего не удаляется, независимо от того, какой номер я ввожу (в папке есть электронная почта за годы) - Debug.Print Items.Count(i) всегда возвращается с 0

KMOR87 11.06.2019 16:31
Debug.Printer Filter возвращает «31.12.1999», если я ввожу значение 1 в приглашении InputBox.
KMOR87 11.06.2019 17:17

снимите запятую со следующей строки - Items.Remove i

0m3r 12.06.2019 18:32

Другие вопросы по теме

Как получить график занятости Outlook с помощью microsoft-graph sdk php
Есть ли способ динамически переименовывать темы входящих писем после содержимого вложения?
Значение «области», используемое при получении токена OAuth для чтения электронной почты Outlook
Сохраните файл Excel, содержащий строку из Outlook2007
Как применить несколько категорий на основе каждого типа файлов вложений?
Есть ли способ преобразовать активный формат документа (docm) в docx при прикреплении его к электронной почте в Outlook
Почему моя команда надстройки Office без пользовательского интерфейса не отвечает, в то время как та же команда, отправленная из области задач, работает?
Взаимодействие с Outlook в .NET Core 3.0?
Добавление вложения в электронное письмо
Найдите данные из Outlook в электронной таблице Excel, затем скопируйте найденную ячейку (ячейка общежития рядом с найденной здесь)