Vba 如何从outlook会议请求导出电子邮件地址

Vba 如何从outlook会议请求导出电子邮件地址,vba,outlook,outlook-2010,Vba,Outlook,Outlook 2010,我向所有公司(4000+)发送了outlook(2010)会议请求,现在我想向接受请求或暂时接受请求的公司发送一封额外的电子邮件 我该怎么做?当我点击功能区中的Contact Atentees-->New Email to Atentees时,它只会向所有公司发送回复,而不仅仅是那些接受回复的公司。我还尝试导出联系人,但它只能导出姓名别名,而不能导出整个电子邮件地址 有什么建议吗 谢谢在这里可以找到解决方案的基础 这里有一些小改动 Option Explicit Sub GetAttendee

我向所有公司(4000+)发送了outlook(2010)会议请求,现在我想向接受请求或暂时接受请求的公司发送一封额外的电子邮件

我该怎么做?当我点击功能区中的Contact Atentees-->New Email to Atentees时,它只会向所有公司发送回复,而不仅仅是那些接受回复的公司。我还尝试导出联系人,但它只能导出姓名别名,而不能导出整个电子邮件地址

有什么建议吗


谢谢

在这里可以找到解决方案的基础

这里有一些小改动

Option Explicit

Sub GetAttendeeList()

Dim objApp As Outlook.Application
Dim objItem As Object
Dim objAttendees As Outlook.Recipients
Dim objAttendeeReq As String
Dim objAttendeeOpt As String
Dim objOrganizer As String
Dim dtStart As Date
Dim dtEnd As Date
Dim strSubject As String
Dim strLocation As String
Dim strNotes As String
Dim strMeetStatus As String
Dim strCopyData As String
Dim strCount  As String

Dim ino, it, ia, ide

Dim x As Long
Dim ListAttendees As mailitem

'On Error Resume Next

Set objApp = CreateObject("Outlook.Application")
Set objItem = GetCurrentItem()
Set objAttendees = objItem.Recipients

On Error GoTo EndClean:

' Is it an appointment
If objItem.Class <> 26 Then
  MsgBox "This code only works with meetings."
  GoTo EndClean:
End If

' Get the data
dtStart = objItem.Start
dtEnd = objItem.End
strSubject = objItem.Subject
strLocation = objItem.location
strNotes = objItem.body
objOrganizer = objItem.Organizer
objAttendeeReq = ""
objAttendeeOpt = ""

Set ListAttendees = Application.CreateItem(olMailItem)  ' <---

' Get The Attendee List
For x = 1 To objAttendees.count
   strMeetStatus = ""
   Select Case objAttendees(x).MeetingResponseStatus
     Case 0
       strMeetStatus = "No Response (or Organizer)"
       ino = ino + 1
     Case 1
       strMeetStatus = "Organizer"
       ino = ino + 1
     Case 2
       strMeetStatus = "Tentative"
       it = it + 1

       ListAttendees.Recipients.Add objAttendees(x) ' <---

     Case 3
       strMeetStatus = "Accepted"
       ia = ia + 1

       ListAttendees.Recipients.Add objAttendees(x) ' <---

     Case 4
       strMeetStatus = "Declined"
       ide = ide + 1

   End Select

   If objAttendees(x).Type = olRequired Then
      objAttendeeReq = objAttendeeReq & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   Else
      objAttendeeOpt = objAttendeeOpt & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   End If
Next

 strCopyData = "Organizer: " & objOrganizer & vbCrLf & "Subject:  " & strSubject & vbCrLf & _
  "Location: " & strLocation & vbCrLf & "Start:    " & dtStart & vbCrLf & "End:     " & dtEnd & _
  vbCrLf & vbCrLf & "Required: " & vbCrLf & objAttendeeReq & vbCrLf & "Optional: " & _
  vbCrLf & objAttendeeOpt & vbCrLf & "NOTES " & vbCrLf & strNotes

 strCount = "Accepted: " & ia & vbCrLf & _
  "Declined: " & ide & vbCrLf & _
  "Tentative: " & it & vbCrLf & _
  "No response: " & ino

'Set ListAttendees = Application.CreateItem(olMailItem)
  ListAttendees.body = strCopyData & vbCrLf & strCount
  ListAttendees.Display

  ListAttendees.Recipients.ResolveAll   ' <---

