Я хочу запустить все свои правила 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 приводит к «Ошибке автоматизации = цикл не инициализирован». Есть идеи, какой файл может отсутствовать или быть поврежден?
lipstick.com/outlook/rules/run-rules-now-using-macro
Спасибо OMR3r, но удаление «Возобновить при ошибке дальше» не имеет никакого значения. Если я закомментирую это, макрос каждый раз будет падать на «ДАЛЕЕ» с сообщением «Ошибка автоматизации - цикл не инициализирован». Когда я раскомментирую эту строку, она будет работать до конца, но будет обрабатывать только первое из 22 правил.
Попробуйте выполнять только активные правила с помощью If rl.RuleType = olRuleReceive And rl.IsLocalRule = True And rl.Enabled = True Then
Спасибо, Черный Кот. Это работает, но не имеет никакого значения для ошибки. На самом деле я знаю, что все в порядке, потому что точный код прекрасно работает на компьютере моей жены без ошибок. Мы оба запускаем Ofiice 2019 под Windows 10Pro. Кажется, это более глубокая проблема с моим компьютером, потому что для Outlook он не запускает даже самый простой макрос, который включает в себя либо For Each, For, with Next, либо Do While, Do Until с Loop. Каждый раз возникает ошибка в эфире Next или Loop с кодом ошибки «Ошибка автоматизации» -2146664191(800c8101) Для цикла не инициализирован».
Что произойдет, если вы создадите цикл, один из которого генерирует ошибку в коде Excel? Это подскажет причину, является ли это проблемой VBA или нет.
Черный кот — ничего не происходит, поскольку у меня есть несколько макросов в Excel, которые включают циклы For или Do, и все они выполняются без ошибок, поэтому именно это меня и смущает ошибкой Outlook. Как я уже упоминал в предыдущем посте, я полностью удалил и переустановил Outlook 2019, пытаясь устранить ошибку, но, к сожалению, ошибка автоматизации не устранена.
Это не решит вашу проблему, но что произойдет, если вы переместите свой код в модуль Excel, установите ссылку на Outlook и протестируете его там? Я проверил это в Outlook 2010, все работает гладко.
Пока не будет правдоподобного объяснения, попробуйте индексированные циклы.
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) для полного тестирования. Однако, если он перестанет работать после импорта старых правил, я, по крайней мере, буду знать, что вызывает ошибку. Теперь эту проблему можно пометить как решенную. Большое спасибо тем, кто ответил и предложил исправления.
st.GetRules()
и удалиOn Error Resume Next