könnten Sie das Wörterbuch verwenden, um die Duplikate zu entfernen:
Sub Test()
Dim EmailAddresses As String
EmailAddresses = "[email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]"
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
Die oben tatsächlich ein paar Möglichkeiten, vereinfacht werden kann, auch wenn das Ihre Präferenz ist.
- Für einfache Entdupping wie diese, keine Notwendigkeit, die zu verwenden.
Exists
Methode oder die .Add
Methode, weil Wörterbuch Elemente träge erstellt werden. Dies bedeutet, dass so einfach auf ein Objekt Bezug genommen wird, wenn es nicht existiert, oder es überschreiben, wenn dies der Fall ist.
- Anstatt die Zeichenfolge manuell parallel zum Wörterbuch zu erstellen, können Sie
Join
auf die Keys
des Dict funktionieren.
Hier ist die überarbeitete Fassung:
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
welcher Datentyp ist die "To" Variable? Ist es ein Array? Oder eine verkettete Zeichenfolge? – StormsEdge
Dump die Liste in ein Wörterbuch. Es ist buchstäblich für diese Art von Dingen gemacht. –
@StormsEdge Ich habe meinen Beitrag bearbeitet. Jetzt können Sie sehen, wie die Variable definiert wurde. – yuro