2012-07-18 2 views
1

나는 클래스 모듈에서이 코드가 - msdn에에 내가 this thread의 맨 아래에있는 코드를 사용하여 시도하고 그 중 하나를 실행되지 않습니다 this stackoverflow threadapplication.reminder 이벤트는 어떻게 작동합니까?

Public WithEvents objReminders As Outlook.Reminders 

Private Sub Application_Startup() 
    Set objReminders = Application.Reminders 
End Sub 

Private Sub Application_Reminder(ByVal Item As Object) 
    Call Send_Email_Using_VBA 
    MsgBox ("Litigate!") 
End Sub 

에 명시된 바와 같이.

나는 Outlook의 알리미 팝업을 얻을 수 있습니다. 중단 점은 적중되지 않으며, Msgbox는 절대로 표시하지 않습니다. 함수 호출을 제거하더라도. 몇 번 다시 시작했는데 결과가 없습니다.

중요한 것을 잃어 버렸습니까?

+1

[MSDN에서이 관련 링크 (http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/ea119a5f-cdff-4c00-8c50-826a0630c8bb/) 도움이 될 수도 있습니다. – Gaffi

+0

'handles objReminders.Reminders' (다음에'objReminders.Application.Reminders' 시도)를 추가했습니다. 단지'handles'이라는 단어를 강조 표시하고 "Expected : End of Statement"라고 알려줍니다. –

+0

구체적으로 무엇을하려고합니까? 당신의 목표는 무엇입니까? – JimmyPena

답변

2

WithEvents을 사용하여 objReminders 개체에서 Reminder 이벤트를 처리하지만 일치시킬 서브를 선언하지 않았습니다. 아래 코드에서 objReminders_... 대 내 Application_... 서브를주의하십시오.

나는 (내가 오피스 2007이없는, 그래서이 테스트 할 수 없습니다) Outlook 2003에서 코드 연주, 다음과 같은 내놓았다 :

Public WithEvents objReminders As Outlook.Reminders 

Private Sub objReminders_Snooze(ByVal ReminderObject As Reminder) 
    Call Send_Email_Using_VBA 
    MsgBox ("Litigate!") 
End Sub 

Private Sub Class_Initialize() 
    Set objReminders = Outlook.Reminders 
End Sub 

정상적인 코드 모듈이 구현 :

Sub test() 

Dim rmd As New ReminderClass 

rmd.objReminders.Item(1).Snooze 1 'Triggers objReminders_Snooze in class module 
rmd.objReminders.Item(2).Snooze 1 

End Sub 

이제는 명시 적으로 호출하는 Snooze 이벤트에서 트리거됩니다. 그러나 이것은 또한 이벤트가 처음 나타날 때 트리거하도록 작동해야합니다 (알림이 Snooze에서 깨어날 때 트리거 할 수는 없습니다). 테스트 할 준비가되어있는 알림이 없었습니다.이 외의 어려움이 있다면, 그에 관한 테스트를 몇 가지 설정해 드리겠습니다.

Private Sub objReminders_ReminderFire(ByVal ReminderObject As Reminder) 
    Call Send_Email_Using_VBA 
    MsgBox ("Litigate!") 
End Sub 

는 업데이트 : 2010 년이와 놀아 후

, 나는 일을 다음과 발견 (적어도 불을하지만, 지속적으로 불에 듯) :

Private Sub Application_Reminder(ByVal Item As Object) 
    Call Send_Email_Using_VBA 
    MsgBox ("Litigate!") 
End Sub 

이것은 객체 모듈 ThisOutlookSession에 설정되었습니다. 이걸 추가하는 것이 당신을 위해 무엇을 할 수 있습니까?

+0

작동하지 않았습니다. 나는 둘 다 테스트했다. (차이가있을 경우 2007 사용) –

+0

작동하지 않는 이유는 무엇입니까? 오류 (컴파일 또는 런타임) 또는 자동 실행이 있었습니까? 잠잠해질 수있는 알림을 받았습니까? 자신의 클래스 이름과 일치하도록'Dim rmd As New ReminderClass'를 수정 했습니까? Office 버전 *이 영향을 미칠 수도 있지만 빠른 검색에서 어느 것이 든 결정적인 결과는 없습니다. 클래스 모듈에서 일단'Public WithEvents objReminders As Outlook.Reminders'를 선언하면 코드 윈도우의 맨 위에있는 왼쪽 드롭 다운에서'objReminders'를 선택할 수 있어야합니다. 그런 다음 오른쪽에있는 옵션을 살펴보십시오. 그들이 내 코드와 일치하지 않으면, 당신이 보는 것을 사용하십시오. – Gaffi

+0

오류가 없습니다. 중단 점이 발생하지 않았습니다. 명명 규칙을 수정했습니다. 내가 가지고있는 수업을 언급하고 있다는 것을 깨닫지 못했습니다. 그러나 여전히 작동하지 않습니다. 클래스 모듈과 일반 모듈 모두에서 test() 함수를 테스트했습니다. –

0

그것은이가 ThisOutlookSession 코드에 있어야 주목할 가치가 아닌 다른 모듈

Private Sub objReminders_ReminderFire(ByVal ReminderObject As Reminder) 
    Call Send_Email_Using_VBA 
    MsgBox ("Litigate!") 
End Sub 
0

이 질문에 대한 실제 대답은 다음 당신이 되풀이 약속을 설정하고 코드를 넣어하는 경우 Application_Reminder 이벤트를 예약 할 때 약속 이벤트 내에서 드롭 다운에서 특별히 미리 알림 기간을 설정하지 않으면 미리 알림 이벤트가 실행되지 않습니다.

나는 하루 동안 이걸 가지고 놀았지만, 한 번의 약속이 아니라면 그 사건은 결코 일어나지 않을 것이다.

알림 시간을 5 분으로 설정하여 모든 약속이 완벽하게 작동합니다.

FYI 여기는 로컬 폴더에 저장된 전자 메일 템플릿을 사용하여 매월 사용자 정보 (자체 암호 재설정) 미리 알림을 보내는 데 사용하는 일부 코드입니다.완벽하게 작동합니다. 자동 이메일을 보낼 때 뭔가 새로운 메일을 보내려면 '이메일 보내기'라는 항목을 만드십시오. 각 약속은이 범주로 설정되어야하며 하위 내에서 검사됩니다.

Private Sub Application_Reminder(ByVal Item As Object) 
     Dim objMsg As MailItem 

     On Error Resume Next 


    'IPM.TaskItem to watch for Task Reminders 
    If Item.MessageClass <> "IPM.Appointment" Then 
     Exit Sub 
    End If 

    If Item.Categories <> "Send Mail" Then 
     Exit Sub 
    End If 

    'Check which Template for Reminder we need to send by looking for the keyword in the Reminder Appointment 

If InStr(Item.Subject, "e-Expenses Password Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\e-Expenses Resetting your own password.oft") 

ElseIf InStr(Item.Subject, "e-Learning Password Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\e-Learning Resetting your own password.oft") 

ElseIf InStr(Item.Subject, "EMIS Password Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\EMIS Web Resetting your own password.oft") 

ElseIf InStr(Item.Subject, "NHS email Password Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\NHS Net eMail Resetting your own password.oft") 

ElseIf InStr(Item.Subject, "STRATA Password Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\STRATA Resetting your own password.oft") 

ElseIf InStr(Item.Subject, "VPN Password String Resets") > 0 Then 
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\VPN Resetting your own password.oft") 

Else: Exit Sub 

End If 

'Location is the email address we send to, typically to ALL users 
    objMsg.To = Item.Location 
    objMsg.Subject = Item.Subject 'Make the subject of the Appointment what we want to say in the Subject of the email 
    objMsg.Send 


    Set objMsg = Nothing 
End Sub 

재미있게 보내십시오.

데이브 토마스

관련 문제