【问题标题】:Removing Duplicates in an emailto string将电子邮件中的重复项删除到字符串
【发布时间】:2017-07-01 14:46:59
【问题描述】:

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

将电子邮件添加到 Outlook“收件人”部分的部分如下:

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

    olItem.Display
    olItem.To = strTO

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

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

【问题讨论】:

  • 最好的办法是创建一个不包含重复项的记录集。检查选择不同。如果这不适合,请查看 VBA InStr,这将允许您在添加地址之前进行检查。
  • 感谢您的评论,不幸的是 distinct 不起作用,因为我需要查看这些行的多行,但我不需要它来将额外的重复电子邮件地址添加到“收件人”栏。我正在研究我在网上找到的一些名为 RemoveDupWords2 的代码,它似乎可以满足我的要求,除非我调用我键入的函数 call RemoveDupWords2(strTO) 我得到 ByRef Arugment Mismatch 错误。所以我现在正在调查。
  • 就像我提到的那样使用 InStr,它可以包裹你当前的代码并且快速简单。
  • 你能澄清一下我将如何使用instr吗?我不太精通instr,但请不要只输入代码,我宁愿了解如何去做。我会去看一些 youtube 视频并阅读一些论坛以清楚地了解。
  • techonthenet.com/access/functions/string/instr.php 可以检查 emailaddress 中的电子邮件是否包含在 strTo 中,而不是添加到字符串中。

标签: vba string ms-access duplicates


【解决方案1】:

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

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 函数调用。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2013-03-20
    • 1970-01-01
    • 2014-05-15
    • 2020-01-12
    相关资源
    最近更新 更多