за его терпение и помощь.

даю эту новую тему по совету другого участника. Для дополнительной истории относительно того, как вещи достигли этой точки, смотритеэтот вопрос.

У меня есть этот скрипт VBA, который я знаю, работаетесли это срабатывает. Если я использую подпрограмму TestLaunch с сообщением, уже находящимся в моем почтовом ящике, которое соответствует критериям правила (но, разумеется, правило не удаляется), это активирует ссылку, которую я хочу, чтобы она безупречно активировалась. Если, когда я создаю правило, я говорю применить его ко всем существующим сообщениям в моем почтовом ящике, оно работает безупречно. Однако там, где это необходимо,когда приходят новые сообщения Это не.

Я знаю, что скрипт не запускается, потому что, если у меня есть такое правило:

Правило Outlook «Новое сообщение» с включенным «воспроизведением звука»

с «Воспроизвести звук» как его часть, звук всегда воспроизводится, когда приходит сообщение от одного из двух указанных отправителей, поэтому правило срабатывает. Я удалил звуковоспроизводящую часть из правила и вместо этого интегрировал ее в код VBA для тестирования:

Option Explicit

Private Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal Filename As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long

Private Declare Function sndPlaySound32 _
    Lib "winmm.dll" _
    Alias "sndPlaySoundA" ( _
        ByVal lpszSoundName As String, _
        ByVal uFlags As Long) As Long

Sub PlayTheSound(ByVal WhatSound As String)
    If Dir(WhatSound, vbNormal) = "" Then
        ' WhatSound is not a file. Get the file named by
        ' WhatSound from the Windows\Media directory.
        WhatSound = Environ("SystemRoot") & "\Media\" & WhatSound
        If InStr(1, WhatSound, ".") = 0 Then
            ' if WhatSound does not have a .wav extension,
            ' add one.
            WhatSound = WhatSound & ".wav"
        End If
        If Dir(WhatSound, vbNormal) = vbNullString Then
            Beep            ' Can't find the file. Do a simple Beep.
            Exit Sub
        End If
    Else
        ' WhatSound is a file. Use it.
    End If

    sndPlaySound32 WhatSound, 0&    ' Finally, play the sound.
End Sub

Public Sub OpenLinksMessage(olMail As Outlook.MailItem)

 Dim Reg1 As RegExp
 Dim AllMatches As MatchCollection
 Dim M As Match
 Dim strURL As String
 Dim RetCode As Long

Set Reg1 = New RegExp

With Reg1
 .Pattern = "(https?[:]//([0-9a-z=\?:/\.&-^!#$;_])*)"
 .Global = True
 .IgnoreCase = True
End With

PlayTheSound "chimes.wav"

' If the regular expression test for URLs in the message body finds one or more
If Reg1.test(olMail.Body) Then

'      Use the RegEx to return all instances that match it to the AllMatches group
       Set AllMatches = Reg1.Execute(olMail.Body)
       For Each M In AllMatches
               strURL = M.SubMatches(0)
'              Don't activate any URLs that are for unsubscribing; skip them
               If InStr(1, strURL, "unsubscribe") Then GoTo NextURL
'              If the URL ends with a > from being enclosed in darts, strip that > off
               If Right(strURL, 1) = ">" Then strURL = Left(strURL, Len(strURL) - 1)
'              The URL to activate to accept must contain both of the substrings in the IF statement
               If InStr(1, strURL, ".com") Then
                     PlayTheSound "TrainWhistle.wav"
'                    Activate that link to accept the job
                     RetCode = ShellExecute(0, "Open", "http://nytimes.com")
                     Set Reg1 = Nothing
                     Exit Sub
               End If

NextURL:
   Next

End If

Set Reg1 = Nothing

End Sub

Private Sub TestLaunchURL()
    Dim currItem As MailItem
    Set currItem = ActiveExplorer.Selection(1)
    OpenLinksMessage currItem
End Sub

который должен воспроизводить «chimes.wav», если сценарий VBA запущен во всех случаях, и «TrainWhistle.wav», если происходит фактическая обработка активации моей ссылки. При поступлении новых сообщений ничего не происходит, но если в правиле Outlook есть «Воспроизвести звук», который должен запускать этот сценарий, этот звук воспроизводится.

На данный момент у меня есть настройки Макроса доверия, чтобы разрешить все, так как Outlook был взволнован из-за подписи, которая использовала selfcert.exe ранее в процессе тестирования. Я действительно хотел бы иметь возможность снова повысить защиту макросов, а не оставлять их на «запустить все», когда все это будет сделано.

Но, прежде всего, я не могу на всю жизнь понять, почему этот сценарий будет отлично работать через отладчик или если он применяется к существующим сообщениям, но не запускается тем же правилом Outlook, которое применяется к существующим сообщениям при фактическом новом сообщении прибывает. Это верно в Outlook 2010, где я разрабатываю этот сценарий, а также в Outlook 2016, на компьютере друга, где он развертывается.

Любое руководство по решению этой проблемы будет наиболее ценно.

Ответы на вопрос(0)

Ваш ответ на вопрос