共有受信トレイでこれをテストする方法はありませんが、次のように役立つことを願っています。以下のすべてのコードがThisOutlookSession
モジュール内に配置する必要があります
- Project 1 (VbaProject.OTM)
- Microsoft Office Outlook Objects
+ ThisOutlookSession
+ Forms
+ Modules
を取得するMicrosoft Office Outlook Objects
に対して+上
- Project 1 (VbaProject.OTM)
+ Microsoft Office Outlook Objects
+ Forms
+ Modules
クリック:
VBAエディタのエクスプローラでは、このような構造を一覧表示されます。
Outlookを開くと、最初のルーチン(Application_Startup
)が呼び出されます。
Option Explicit
Public UserName As String
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_Startup()
' This event procedure is called when Outlook is started
Dim NS As NameSpace
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
With NS
UserName = .CurrentUser
Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
End With
MsgBox "Welcome " & UserName
End Sub
上記のコードには2つの別個のアクティビティがあります。
まず、UserName = .CurrentUser
と設定します。上記のコードを実行すると、UserName
が自分のユーザー名に設定されます。私は同じことがあなたとあなたの同僚にも当てはまると仮定しているので、下のマクロはどのユーザーが現在のユーザーであるかを知ることができます。ユーザーが.CurrentUser
にアクセスするには、マクロのアクセス許可を与える必要があります。 InputBoxを使用してユーザーのイニシャルを取得することをお勧めします。
第2に、MyNewItems
を初期化します。これにより、受信トレイに追加される新しいアイテムのイベントハンドラを指定できます。
送信ボタンがクリックされた後、メッセージが送信される前に、次のルーチン(Application_ItemSend
)が呼び出されます。メッセージを変更または追加することができます。 Cancel = False
で送信をキャンセルすることもできます。
私はこのルーチンを使用して、おそらく有用なプロパティをイミディエイトウィンドウに出力しました。
私の実験によると、あなたが設定したカテゴリはすべて、送信済みアイテムのバージョンに記録されますが、受信者に送信されるバージョンには記録されません。したがって、相手がOutlookを使用していても返信には参加できません。
1つのオプションは、件名の末尾にコードを追加することです。別のオプションは、.ReplyRecipients
を別のアドレスに設定することです。メッセージは引き続きグループの受信トレイから送信されますが、返信は.ReplyRecipients
に送られます。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
' This event procedure is called when the Send button is clicked but
' before the item is sent.
Dim Inx As Long
Debug.Print "------Item Send"
' Note this routine operate on all items not just mail items.
' See "myNewItems_ItemAdd" for a method of restricting the
' routine to mail items
With Item
.Subject = .Subject & " (xyz1)"
Debug.Print "Subject " & .Subject
For Inx = 1 To .Recipients.Count
Debug.Print "Recipient " & .Recipients(Inx).Name
Next
' Remove any existing reply recipients
Do While .ReplyRecipients.Count > 0
.ReplyRecipients.Remove 1
Loop
.ReplyRecipients.Add "[email protected]"
End With
End Sub
最後のルーチン(myNewItems_ItemAdd
)は、新しいメールアイテムを処理します。現在のコードは、会議出席依頼などの他の項目を処理しません。このコードは、イミディエイトウィンドウに件名を出力するだけです。ただし、メッセージを別のフォルダに移動することもできます。
Private Sub myNewItems_ItemAdd(ByVal Item As Object)
' This event procedure is called whenever a new item is added to
' to the InBox.
Dim NewMailItem As MailItem
Debug.Print "------Item Received"
On Error Resume Next
' This will give an error and fail to set NewMailIten if
' Item is not a MailItem.
Set NewMailItem = Item
On Error GoTo 0
If Not NewMailItem Is Nothing Then
' This item is a mail item
With NewMailItem
Debug.Print .Subject
End With
Else
' Probably a meeting request.
Debug.Print "Not mail item " & Item.Subject
End If
End Sub
希望すると、あなたにいくつかのアイデアが与えられます。
私が正しく理解している場合は、メッセージを送信するときに分類し、回答が返されたときに分類されることを願っています。私には、(1)他の人がOutlookを使用していないとうまくいかず、(2)もう一方の人がそれを再分類する可能性があるため、これはあまりにも信頼性が低いので便利です。私にとっては、受け取った返信で送信されたメッセージと一致させる方が良いでしょう。 –
こんにちはトニー、あなたの応答に感謝します。基本的には、複数のユーザーと共有の受信ボックスから作業しています。すべてに返信するので、送信したメッセージは受信者に送信され、共有の受信トレイに戻されます。私が把握しようとしているのは、送信されたメッセージを、それを送信したユーザーを示すタグ付きの受信トレイに入れる方法です。例 "〜Reply、Joe"または "〜Reply、Frank"など。これで少し明確になると思います。 – user1213412