2013-06-12 38 views
0

我從網絡的下面的代碼運行Outlook 2010規則。運行規則的宏

我試圖一次只運行一個規則,從組合框中選擇它,但它運行所有規則。

以及我希望它顯示規則的名稱完成後。

Option Explicit 
Private st As Outlook.Store 
Private myRules As Outlook.Rules 
Private rl As Outlook.Rule 
Private count As Integer 
Private ruleList As String 
Private i As Long 

Private Sub cmd_close_Click() 
    Me.cmb_select_rule.Clear 
    Unload Me 
End Sub 

Sub RunMyRules() 
    frmRunRules.Show 
End Sub 

Private Sub frmRunRules_Initialize() 
    Set st = Application.Session.DefaultStore 
    Set myRules = st.GetRules 
    With Me.cmb_select_rule 
     .Clear 
     For Each rl In myRules 
      .AddItem rl.Name 
     Next rl 
    End With 
End Sub 

Private Sub cmdRun_Click() 
    Me.Hide 
    Set st = Application.Session.DefaultStore 
    Set myRules = st.GetRules 
    With Me.cmb_select_rule 
     For i = 0 To .ListCount - 1 
      If .ListIndex(i) Then 
       Set rl = myRules.Item(.List(i)) 
       If rl.RuleType = olRuleReceive Then 
        ' if so, run it 
        rl.Execute ShowProgress:=True 
        count = count + 1 
        ruleList = ruleList & vbCrLf & rl.Name 
       End If 
      End If 
     Next i 
    End With 
    ruleList = "These rules were executed against the Inbox: " & vbCrLf & ruleList 
    MsgBox ruleList, vbInformation, "Outlook Rules" 
    Set rl = Nothing 
    Set st = Nothing 
    Set myRules = Nothing 
    Me.cmb_select_rule.Clear 
End Sub 

回答

0
Sub RunAllInboxRules() 
Dim st As Outlook.Store 
Dim myRules As Outlook.Rules 
Dim rl As Outlook.Rule 
Dim runrule As String 
Dim rulename As String 
rulename = "Your Rule Name" 
Set st = Application.Session.DefaultStore 
Set myRules = st.GetRules 
Set cf = Application.ActiveExplorer.CurrentFolder 
For Each rl In myRules 
If rl.RuleType = olRuleReceive Then 
If rl.Name = rulename Then 
rl.Execute ShowProgress:=True, Folder:=cf 
runrule = rl.Name 
End If 
End If 
Next 
ruleList = "Rule was executed correctly:" & vbCrLf & runrule 
MsgBox ruleList, vbInformation, "Macro: Whatever_Finished" 
Set rl = Nothing 
Set st = Nothing 
Set myRules = Nothing 
End Sub 

嘗試上面運行在單一的規則,只需編輯RuleName中到您現有的規則之一,Whater_Finished到任何你想要的......沒有組合框,但一個好地方讓你開始。