删除emailto字符串中的重复项

时间:2017-02-13 14:58:22

标签: string access-vba duplicates access

我被困在一点点代码上。 我有一个表单,当我单击一个按钮时,它会将所有选定的记录发送到一个电子邮件正文中,其中包含这些记录中列出的电子邮件收据。

将电子邮件添加到Outlook" To"部分如下:

    With rst
      Do While Not .EOF
    strTO = strTO & ![EmailAddress] & ";"
      .MoveNext
      Loop
    End With

    olItem.Display
    olItem.To = strTO

正如您可以看到代码的形式,它采用字符串strTO并在记录上添加[EmailAddress]的值,以及;而不是移动到下一条记录循环。 我的问题是,是否有一种方法可以创建一个全局函数,您可以在执行代码的olItem.To = strTO部分之前调用该函数,从根本上清除字符串以删除任何重复项?

编辑:发现我可以正确发布我的答案,而不是编辑我的问题。

1 个答案:

答案 0 :(得分:0)

我在全局模块中使用了以下函数。

Public Function getUniqueString(txtToSearch As String) As String
    Dim initStr() As String, endStr As String
    Dim i As Integer, j As Integer, repInt As Integer

    initStr = Split(txtToSearch, ";")
    repInt = 0
    For i = 0 To UBound(initStr)
        For j = 0 To UBound(initStr)
            If initStr(i) = initStr(j) Then repInt = (repInt + 1) Mod 2
        Next
        If repInt < 2 And InStr(endStr, initStr(i)) = 0 Then endStr = endStr & ";" & initStr(i)
    repInt = 0
    Next
    getUniqueString = Right(endStr, Len(endStr) - 1)
End Function

有了这个功能,当我按下按钮时,我会在表单上调出它。

    With rst
        Do While Not .EOF
            strTO = strTO & ![EmailAddress] & ";"
            .MoveNext
        Loop
    End With

    Dim strTOn As String
    strTOn = getUniqueString(strTO)

    olItem.Display
    olItem.To = strTOn

我的理解是当函数运行时会发生什么,它需要strTO字符串并将其转换为数组,所以所有内容都与;当分隔符被分开时,它会检查数组中的所有内容与原始字符串相比,如果有重复项,它会将它们删除到新字符串strTOn中,而不是由outlook应用程序的olItem.To函数调用。