【问题标题】:loop through different filter options in Excel Macro循环遍历 Excel 宏中的不同过滤器选项
【发布时间】:2015-10-28 00:02:19
【问题描述】:

我只是想知道如何遍历 excel 宏中的不同选项并执行相同的操作。

我的操作是将 ID 从 excel 导出到 Outlook 分发列表。

我使用了以下代码:

Public Sub DistributionList()
Dim objOutlook As New Outlook.Application
Dim objNameSpace As Outlook.Namespace
Dim objDistList As Outlook.DistListItem
Dim objMail As Outlook.MailItem
Dim objRecipients As Outlook.Recipients


Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objDistList = objOutlook.CreateItem(olDistributionListItem)
Set objMail = objOutlook.CreateItem(olMailItem)
Set objRecipients = objMail.Recipients
ActiveSheet.Range("$A$1:$C$10").AutoFilter Field:=3, Criteria1:= _
        "Team 1"
objDistList.DLName = "Team 1"

For i = 2 To Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
objRecipients.Add (Range("B" & i).Value)
Next i

objDistList.AddMembers objRecipients
objDistList.Display
objRecipients.ResolveAll

Set objOutlook = Nothing
Set objNameSpace = Nothing
Set objDistList = Nothing
Set objMail = Nothing
Set objRecipients = Nothing

End Sub

在上面的代码中这两行过滤一个团队并导出到一个分发列表,

ActiveSheet.Range("$A$1:$C$10").AutoFilter Field:=3, Criteria1:= _
        "Team 1"
objDistList.DLName = "Team 1"

我有三个团队,我想要三个分发列表。谁能帮我编辑这段代码,以便循环遍历文件并创建三个分发列表?

我是 VBA 新手,如有任何帮助,我们将不胜感激。

谢谢

【问题讨论】:

    标签: vba excel outlook


    【解决方案1】:
    Public Sub DistributionList()
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.Namespace
    Dim objDistList As Outlook.DistListItem
    Dim objMail As Outlook.MailItem
    Dim objRecipients As Outlook.Recipients
    Dim i As Long, j as Long, teamNames() As String
    
    '''The Team Names are Stored in array '''''''''
    redim teamNames(1 to 3)
    teamNames() = Split("Red,Green,Blue", ",")
    '''''''''''''''''''''''''''''''''''''''''''''''
    Set objNameSpace = objOutlook.GetNamespace("MAPI")
    
    For j = LBound(teamNames) To UBound(teamNames) 
        Set objDistList = objOutlook.CreateItem(olDistributionListItem)
        Set objMail = objOutlook.CreateItem(olMailItem)
        Set objRecipients = objMail.Recipients
    
        ActiveSheet.Range("$A$1:$C$10").AutoFilter Field:=3, Criteria1:= _
        teamNames(j)
        objDistList.DLName = teamNames(j)
    
        For i = 2 To Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
            objRecipients.Add (Range("B" & i).Value)
        Next i
    
        objDistList.AddMembers objRecipients
        objDistList.Display
        objRecipients.ResolveAll
        Set objDistList = Nothing
        Set objMail = Nothing
        Set objRecipients = Nothing
    next j
    
    Set objOutlook = Nothing
    Set objNameSpace = Nothing
    
    
    End Sub
    

    您可以尝试以上我认为它应该工作但没有尝试过。您应该有一种方法可以从电子表格的范围中或通过用户输入选择分发列表名称,而不仅仅是从 1-3 恕我直言。不过这取决于你。

    谢谢

    【讨论】:

    • 在这段代码中,我们如何传递团队名称?出于测试目的,我只是将名称命名为 team 1。理想情况下,每个团队名称都有不同的文本名称。我们可以修改代码以给出名称吗?
    • 确定要从您指定的范围或其他地方获取团队名称吗?
    • 我不想获取名称,我想在开头硬编码名称,以便我们可以从那里使用它。
    • 那是什么名字,我可以把它们放在那里?
    • 我们可以有红色、蓝色和绿色吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多