2

メールを受信したときに wav ファイルを再生するスクリプトを作成しました。営業時間中だけ音を鳴らすのがポイント。営業時間外にメールを受信した場合、音は鳴りません。

Private Declare PtrSafe Function PlaySound Lib "winmm.dll" _
  Alias "PlaySoundA" (ByVal lpszName As String, _
  ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long

Sub PlayWavFile(WavFileName As String, Wait As Boolean)
    If Dir(WavFileName) = "" Then Exit Sub ' no file to play
    If Wait Then ' play sound synchronously
        PlaySound WavFileName, 0, 0
    Else ' play sound asynchronously
        PlaySound WavFileName, 0, 1
    End If
End Sub

Sub PlayASoundDuringBusinessHours(Item As Outlook.MailItem)

  Dim SecondsSinceMidnight
  Dim SecondsPerHour
  Dim NineOclockAm
  Dim NineOclockPm
  Dim TooEarly
  Dim TooLate

  On Error GoTo ErrHandler:
  SecondsSinceMidnight = Timer
  SecondsPerHour = 60 * 60
  NineOclockAm = SecondsPerHour * 9
  NineOclockPm = SecondsPerHour * 21
  TooEarly = Timer < NineOclockAm
  TooLate = Timer > NineOclockPm

  If Not (TooEarly) And Not (TooLate) Then
    PlayWavFile "c:\windows\media\blahblahblah.wav", False
  End If

ExitProcedure:
  Exit Sub
ErrHandler:
    MsgBox Err.Description, _
    vbExclamation + vbOKCancel, _
    "Error: " & CStr(Err.Number)
    Resume ExitProcedure:
End Sub

Outlook には、メールが着信したときにこのスクリプトを使用するルールがあり、機能します。とにかく、しばらくの間。

何が問題なのかわかりませんが、ときどきこのスクリプトでエラーが発生し、Outlook から "Rules in error" と "The operation failed." というダイアログが表示されます。これが発生すると、このスクリプトを使用する Outlook ルールが無効になります。

私の例外処理は不十分ですか? このエラーの原因は何ですか?また、適切に処理するにはどうすればよいですか?

アップデート:

ルールは非常に基本的です。スクリプトを実行する以外にはほとんど何もしません。

Apply this rule after the message arrives
on this computer only
run Project.PlayASoundDuringBusinessHours
4

1 に答える 1

1

質問への直接の回答ではありませんが、私の解決策は ItemAdd に切り替えることでした。

例:

http://msdn.microsoft.com/en-us/library/office/aa171270(v=office.11​​).aspx http://www.outlookcode.com/article.aspx?id=62

于 2013-02-06T02:11:58.593 に答える