Ниже приведен код для ответа на все сообщения электронной почты.

«Ошибка времени выполнения 13, несоответствие типа»

Когда он переходит к следующему (для каждого следующего цикла).

Я установил правило для электронной почты, полученной сегодня. Когда дело доходит до следующей (следующей даты), отображается сообщение об ошибке.

Я отлаживал, он остановил сообщение об ошибке до сегодняшнего дня.

sub fwdmail ()
dim i as long
dim otlk as outlook.application
dim nmspc as outlook.namespace
dim olmail as Outlook.MailItem
dim objfolder as Outlook.MAIPfolder
dim oreply as Outlook.MailItem

set otlk=New Outlook.Applicaiton
Set Nmsp=otlk.GetNamespace("MAPI")
Set objfolder=nmspc.getdefaultFolder("olFolderInbox).Folder("notice")
for each olmail in objfolder.Items
  if olmail.ReceivedTime>=Format(Date, "YYYY/MM/DD") then
    ' do the stuff here
  end if
next

Я устал проверять, есть ли тип mailitem, но получил то же сообщение об ошибке.

for each olmail in objfolder.Items
   if typeof olmail is outlook.item then

     if olmail.ReceivedTime>=Format(Date, "YYYY/MM/DD") then
     ' do the stuff here
      end if
   end if
next
0
mei 6 Дек 2019 в 18:55

2 ответа

Я бы посоветовал сравнить формат полученного времени с форматом, с которым вы сравниваете.

0
wakgtech 6 Дек 2019 в 19:59
Наоборот. Отбросьте Format и сравните две даты.
 – 
BigBen
6 Дек 2019 в 20:57

Объявите переменную, которая разрешает все типы элементов. Проверьте это, чтобы узнать, является ли это почтовым элементом.

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration

Sub fwdmail()

Dim olNmspc As NameSpace
Dim olFolder As folder

Dim olItm As Object         ' <-- Items may not be mailitems
Dim olMitm As MailItem

Set olNmspc = GetNamespace("MAPI")

' Multiple lines allows easier troubleshooting
Set olFolder = olNmspc.GetDefaultFolder(olFolderInbox)
Set olFolder = olFolder.folders("notice")

For Each olItm In olFolder.Items

    If TypeOf olItm Is MailItem Then    ' <-- test if item is a mailitem

        Set olMitm = olItm

        If olMitm.ReceivedTime >= Format(Date, "YYYY/MM/DD") Then
            ' do the stuff here
            Debug.Print "olMitm.Subject......: " & olMitm.Subject
            Debug.Print " olMitm.ReceivedTime: " & olMitm.ReceivedTime
            Debug.Print " Format date........: " & Format(Date, "YYYY/MM/DD")
            Debug.Print
        End If

    End If

Next

End Sub

0
niton 18 Янв 2020 в 22:04