1

我很难让 Outlook 2010 VBA 识别我直接从网络复制的宏。该宏应该从电子邮件中提取附件的副本并将其保存到本地文件夹。它在几天前工作,但现在,当我尝试在 VBA 中运行代码时(itm as Outlook.MailItem),Outlook 无法将其识别为任何类型的宏。当我把它拿出来只留下括号时,它显示为一个宏,但我得到一个 424 object required 错误并且无法运行宏。如果我这样做是该死的,如果我不这样做是该死的。

这是原始代码:

Public Sub saveAttachtoDisk(itm as Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder as String

saveFolder = "c:\temp\"
    For Each objAtt In itm.Attachments

        objAtt.SaveAsFile savefolder & "\" & objAtt.DisplayName

        Set objAtt = Nothing

    Next

End Sub

我已经尝试了一切,但似乎没有任何效果。有任何想法吗?

4

2 回答 2

1

“那个代码会是什么样子?它会去哪里?”

您可以通过单击 Alt-F11 打开 Outlook Visual Basic 编辑器,然后将此代码粘贴到之前版本的宏上。它目前可能在“此 Outlook 会话”中。

您可以按照您一直在尝试的方式从宏对话框中运行它。或者,您可以通过单击文件>选项>自定义功能区将其附加到功能区按钮。您还必须在“开发人员”选项卡中将“宏安全性”设置为“所有宏的通知”。当您在任何给定的 Outlook 会话中第一次单击它时,它将要求您确认是否可以安全运行。

Public Sub saveAttachtoDisk()

Dim saveFolder As String
Dim objAtt As Outlook.Attachment
Dim itm As Outlook.MailItem

saveFolder = "c:\temp\"
For Each itm In ActiveExplorer.Selection
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
        Set objAtt = Nothing
    Next objAtt
Next itm
End Sub

此子将附件保存在当前打开的文件夹中的所有选定项目中。您可以将其调整为仅执行当前选定文件夹或静态文件夹(例如收件箱)中的所有项目。为此,您需要熟悉 Outlook 对象模型。JimmyPena 的回答给出了一个使用所有收件箱项目的例子。

于 2012-08-08T20:05:31.977 回答
1

由于代码包含一个参数,因此您需要通过从另一个过程调用此过程来传递该参数。前任:

Sub CallMyProcedure()

Dim itms As Outlook.Items
Dim itm As Object

' loop through default Inbox items
Set itms = Session.GetDefaultFolder(olFolderInbox).Items

For Each itm In itms
  If TypeName(itm) = "MailItem" Then
    ' your code is called here
    saveAttachtoDisk itm
  End If
Next itm

End Sub

是您需要调用的过程,由于它没有参数,您应该能够在宏对话框中看到它。

于 2012-08-08T20:19:12.133 回答