ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: dsd999

[原创] Outlook VBA开发第四讲-全部回复时带附件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-3 14:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
找这个功能找了很久了,谢谢楼主。

TA的精华主题

TA的得分主题

发表于 2012-3-27 18:55 | 显示全部楼层
我看了一下代码,其实楼主的代码很多都是不必要的,特别是工具栏中加入按钮,操作不当还会出现N多次按钮,完全可以删除,自己作一个按钮。
自定义工具栏-->命令-->宏-->拖到工具栏就行了(图标什么的都可以自己改,右键看看)。
另外,代码中有一句:
If Not objAtt.FileName Like "image???.???" Then
这个就把附件是以image开头的附件全部给略去了。
代码简化如下:
Sub vsoCommbandReplyAllWithAttach()

'出现错误时下一句代码继续运行
On Error Resume Next

Dim rpl As Outlook.mailItem
    Dim itm As Object
   
    Set itm = GetCurrentItem()
    If Not itm Is Nothing Then
        Set rpl = itm.ReplyAll
        CopyAttachments itm, rpl
        rpl.Display
    End If
   
    Set rpl = Nothing
    Set itm = Nothing

End Sub

Sub colInspectors_NewInspector(ByVal Inspector As Inspector)
      On Error Resume Next
     Dim objCommandBar As CommandBar
     Set objCommandBar = Inspector.CommandBars("ExcelClub")
     If (objCommandBar Is Nothing) Then
     Set objCommandBar = Inspector.CommandBars.Add("ExcelClub", msoBarTop, , True)
     Set vsoCommbandReplyAllWithAttachInspector = objCommandBar.Controls.Add(msoControlButton, , , , True)
     vsoCommbandReplyAllWithAttachInspector.Caption = "ReplayAll"
     vsoCommbandReplyAllWithAttachInspector.FaceId = 68
     vsoCommbandReplyAllWithAttachInspector.Style = msoButtonIconAndCaption
     objCommandBar.Visible = True
     Else
     Set vsoCommbandReplyAllWithAttachInspector = objCommandBar.Controls(1)
     End If
End Sub

Private Sub vsoCommbandReplyAllWithAttachInspector_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)

On Error Resume Next

Dim rpl As Outlook.mailItem
    Dim itm As Object
   
    Set itm = GetCurrentItem()
    If Not itm Is Nothing Then
        Set rpl = itm.ReplyAll
        CopyAttachments itm, rpl
        rpl.Display
    End If
    itm.Close olDiscard
    Set rpl = Nothing
    Set itm = Nothing

End Sub
'得到当前选择的邮件
Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application
        
    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select
   
    Set objApp = Nothing
End Function

'复制附件,先拷贝附件到临时目录,再添加附件
Sub CopyAttachments(objSourceItem, objTargetItem)
    Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
   strPath = fldTemp.Path & "\"
   For Each objAtt In objSourceItem.Attachments
      strFile = strPath & objAtt.FileName
      objAtt.SaveAsFile strFile
      objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
      fso.DeleteFile strFile
   Next

   Set fldTemp = Nothing
   Set fso = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2012-3-27 18:57 | 显示全部楼层
Set rpl = itm.ReplyAll就是全部回复,所以写成这样Set rpl = itm.Reply,就是回复,而不是全部回复。

TA的精华主题

TA的得分主题

发表于 2012-3-27 19:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还忘记删一段了。哈哈。。
简化如下:
Sub ReplyWithAttachments()
    Dim rpl As Outlook.MailItem
    Dim itm As Object
   
    Set itm = GetCurrentItem()
    If Not itm Is Nothing Then
        Set rpl = itm.ReplyAll
        CopyAttachments itm, rpl
        rpl.Display
    End If
   
    Set rpl = Nothing
    Set itm = Nothing
End Sub

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application
        
    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select
   
    Set objApp = Nothing
End Function

Sub CopyAttachments(objSourceItem, objTargetItem)
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
   strPath = fldTemp.Path & "\"
   For Each objAtt In objSourceItem.Attachments
      strFile = strPath & objAtt.FileName
      objAtt.SaveAsFile strFile
      objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
      fso.DeleteFile strFile
   Next

   Set fldTemp = Nothing
   Set fso = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2014-6-14 12:29 | 显示全部楼层
2007版的OUTLOOK打开MAIL没有按钮,如何添加,请教了!!!!

TA的精华主题

TA的得分主题

发表于 2012-9-2 21:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下載試用,謝謝分享{:soso_e179:}{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2012-10-24 08:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-21 09:15 | 显示全部楼层
需要,需要,谢谢楼主。正在找这方面的资料。

TA的精华主题

TA的得分主题

发表于 2013-1-14 10:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-1-18 15:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mirlean 发表于 2012-3-27 18:55
我看了一下代码,其实楼主的代码很多都是不必要的,特别是工具栏中加入按钮,操作不当还会出现N多次按钮,完 ...

老大 我在自己加按钮的时候  想自己制作一个按钮  但是找不到这些图标存储的位置 没有办法选择 帮助看看在哪里吗

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 23:44 , Processed in 0.033809 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表