2017-11-13 6 views
1

MailItem에서 변경된 내용에 대해 자세히 알고 싶습니다.PropertyChange 이벤트를 구현하려면 어떻게해야합니까?

Application.Session.Folders ("TargetFolder")를 변수로 사용하여 (예 : Private Sub olInvMbxItems_ItemChange(ByVal X As Object)) ItemChange를 트리거 할 수있었습니다.

X에서 변경된 속성을 알고 싶습니다. XPrivate Sub X_PropertyChange(ByVal x As Object)의 전역 변수에 전달하면 ItemChange의 첫 번째 패스에서 X이 초기화되지 않았으므로 첫 번째 반복이 누락됩니다.

MailItems의 폴더를 모니터링하여 범주 변경을 검색하려면 어떻게해야합니까? 여기

Handle ItemChange event when outlook appointments are dismissed

과 : ItemChange는이 작업을 수행하는 동안 내가 특정 카테고리에 보면, 여기 언급 한 바와 같이 많은 변화가 ItemChange을 트리거로, 활동의 중복을 제공 이진

Outlook Macro that will copy an email I flag and put it in a folder

두 번째 항목의 UserProperties에 대한 플래그는 일회용 이벤트가 아니기 때문에 작동하지 않습니다.

Outlook Events VBA은 PropertyChange를 사용한다고하지만 구현 기술은 제공하지 않습니다.

+0

불완전한 자체 응답 인 경우 합리적인 것이어야하는 추가 질문에서 해결책을 재고해야합니다. 특히 다른 시스템에서 항목을 변경할 수있는 경우 사용자 정의 필드에 이전 범주 코드를 저장하고 [30 분마다 코드 실행] 항목을 정기적으로 반복해야 할 수 있습니다 (https://stackoverflow.com/questions/12257985)./outlook-vba-run-a-code-every-hour-hour-hour) 또는 미리 알림과 함께 트리거하여 현재 고양이 코드가 일치하는지 확인합니다. – niton

+0

나는 문제를 해결하기 위해 집에 돌아갈 때 그 방향을 배우고있다. ItemChanged가 트리거 될 때 변경 사항을 확인하기 위해 로컬 복사본을 등록 할 수 있습니다.UserProperty로 캐시 된 카테고리의 복사본은 이상적으로 작동 할 수 있습니다. 진행 상황을 업데이트 할 것입니다. – EFH

+0

당신은 여전히 ​​항목에 대한 변경을 시도 할 수 있습니다. 그러나 다른 시스템에서 수행 한 ItemChange 또는 PropertyChange를 인식하지 못하도록 권장합니다.이 경우 반복되는 간격으로 현재의 고양이 코드를 저장된 고양이 코드와 비교하는 것입니다. – niton

답변

0

MAPI 수준에서도 저장소 공급자는 변경된 내용을 추적하지 않습니다. 유일한 해결책은 이전 (다른 곳에서 저장된)과 새로운 값을 비교하여 변경된 사항을 확인하는 것입니다.

0

다음은 단일 선택에 대해 작동하는 방법입니다. 정제는 아직 필요하지만, 이것은 출발점이 될 것입니다 :

Private WithEvents olExplorer As Outlook.Explorer 
Private olCurSel As Selection 
Private WithEvents olCurSelItem As Outlook.MailItem 

Private Sub olExplorer_SelectionChange() 
    Set olCurSel = olExplorer.Selection 
    Set olCurSelItem = Nothing 
    Dim i As Long 
    For i = 1 To olCurSel.Count 
    If TypeName(olCurSel.Item(i)) = "MailItem" Then 
     Set olCurSelItem = olCurSel.Item(i) 
    End If 
    Next i 
End Sub 

Private Sub olCurSelItem_PropertyChange(ByVal Name As String) 
    Debug.Print Name; " is what changed!" 
End Sub 

우리는 항목이 선택되었다는 것을 알 수 Outlook.Explorer.Selection 사용. 그런 다음 해당 항목을 Outlook.MailItem에 조건부로 할당하고 이벤트를 사용하여 Outlook.MailItem 우리가 취하려고하는 작업을 트리거 할 수 있습니다.

문제 :

  1. 가 복수의 선택
  2. SelectionChange을 처리하지 않음은 물론 각 선택에 읽기 창에 의해 트리거됩니다. 따라서 읽기 창이 열려 있으면 두 번 실행됩니다. 위에서 설명한대로 olCurSelItem은 각 SelectionChange 두 번 설정됩니다.
  3. 이것은 로컬 변경에 의해서만 트리거됩니다. 사서함에 액세스 할 수있는 다른 시스템에서는 항목을 변경할 수 있으며 작업을 트리거하지 않습니다.
관련 문제