EndClean:
Set objApp = Nothing
Set objItem = Nothing
Set objAttendees = Nothing
End Sub
选项显式
子getAttendeList()
将objApp设置为Outlook.Application
作为对象的Dim objItem
将对象变暗为Outlook.Recipients
作为字符串的Dim OBJATTENDEREQ
作为字符串的Dim OBJATTENDEOPT
作为字符串的Dim objOrganizer
开始日期
以日期结束
作为字符串的Dim strSubject
作为字符串的Dim strLocation
作为字符串的暗字符串
Dim strMeetStatus为字符串
作为字符串的Dim strCopyData
作为字符串的Dim strCount
Dim ino、it、ia、ide
暗x等长
将与会者作为邮件项列出
'出现错误时,请继续下一步
设置objApp=CreateObject(“Outlook.Application”)
Set objItem=GetCurrentItem()
设置objAttendees=objItem.Recipients
错误转到EndClean时:
”“是预约吗
如果是objItem.Class 26那么
MsgBox“此代码仅适用于会议。”
转到EndClean:
如果结束
“获取数据
dtStart=objItem.Start
dtEnd=objItem.End
strSubject=objItem.Subject
strLocation=objItem.location
strNotes=objItem.body
objOrganizer=objItem.Organizer
OBJATTENDEREQ=“”
OBJATTENDEOPT=“”

Set listaendes=Application.CreateItem(olMailItem)“基于@niton编写的内容,我添加了对检查全局地址列表的支持。通过迭代
myaddresslist
,可以扩展此代码以搜索所有可用的地址列表,但是,在大多数情况下,这可能会超出您的需要

请注意,这并不是为了速度而优化的,但是即使是一个邀请了几百人的列表,而一个邀请了数万人的列表,计算机也不会花很长时间反复浏览。因为这不是经常运行的,所以为优化它节省的时间似乎不值得

选项显式
子getAttendeList()
作为整数的Dim x
Dim y作为整数
作为整数的Dim ino
将其设置为整数
作为整数的Dim ia
将ide设置为整数
将objApp设置为Outlook.Application
作为对象的Dim objItem
将对象变暗为Outlook.Recipients
作为字符串的Dim OBJATTENDEREQ
作为字符串的Dim OBJATTENDEOPT
用字符串命名
将电子邮件设置为字符串
作为字符串的Dim objOrganizer
开始日期
以日期结束
作为字符串的Dim strSubject
作为字符串的Dim strLocation
作为字符串的暗字符串
Dim strMeetStatus为字符串
作为字符串的Dim strCopyData
作为字符串的Dim strCount
像绳子一样暗的结构
将联系人设置为Outlook.MAPIFolder
Dim oContact作为Outlook.ContactItem
将多个项目设置为Outlook.Items
以Outlook.NameSpace的形式显示默认名称
将与会者作为邮件项列出
暗斜纹细绳
将MyAddressList设置为AddressList
将myAddressEntries设置为AddressEntries
将myAddressEntry设置为AddressEntry
Dim MyExchange用户作为Exchange用户
将myExchangeDL设置为ExchangeDistributionList
Dim myContactItem作为ContactItem
出错时继续下一步
设置objApp=CreateObject(“Outlook.Application”)
设置oNS=Application.GetNamespace(“MAPI”)
设置folContacts=oNS.GetDefaultFolder(olFolderContacts)
设置colItems=folContacts.Items
设置myAddressLists=oNS.AddressLists
设置myAddressEntries=myAddressLists.Item(“全局地址列表”).AddressEntries
Set objItem=GetCurrentItem()
设置objAttendees=objItem.Recipients
错误转到EndClean时:
”“是预约吗
如果是objItem.Class 26那么
MsgBox“此代码仅适用于会议。”
转到EndClean:
如果结束
“获取数据
dtStart=objItem.Start
dtEnd=objItem.End
strSubject=objItem.Subject
strLocation=objItem.Location
strNotes=objItem.Body
objOrganizer=objItem.Organizer
OBJATTENDEREQ=“”
OBJATTENDEOPT=“”
'获取与会者列表
对于x=1的对象,计算
strMeetStatus=“”
选择案例对象(x)。会议响应状态
案例0
strMeetStatus=“无响应(或组织者)”
ino=ino+1
案例1
strMeetStatus=“组织者”
ino=ino+1
案例2
strMeetStatus=“暂定”
it=it+1
案例3
strMeetStatus=“已接受”
ia=ia+1
案例4
strMeetStatus=“已拒绝”
ide=ide+1
结束选择
StratendeeName=objAttendees(x).名称
strAttendeeEmail=objAttendees(x).地址
设置oContact=colItems.Find(“[Email1Address]=”&StratendeeEmail&“”)
如果没有联系,那就什么都不是了
调试。打印“测试”,oContact.BusinessAddressCity
strCity=oContact.MailingAddressCity&“,”&oContact.MailingAddressState
如果结束
如果InStr(strAttendeeEmail,“@”)=0,则
Debug.Print“search:&objAttendees(x).Name
设置myAddressEntry=myAddressEntries.GetFirst()
不做而不做myAddressEntry什么都不是
如果myAddressEntry.Address类似于objAttendees(x).Address那么
Debug.Print“Found:”&myAddressEntry.Name
设置myExchangeUser=myAddressEntry.GetExchangeUser()
设置myExchangeDL=myAddressEntry.GetExchangeDistributionList()
设置myContactItem=myAddressEntry.GetContact()
如果myExchangeUser不是空的,那么
StratendeeEmail