2012-11-08 6 views
5

表示する前にOutlookのアラートをプログラムによって却下する運がない。Outlookリマインダの抹消

Private Sub Application_Reminder(ByVal Item As Object) 
    Dim objRem As Reminder 
    Dim objRems As Reminders 
    If Item.Subject = "TESTING" Then 
     'downloadAndSendSpreadReport 
     Set objRems = Application.Reminders 
     i = 0 
     For Each objRem In objRems 
      i = i + 1 
      If objRem.Caption = "TESTING" Then 
       objRems.Remove i 
       If objRem.IsVisible Then 
        objRem.Dismiss 
       End If 
       Exit For 
      End If 
     Next objRem 
     Item.ReminderSet = False 
     Item.Delete 
     'Item.Dismiss 
    End If 
End Sub 

私はこのアポイントアイテムをトリガーとして使用して、リマインダを手動で却下する必要がないようにしたいと考えています。

は私が設定リマインダからそれを削除しようとしたが、これは私のカレンダーからイベント全体を削除しているようですので、

を却下することができない、このイベントがトリガされたとき、リマインダー項目が表示されていない、私には思えます。また、ASCIIではなくSTRANGE TITLEのリマインダも表示されます。

予定項目のreminderSetプロパティをfalseに設定するのに疲れましたが、リマインダープロパティは引き続きポップアップします。

だから私はを探しています。a)自動的にポップする前にリマインダを消す/ b)。自動的にポップした後にリマインダを終了するか、またはOutlookでスケジュールされたMACROを実行するための回避策があります。 (Iは、WindowsにもVBSでスケジュールされたジョブを使用する権限がありませんので、予めご了承ください。)

更新:

を今、私は次のコードを持っています。リマインダは削除されていますが、「予約/リマインダがありません」というようなキャプションが付いたリマインダーウィンドウが表示されます。

beforeReminderShowイベントはので、私は..うち消すことができますが、アラームウィンドウが0のイベントがあります場合でも、ポップアップ表示し続ける意味でリマインダーオブジェクトのisVisible =真

便利です。

Private WithEvents olRemind As Outlook.Reminders 
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 
Set objRems = Application.Reminders 
    For Each objRem In objRems 
      If objRem.Caption = "TESTING" Then 
       If objRem.IsVisible Then 
        objRem.Dismiss 
       End If 
       Exit For 
      End If 
     Next objRem 

End Sub 

[解決]最終編集 最終的な解決策の実行可能(私は「ThisOutlookSession」モジュールに置か) 希望、これは他の人を助け

' declare this object withEvents displaying all the events 
Private WithEvents olRemind As Outlook.Reminders 
Private Sub Application_Reminder(ByVal Item As Object) 
    Set olRemind = Outlook.Reminders 
    ' RUN OTHER MACRO HERE 
End Sub 

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

    For Each objRem In olRemind 
      If objRem.Caption = "TESTING" Then 
       If objRem.IsVisible Then 
        objRem.Dismiss 
        Cancel = True 
       End If 
       Exit For 
      End If 
     Next objRem 

End Sub 

答えて

3

私はこれを行う方法を知っている唯一の方法があります次のように。

あなたが取得するときそして、あなたの見通しはあなたがolAppは、OutlookのApplicationオブジェクトでこの

set olRemind = olApp.Reminders 

を行う必要があるオブジェクトを、あなたのモジュール/クラスのトップ

Private WithEvents olRemind As Outlook.Reminders 

でこれを必要とします。

は、今すぐあなたのコードで、あなたが一番上にWITHEVENTSを入れたら、あなたはあなたが使用できるすべてのイベントを見ることができます

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

このイベントを持っている必要があります。

このイベントをキャンセルすると、リマインダウィンドウが表示されなくなります。

+0

を表示するこのオブジェクトwithEventsを宣言し、私はそれを月曜日に試してみるだろう、のおかげで前進。私はイベントを見つけることができませんでした。ありがとう! – Larry

+0

あなたの質問をもう一度読むと、私はあなたがすでに持っているものと私の提案を組み合わせなければならないと考えています。私はリマインダーを削除したいがユーザーには他のリマインダーがある場合を考えている。この場合、あなたはあなたを削除して、リマインダーウィンドウを表示させます。あなたの唯一のリマインダならば、あなたは私が提示したイベントを使用して、ウィンドウの表示を止めることができます。 – darbid

+0

こんにちは@darbid質問の私の編集をご覧ください。ありがとう – Larry

2

あなたはすべてのアラームを却下する場合、あなたは以下のコードを実装simplyeことができます。

すべてのイベント

Private WithEvents olRemind As Outlook.Reminders 

Private Sub Application_Reminder(ByVal Item As Object) 
Set olRemind = Outlook.Reminders 
' RUN OTHER MACRO HERE 
End Sub 

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

Cancel = True   

End Sub 
+0

THanks @sparksustc、私は私の質問の最後に私の最終的な実行可能なバージョンを掲載しました。しかしあなたの答えは上記のダービッドの答えの実際の実装です。 – Larry

関連する問題