2016-06-16 4 views
2

私は、Outlookで多くのユーザーが実行するメールマクロを開発しています。現在、私は、私はolShareName変数はマクロのプライマリ電子メールアドレスを実行している誰に設定されるという意味で、このコードの移植を作りたい電子メールユーザーの一次受信トレイを検索するマクロ。彼らのアドレスをハードコーディングせずに

Set objNamespace = Application.GetNamespace("MAPI") 
'Replace line below with code that sets olShareName equal to the current 'outlook user's primary e-mail account. 
Set olShareName = objNamespace.CreateRecipient("[email protected]") 
Set objFolder = objNamespace.GetSharedDefaultFolder(olShareName, olFolderInbox) 
Set DestFolder = objNamespace.GetSharedDefaultFolder(olShareName, olFolderToDo) 

strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%Dogs Secretly Control the World%'" 

Set filteredItems = objFolder.Items.Restrict(strFilter) 

...私の受信トレイを検索するには、次のアプローチを使用しています。

例えば、私の同僚がこのマクロを使用していて、(outlookからアクセスされる)電子メールアドレス[email protected][email protected]を持っていれば、コードを変更しなくても実行することができます。

明らかに、私は入力ボックスを使用して電子メールアドレスを入力することができますが、私はそれを避けたいと思います。

+0

是非、誰かが刺す。 –

+1

私は「vba outlookアカウントの電子メールアドレスを取得する」のために、最初のリンクをクリックすると、スタブを取るよhttp://stackoverflow.com/questions/26519325/how-to-get-the-email-addressユーザーの現在ログインしている2番目の答えは、Outlook.applicationを介して 'oExchUser.PrimarySmtpAddress'を取得する方法を説明しています:P – TessellatingHeckler

+1

残りのコードを見ることはできますか? – 0m3r

答えて

2

現在のユーザーの受信者オブジェクトを取得するには、NameSpace.CurrentUserプロパティを使用します。これにより、アクティブなOutlookプロファイルの既定のアカウントに関連付けられたアドレスが返されます。これがExchangeアカウントの場合は、ExchangeUser.PrimarySMTPAddressを取得するためにRecipient.AddressEntry.GetExchangeUser()にアクセスする必要があります。実際には、NameSpace.GetSharedDefaultFolderのパラメータとして使用するには、Recipientオブジェクトが必要です。

そのユーザーのエイリアスのアドレスが必要な場合は、MAPIを直接使用する必要があると思います。しかし、プロファイルに設定されている他のアカウントの電子メールアドレスにアクセスする場合は、NameSpace.AccountsをループしてAccount.SmtpAddressをチェックすることができます。

+0

ありがとう、もう1つの方法はOutlookマクロの開発を避け、Outlookを開くExcelマクロを使用することです。 'Dim OutApp As Object Dim OutMail As Object Set OutApp = CreateObject(" Outlook.Application " ) Set OutMail = OutApp.CreateItem(0) With OutMail 。表示します。 –

関連する問題