首页 文章

Outlook VBA宏无法识别

提问于
浏览
1

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

这是原始代码:

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

我已经尝试了一切,似乎没有任何工作 . 有任何想法吗?

2 回答

  • 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
    

    This 是您需要调用的过程,因为它没有参数,您应该能够在宏对话框中看到它 .

  • 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的回答给出了一个使用所有收件箱项目的例子 .

相关问题