我想运行一个宏做以下步骤:-只保存PDF附件到硬盘驱动器-保存它与一个修订名文件名& 域名.这里是代码,我从开源搜索和混合在一起.任何帮助是感激。
Public Sub Download_Attachments()
Dim ns As NameSpace
Dim olFolder_Inbox As Folder
Dim olMail As MailItem
Dim olAttachment As Attachment
Dim strFolderPath As String
Dim strFileName As String
Dim strSenderAddress As String
Dim strSenderDomain As String
Dim fso As Object
strFolderPath = "C:\"
Set ns = GetNamespace("MAPI")
Set fso = CreateObject("Scripting.FileSystemObject")
Set olFolder_Inbox = Application.ActiveExplorer.CurrentFolder
Set olMail = Application.ActiveWindow.CurrentItem
'Get sender domain
strSenderAddress = olMail.SenderEmailAddress
strSenderDomain = Right(strSenderAddress, Len(strSenderAddress) - InStr(strSenderAddress, "@"))
For Each olMail In olFolder_Inbox.Items
If TypeName(olMail) = "MailItem" And olMail.Attachments.Count > 0 Then
For Each olAttachment In olMail.Attachments
Select Case UCase(fso.GetExtensionName(olAttachment.FileName))
Case "PDF", "pdf"
olAttachment.SaveAsFile strFolderPath & strFileName
Case Else
'skip
End Select
Next olAttachment
End If
Next olMail
Set olFolder_Inbox = Nothing
Set fso = Nothing
Set ns = Nothing
End Sub
下面这行代码检索的是资源管理器窗口中的活动文件夹,而不是收件箱中的。Outlook可以用任何活动文件夹启动,你可以把文件夹名指定到Outlook.exe文件中。要获得默认的文件夹(收件箱),你需要使用的是 NameSpace.GetDefaultFolder 方法,返回一个 Folder
对象,表示当前配置文件的请求类型的默认文件夹;例如,获取当前登录用户的默认日历文件夹。例如,下面的示例代码使用 CurrentFolder
属性,将显示的文件夹更改为用户的默认文件夹。Inbox
文件夹中的所有项目。
Sub ChangeCurrentFolder()
Dim myNamespace As Outlook.NameSpace
Set myNamespace = Application.GetNamespace("MAPI")
Set Application.ActiveExplorer.CurrentFolder = myNamespace.GetDefaultFolder(olFolderInbox)
End Sub
那么其实并不建议在文件夹中的所有项目上进行迭代。
For Each olMail In olFolder_Inbox.Items
相反,你需要使用 Find
FindNext
或 Restrict
方法来获取符合您条件的物品。在下面的文章中阅读更多关于这些方法的内容。
最后,您感兴趣的部分是 保存为文件 的方法 Attachment
类,将附件保存到指定的路径。
olAttachment.SaveAsFile strFolderPath & domainName & strFileName
确保传递一个限定的文件路径作为参数. 我建议在调试器下运行这段代码,看看传递了什么值。