2017-02-13 63 views
0

我困在一小段代碼中。 我有一個表單,當我點擊一個按鈕時,它會將所有選定的記錄發送到電子郵件正文中,並在這些記錄中列出電子郵件收件人。刪除電子郵件中的重複字符串

那加是在電子郵件到「收件人」部分如下前景的部分:

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

    olItem.Display 
    olItem.To = strTO 

正如你可以看到形成的代碼,它需要字符串strTO[EmailAddress]上記錄加值,還有一個;比移動到循環中的下一個記錄。 我的問題是,是否有一種方法可以創建一個全局函數,在執行代碼的olItem.To = strTO部分之前,您可以調用該函數,從而基本上清理刪除任何重複項的字符串?

編輯:發現我可以正確發佈我的答案,而不是編輯我的問題。

+1

最好的辦法是創建一個不包含重複項的記錄集。選中SELECT DISTINCT。如果這不適合,請查看VBA InStr,這將允許您在添加地址之前進行檢查。 – Fionnuala

+0

感謝您的評論,不幸的是,distinct將無法正常工作,因爲我需要查看這些行的多行,但我不需要它爲To欄添加額外的重複電子郵件地址。 我正在調查我在網上找到的一些代碼,名爲RemoveDupWords2 這似乎是做我想做的,除了當我去調用函數我打電話RemoveDupWords2(strTO) 我得到ByRef Arugment不匹配錯誤。所以我現在正在研究這個。 – vladyerus

+0

就像我剛纔提到的那樣使用InStr,它可以包裹你當前的代碼並且快速簡單。 – Fionnuala

回答

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中,而不是由olItem.To函數爲Outlook應用程序調用。

相關問題