ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8032|回复: 9

在outlook 2010 vba 中,如何获取自定义文件夹邮件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-6-23 11:40 | 显示全部楼层 |阅读模式
在outlook 2010 vba 中,如何获取自定义文件夹邮件?
比如:
  收件箱下有子文件夹a,a文件夹下有子文件夹c
  c文件夹下有很多邮件(如何获取c文件夹下的所有邮件)

TA的精华主题

TA的得分主题

发表于 2014-6-24 08:01 | 显示全部楼层
在本版块里有类似帖子  自己查找一下

TA的精华主题

TA的得分主题

发表于 2014-6-24 15:59 | 显示全部楼层
  1. Public Sub Cate()

  2.     '需引用Microsoft Outlook 14.0 Object Library

  3.    
  4.     Dim myOlApp As New Outlook.Application

  5.     Dim myNameSpace As Outlook.Namespace

  6.     Dim SFolder As Outlook.Folder

  7.     Dim spcFolder As Outlook.Folder

  8.     Dim SaimFolder As Outlook.Folder

  9.     Dim SItem As Outlook.MailItem


  10.     Set myOlApp = CreateObject("Outlook.Application")

  11.     Set myNameSpace = myOlApp.GetNamespace("MAPI")

  12.    
  13.     For i = 1 To myNameSpace.FolderS.Count

  14.         If myNameSpace.FolderS.Item(i).Name Like "邮箱名称*" Then

  15.             Set SFolder = myNameSpace.FolderS.Item(i)

  16.             Exit For

  17.         End If

  18.     Next

  19.    
  20.     For i = 1 To SFolder.FolderS.Count

  21.         If SFolder.FolderS.Item(i).Name = "Inbox" Then

  22.             Set spcFolder = SFolder.FolderS.Item(i)

  23.             Exit For

  24.         End If

  25.     Next


  26.     If Not SFolder Is Nothing Then

  27.         For i = spcFolder.Items.Count To 1 Step -1

  28.             Set SItem = spcFolder.Items(i)

  29.             SItem.Categories = "My Cate"

  30.             SItem.Save

  31.             

  32.             Set SItem = Nothing

  33.         Next

  34.     End If

  35. End Sub
复制代码
之前做的代码中的一段,供参考

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-25 10:41 | 显示全部楼层
likeslh 发表于 2014-6-24 15:59
之前做的代码中的一段,供参考

好像你这个程序 只能遍历到收件箱下的邮件,而无法遍历收件箱下的子文件夹邮件

TA的精华主题

TA的得分主题

发表于 2014-6-26 10:25 | 显示全部楼层
Sub ff()
    Dim dd As String
    dd = Outlook.ActiveExplorer.CommandBars("ExcelClub").Controls(1).text
    Dim currentf As folder   
    Set currentf = Application.ActiveExplorer.CurrentFolder      
    Call fsubf(currentf.Folders, dd)
End Sub

Public Sub fsubf(parentf As Folders, text As String)
    If parentf.Class = olFolders Then
        For n = 1 To parentf.Count
            Debug.Print parentf(n)
            If InStr(1, parentf(n), text) <> 0 Then
                Application.ActiveExplorer.SelectFolder (parentf(n))
                'Exit Sub
            End If
            Call fsubf(parentf(n).Folders, text)
        Next
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2014-6-26 10:26 | 显示全部楼层
上面的代码是按text搜索文件夹,用到了遍历,你可以参考下。

TA的精华主题

TA的得分主题

发表于 2014-6-26 10:41 | 显示全部楼层
dsd999 发表于 2014-6-26 10:25
Sub ff()
    Dim dd As String
    dd = Outlook.ActiveExplorer.CommandBars("ExcelClub").Controls(1) ...

版主这么复杂  这个是我的  指导下

  1. Sub GetSanderAdressAndBody()  '//获得收件箱的子文件夹的邮件  
  2.     Dim Application As outlook.Application
  3.     Dim myNamespace As NameSpace
  4.     Dim myFolder As MAPIFolder

  5.     Dim Folder As MAPIFolder
  6.     Dim iMail As outlook.MailItem


  7.     Dim ExcelApp
  8.     Set ExcelApp = GetObject("", "Excel.Application")
  9.     Set wbk = ExcelApp.Workbooks.Open("f:/测试中.xlsx")

  10.     Set wst = wbk.Sheets(1)

  11.     Set Application = New outlook.Application
  12.     Set myNamespace = Application.GetNamespace("MAPI")
  13.     'Set myFolder = MyNameSpace.PickFolder
  14.     Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)    '//获得收件箱文件夹
  15.     '// myNamespace.Folders.Count


  16.     For i = 1 To myFolder.Folders.Count

  17.         Set Folder = myFolder.Folders(i)

  18.         For Each iMail In Folder.Items

  19.             j = j + 1

  20.             wst.Cells(j, 5) = iMail.ReceivedTime    '//接收邮件日期时间

  21.             wst.Cells(j, 4) = Folder.Name    '//所在文件夹名称
  22.             wst.Cells(j, 1) = iMail.To    '//发件人
  23.             wst.Cells(j, 2) = iMail.CC    '//抄送人

  24.             wst.Cells(j, 3) = iMail.Body    '//正文
  25.         Next iMail

  26.     Next
  27.     wbk.Close True
  28.     Set iMail = Nothing
  29.     Set myFolder = Nothing
  30.     Set myNamespace = Nothing
  31.     Set Application = Nothing
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-6-27 11:07 | 显示全部楼层
yanfeiliuhen1 发表于 2014-6-25 10:41
好像你这个程序 只能遍历到收件箱下的邮件,而无法遍历收件箱下的子文件夹邮件

上面有两位的回复了,没细看,估计可以遍历。
我的代码已经从sFolder的子文件夹里找到了spcFolder,那spcFolder再去找自己的Folder,类推就行了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-27 15:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-1 08:56 | 显示全部楼层
闻启学 发表于 2014-6-26 10:41
版主这么复杂  这个是我的  指导下

你好!

我试了下您这段好像报错?不知道为什么...能不能帮忙看一下?谢谢!

http://club.excelhome.net/thread-1268687-1-1.html
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 22:11 , Processed in 0.031270 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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