variables包含相同的值(VBA)

为了生成邮件列表,我已经认识到在我的variables“To”中包含相同的值test@test.com 。 邮件列表是在Visual Basic for Applications(VBA)中定义的。 那么,我正在考虑如何定义一个语句来检查,当variables具有相同的值,然后修剪所有重复。 这意味着我需要variables在邮件列表中出现一次。

例如:

 Dim objMail As Object Dim objOutlook As Object Set objOutlook = CreateObject("Outlook.Application") Set objMail = objOutlook.CreateItem(0) With objMail .To = test@test.com; name1@test.com; name2@test.com; name3@test.com; test@test.com; name4@test.com ... End With 

有没有人有一个想法?

您可以使用字典删除重复项:

 Sub Test() Dim EmailAddresses As String EmailAddresses = "test@test.com; name1@test.com; name2@test.com; name3@test.com; test@test.com; name4@test.com" EmailAddresses = RemoveDuplicates(EmailAddresses) Debug.Print EmailAddresses End Sub Public Function RemoveDuplicates(sTo As String) As String Dim dict As Object Dim vEmails As Variant Dim x As Long Dim sTemp As String vEmails = Split(Replace(sTo, " ", ""), ";") If UBound(vEmails) > 0 Then 'Remove duplicates. Set dict = CreateObject("Scripting.Dictionary") For x = LBound(vEmails) To UBound(vEmails) If Not dict.exists(vEmails(x)) Then dict.Add vEmails(x), 1 sTemp = sTemp & vEmails(x) & ";" End If Next x sTemp = Left(sTemp, Len(sTemp) - 1) 'Remove the final ; RemoveDuplicates = sTemp Else 'There's only 1 address. RemoveDuplicates = sTo End If End Function 

如果这是你的偏好,上面实际上可以简化成几种方式。

  1. 对于这样简单的重复,不需要使用。 Exists方法或.Add方法,因为字典项目是懒惰创build的。 这意味着如果简单地引用一个项目,它将创build它,如果它不存在,或覆盖它,如果它。
  2. 与字典并行手动构buildstring,您可以在字典的KeysJoin函数。

这是修改后的版本:

 Public Function RemoveDuplicates2(sTo As String) As String Dim dict As Object Dim vEmails As Variant Dim x As Long vEmails = Split(Replace(sTo, " ", ""), ";") Set dict = CreateObject("Scripting.Dictionary") For x = LBound(vEmails) To UBound(vEmails) dict(vEmails(x)) = dict(vEmails(x)) 'Keep track of how many occurrences, in case you want to do something with it later Next RemoveDuplicates = Join(dict.Keys(), "; ") End Function