Sik*_*ior 7 outlook vba ms-word word-vba outlook-vba
我是VBA的新手并试图让自动化的word文档正常工作.目前,文档中有一个按钮,按下后会触发附有文档的电子邮件.
但是我还需要获取当前用户发送电子邮件的电子邮件地址,因此我可以在发送之前将其放在文档中.我在互联网上的搜索没有产生符合我情况的任何可用代码.我目前的代码如下.
Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.CreateItem(olMailItem)
Set Doc = ActiveDocument
Doc.Save
With EmailItem
.Subject = "Requesting Authorization Use Overtime"
.Body = "Please review the following request for overtime" & vbCrLf & _
"" & vbCrLf & _
"Thanks"
.To = "toemail@test.com"
.Importance = olImportanceNormal
.Attachments.Add Doc.FullName
.Send
End With
Run Code Online (Sandbox Code Playgroud)
不确定这是否相关,但是当使用文档时,Outlook应用程序将始终以用户登录的方式打开.我曾经在这些情况下使用intellisense帮助,所以我可以使用方法和属性,但是intellisense似乎没什么帮助.
这一切都取决于"当前用户地址"的定义.
Appication.Session.CurrentUser(返回Recipient对象)中检索Outlook中主帐户的地址.使用Recipient.Address财产.但请注意,对于Exchange帐户(Recipient.AddressEntry.Type == "EX"),您将收到EX类型的地址.要检索SMTP地址,请使用Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress.准备好在出现错误时处理空值/异常.这是您在特定情况下最可能需要的.在扩展MAPI级别(C++或Delphi)上,使用IMAPISession::QueryIdentity(您可以在OutlookSpy中测试它- 单击IMAPISession按钮,然后单击QueryIdentity).然后,您可以读取PR_ADDRTYPE属性("EX"与"SMTP")和PR_EMAIL_ADDRESS(当PR_ADDRTYPE="SMTP")或(在Exchange的情况下)PR_SMTP_ADDRESS(不保证存在)和PR_EMS_AB_PROXY_ADDRESSES(多值属性将Exchange地址,包括所有代理(别名) )地址).
如果配置文件中有多个帐户,则可以通过多个帐户发送或接收电子邮件.在那种情况下使用MailItem.SendUsingAccount(返回Account对象,可以为null - 在这种情况下使用Application.Session.CurentUser).这对于收到,发送或组成(Application.ActiveInspector.CurrentItem或Application.ActiveExplorer.ActiveInlineResponse)的电子邮件都有效.
可以使用Namespace.Accounts集合访问给定配置文件中的所有帐户(Application.Session.Accounts.可以使用Account.SmtpAddress财产访问帐户的地址.请注意,Outlook对象模型仅公开邮件帐户.某些商店帐户(例如PST)不在集合中,因为即使某些其他帐户(例如POP3/SMTP)可以传送到该商店,它们也没有固有的用户身份.如果要访问所有帐户,可以使用Redemption及其RDOSession .Accounts集合(RDOAccounts对象).
在扩展MAPI级别,帐户通过IOlkAccountManager接口公开.如果单击IOlkAccountManager按钮,则可以在OutlookSpy中使用它.
PR_MAILBOX_OWNER_ENTRYID属性访问商店所有者.通常,电子邮件地址是分配给Outlook邮件文件夹的名称.
试试这个:
'~~> add these lines to your code
Dim olNS As Outlook.NameSpace
Dim olFol AS Outlook.Folder
Set olNS = OL.GetNamespace("MAPI")
Set olFol = olNS.GetDefaultFolder(olFolderInbox)
MsgBox olFol.Parent.Name '~~> most cases contains the email address
Run Code Online (Sandbox Code Playgroud)
这假设您正在使用Early Bind并正确设置对象引用.
访问此类信息的另一种方法是直接使用Namespace属性.
MsgBox olNS.Accounts.Item(1).DisplayName '~~> usually email address
MsgBox olNS.Accounts.Item(1).SmtpAddress '~~> email address
MsgBox olNS.Accounts.Item(1).UserName '~~> displays the user name
Run Code Online (Sandbox Code Playgroud)
我希望以上任何一种方式都有所帮助.
此答案适用于后期绑定,因此您无需拥有参考库。将以下代码放入模块中:
Dim OL As Object, olAllUsers As Object, oExchUser As Object, oentry As Object, myitem As Object
Dim User As String
Set OL = CreateObject("outlook.application")
Set olAllUsers = OL.Session.AddressLists.Item("All Users").AddressEntries
User = OL.Session.CurrentUser.Name
Set oentry = olAllUsers.Item(User)
Set oExchUser = oentry.GetExchangeUser()
msgbox oExchUser.PrimarySmtpAddress
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30639 次 |
| 最近记录: |