【发布时间】:2021-08-04 22:56:21
【问题描述】:
下午好,
我正在尝试找到一种方法来实现以下项目:
当我收到一封带有附件且主题中有特定单词的电子邮件时,请创建一个文件夹并将附件下载到该文件夹。
但到目前为止,我只收到一个错误“424” - 需要在线对象:
If TypeName(olMail) = "Mailterm" And myMail.Subject Like "*" & "prueba" & "*" And olMail.Attachments.Count > 0 Then
如果我删除该部分:
And myMail.Subject Like "*" & "prueba" & "*"
然后再次运行,错误消失了,但是我得到一个错误:
运行时错误“13”: 类型不匹配
突出显示:
Next olMail
我不是 VBA 方面的专家,但如果您能帮助我,我们将不胜感激。
Option Explicit
Sub Download_Attachments()
Dim ns As NameSpace
Dim olFolder_Inbox As Folder
Dim olMail As Object
Dim olAttachment As Attachment
Dim fso As Object
Dim File_Saved_Folder_Path As String
Dim sFolderName As String
sFolderName = Format(Now, "yyyyMMdd")
File_Saved_Folder_Path = "C:\Users\agonzalezp\Documents\prueba" & "\" & sFolderName
Set ns = GetNamespace("MAPI")
Set olFolder_Inbox = ns.GetDefaultFolder(olFolderInbox)
Set fso = CreateObject("Scripting.FileSystemObject")
For Each olMail In olFolder_Inbox.Items
If TypeName(olMail) = "MailItem" Then
If olMail.Subject Like "*" & "prueba" & "*" Then 'And olMail.Attachments.Count > 0
fso.CreateFolder (File_Saved_Folder_Path)
For Each olAttachment In olMail.Attachments
Select Case UCase(fso.GetExtensionName(olAttachment.FileName))
Case "XLSX", "XLSM"
olAttachment.SaveAsFile (File_Saved_Folder_Path)
End Select
Next olAttachment
End If
End If
Next olMail
Set olFolder_Inbox = Nothing
Set ns = Nothing
Set fso = Nothing
End Sub
【问题讨论】:
-
myMail是Nothing。您需要在模块顶部使用Option Explicit来标记它,因为它是一个未声明的变量。 -
收件箱中的项目不一定是
MailItems,所以你不能使用Dim olItem As MailItem。 -
VBA 不会短路,因此除了检查项目是否为
MailItem之外,您还需要嵌套If来处理任何其他条件。第一个If应该只检查类型。 -
'myMail.Subject' 不应该是 olMail.Subject' 吗?
-
@dbmitch 感谢您的赞赏,我一直在混合代码并没有修改那部分。
标签: vba outlook type-mismatch