Макрос Outlook 2010 выдает ошибку VBA «цикл не инициализирован» - PullRequest
2 голосов
/ 05 апреля 2011

Я получил этот код из чьего-то блога несколько лет назад.Он в основном перебирает все почтовые правила Outlook и выполняет их (удобно, чтобы организовать свой почтовый ящик!).Я недавно обновился до Outlook 2010 с 2007 года. Теперь я получаю очень странную ошибку о том, что

Run-time error '92':
For loop not initialized

Однако при отладке он всегда будет выполняться 8 раз (из 20-25), затемон выдает эту ошибку.

Вот код ошибки:

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

    'get default store (where rules live) & get rules
    Set st = Application.Session.DefaultStore
    Set myRules = st.GetRules

    'iterate all the rules
    For Each rl In myRules
        If rl.RuleType = olRuleReceive Then         'determine if it’s an Inbox rule, 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

Редактировать:

За комментарий Джея Риггсаочистка всего блока по-прежнему приводит к ошибке.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Итак, проблема заключалась в том, что некоторые правила ссылались на файл PST, который я пропустил при переходе на мою новую машину.Спасибо Джастину за то, что он заставил меня более глубоко взглянуть на правила!

+ 1 к неясному сообщению об ошибке для этого.

0 голосов
/ 05 апреля 2011

Я бы заменил этот цикл на что-то вроде:

Dim k as Long
For k = 1 To myRules.Count ' might be 0-based, didnt check
    set rl = myRules(k)
    If rl.RuleType = olRuleReceive Then         'determine if it’s an Inbox rule, if so, run it
        rl.Execute ShowProgress:=True
        count = count + 1
        ruleList = ruleList & vbCrLf & rl.Name
    End If
Next

Могу поспорить, что в позиции 8 или 9 есть какое-то правило, которое не вписывается в коллекцию myRules и выдает ошибку.Вы также можете проверить коллекцию myRules в точке оскорбления.Возможно, Office 2007 был более щадящим и пропустил эту запись.

...