Я создал этот скрипт для воспроизведения файла 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, в котором говорится: «Ошибка правил» и «Операция не удалась». Когда это происходит, правило Outlook, использующее этот сценарий, отключается.
Является ли моя обработка исключений неадекватной? Что может быть причиной этой ошибки и как правильно с ней справиться?
Обновление:
Правило очень простое. Он мало что делает, кроме выполнения скрипта:
Apply this rule after the message arrives
on this computer only
run Project.PlayASoundDuringBusinessHours
TooEarly
иTooLate
и добавьтеOkToPlaySound = (SecondsSinceMidnight > NineOclockAm) And (SecondsSinceMidnight < NineOclockPm)
. Затем вы можете изменить свой операторIf
наIf (OkToPlaySound) Then
. (Вы удаляете одну переменную и фактически используетеSecondsSinceMidnight
, который вы уже объявили и установили, и делаете операторIf
более читаемым.) Ошибка может быть не в этом скрипте, BTW, но может быть в правиле Outlook; если это было в коде сценария, вашMsgBox
должен остановить его (и Outlook), чтобы отобразить диалоговое окно с ошибкой. - person Ken White   schedule 26.01.2013MsgBox
, которое Outlook может подавлять, поскольку это остановит выполнение самого Outlook до закрытия. - person Ken White   schedule 26.01.2013