Outlook — выполнить все правила

Я хочу запустить все свои правила Outlook с помощью одной кнопки и получил следующий код с другого сайта, но он генерирует ошибку: Ошибка времени выполнения -2146664191 (800c8101) Ошибка автоматизации

у меня есть 22 правила в Outlook, но код будет запускать только первое правило, которое называется «MKG». Если я не закомментирую строку «При ошибке возобновить далее», она, конечно, запустится, но затем запустится только первое правило «MKG». Код падает на этапе NEXT с ошибкой автоматизации. «Для каждого rl в myRules» кажется правильным, но NEXT не сработает без сообщения «Ошибка автоматизации». Может ли кто-нибудь предложить изменение, чтобы Run работал полностью?

    Sub RunAllInboxRules()
    Dim st As Outlook.Store
    Dim myRules As Outlook.Rules
    Dim rl As Outlook.Rule
    Dim count As Integer
    Dim ruleList As String
    
    On Error Resume Next
        
    ' get default store (where rules live)
    Set st = Application.Session.DefaultStore
    
    ' get rules
    Set myRules = st.GetRules
    
        ' iterate all the rules
    For Each rl In myRules
        ' determine if it's an Inbox rule;
            If rl.RuleType = olRuleReceive And rl.IsLocalRule = True Then
         'if so run it
            rl.Execute ShowProgress:=True
            count = count + 1
            ruleList = ruleList & vbCrLf & rl.name
        End If
      Next

    ' tell the user what you did
    ruleList = "These rules were executed against the Inbox: " & vbCrLf & ruleList
    MsgBox ruleList, vbInformation, "Macro: RunAllInboxRules"

    Set rl = Nothing
    Set st = Nothing
    Set myRules = Nothing
    End Sub

Я искал помощь по этой проблеме, но не нашел ничего, что могло бы решить проблему. После публикации этого вопроса я установил тот же макрос на компьютер моей жены, и он работает отлично, без каких-либо ошибок. Оба компьютера работают под управлением Outlook 2019 Desktop под Windows 10Pro. Это наводит меня на мысль, что где-то на моем компьютере отсутствует или поврежден файл. Однако мой компьютер без проблем запускает другой макрос Outlook. распространенной проблемой, по-видимому, является что-либо с циклом, например, для каждого > NEXT или Do Until или Do While > LOOP, поскольку даже очень простой макрос с NEXT или LOOP приводит к «Ошибке автоматизации = цикл не инициализирован». Есть идеи, какой файл может отсутствовать или быть поврежден?

st.GetRules() и удали On Error Resume Next
0m3r 31.08.2024 06:50

lipstick.com/outlook/rules/run-rules-now-using-macro

0m3r 31.08.2024 06:53

Спасибо OMR3r, но удаление «Возобновить при ошибке дальше» не имеет никакого значения. Если я закомментирую это, макрос каждый раз будет падать на «ДАЛЕЕ» с сообщением «Ошибка автоматизации - цикл не инициализирован». Когда я раскомментирую эту строку, она будет работать до конца, но будет обрабатывать только первое из 22 правил.

sandgroper48 01.09.2024 08:16

Попробуйте выполнять только активные правила с помощью If rl.RuleType = olRuleReceive And rl.IsLocalRule = True And rl.Enabled = True Then

Black cat 01.09.2024 09:54

Спасибо, Черный Кот. Это работает, но не имеет никакого значения для ошибки. На самом деле я знаю, что все в порядке, потому что точный код прекрасно работает на компьютере моей жены без ошибок. Мы оба запускаем Ofiice 2019 под Windows 10Pro. Кажется, это более глубокая проблема с моим компьютером, потому что для Outlook он не запускает даже самый простой макрос, который включает в себя либо For Each, For, with Next, либо Do While, Do Until с Loop. Каждый раз возникает ошибка в эфире Next или Loop с кодом ошибки «Ошибка автоматизации» -2146664191(800c8101) Для цикла не инициализирован».

sandgroper48 03.09.2024 11:13

Что произойдет, если вы создадите цикл, один из которого генерирует ошибку в коде Excel? Это подскажет причину, является ли это проблемой VBA или нет.

Black cat 03.09.2024 12:38

Черный кот — ничего не происходит, поскольку у меня есть несколько макросов в Excel, которые включают циклы For или Do, и все они выполняются без ошибок, поэтому именно это меня и смущает ошибкой Outlook. Как я уже упоминал в предыдущем посте, я полностью удалил и переустановил Outlook 2019, пытаясь устранить ошибку, но, к сожалению, ошибка автоматизации не устранена.

sandgroper48 04.09.2024 13:24

Это не решит вашу проблему, но что произойдет, если вы переместите свой код в модуль Excel, установите ссылку на Outlook и протестируете его там? Я проверил это в Outlook 2010, все работает гладко.

Black cat 04.09.2024 14:15
Как регистрировать все результаты тестов DBT в централизованной таблице snowflake
Как регистрировать все результаты тестов DBT в централизованной таблице snowflake
DBT имеет множество встроенных функций для автоматизации трудоемкой работы. Одной из таких функций является тест DBT.
1
8
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пока не будет правдоподобного объяснения, попробуйте индексированные циклы.

Option Explicit

Sub RunAllInboxRulesIndexedLoop()

    ' base code
    ' https://www.slipstick.com/outlook/rules/run-outlook-rules-startup/
    
    Dim st As Store
    Dim myRules As Rules
    Dim rl As Rule
    
    Dim count As Long
    Dim ruleList As String
    
    ' get default store (where rules live)
    Set st = Session.defaultStore
    
    ' get rules
    Set myRules = st.GetRules
    
    ' iterate rules with an indexed loop
    Dim i As Long
    For i = 1 To myRules.count
    
        ' determine if it's an Inbox rule
        Set rl = myRules(i)
        Debug.Print "rl.Name: " & rl.Name
        Debug.Print " rl.RuleType: " & rl.RuleType
        
        If rl.RuleType = olRuleReceive Then
        
            Debug.Print " rl.IsLocalRule: " & rl.IsLocalRule
            If rl.IsLocalRule = True Then
                'if so run it
                rl.Execute ShowProgress:=True
                count = count + 1
                Debug.Print " count: " & count & " of " & i
                ruleList = ruleList & vbCrLf & rl.Name
            End If
            
        End If
        
    Next
    
    ' tell the user what you did
    ruleList = "These rules were executed against the Inbox: " & vbCrLf & ruleList
    MsgBox ruleList, vbInformation, "Macro: RunAllInboxRules"

End Sub
Ответ принят как подходящий

РЕШЕНО. Наконец-то я думаю, что нашел решение своей сложной проблемы. После бесчисленных часов решения проблем я решил создать новый профиль электронной почты, они добавили код VBA в новый профиль, и проблемный макрос теперь выполняется до конца, не прерываясь на строке кода «СЛЕДУЮЩАЯ». Я протестировал его на основе двух (2) правил, созданных вручную, и он работает без ошибок, но еще не импортировал все мои правила (22) для полного тестирования. Однако, если он перестанет работать после импорта старых правил, я, по крайней мере, буду знать, что вызывает ошибку. Теперь эту проблему можно пометить как решенную. Большое спасибо тем, кто ответил и предложил исправления.

Другие вопросы по теме