2017-02-13 17 views
0

Я застрял на немного кода. У меня есть форма, когда я нажимаю кнопку, она отправляет все выбранные записи в тело электронной почты с получателями электронной почты, которые перечислены в этих записях.Удаление дубликатов в строке электронной почты

Часть, которые добавляют это электронная почта к мировоззрению «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

Лучше всего создать набор записей, который не включает дубликаты. Проверьте SELECT DISTINCT. Если это не подходит, посмотрите на VBA InStr, который позволит вам проверить перед добавлением адреса. – Fionnuala

+0

Спасибо за комментарий, к сожалению, не будет работать, так как мне нужно увидеть несколько строк для них, но мне не нужно добавлять дополнительный дублирующий адрес электронной почты в панель «Кому». Я изучаю код, который я нашел в Интернете под названием RemoveDupWords2 , который, кажется, делает то, что я хочу, за исключением случаев, когда я перехожу к вызову функции, которую я набираю, вызывает RemoveDupWords2 (strTO) Я получаю ошибку несоответствия во время ошибки ByRef. Поэтому я сейчас изучаю это. – 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 

Я понимаю, что происходит, когда функция RAN оно принимает строку strTO и превращает его в массив, так что все с; поскольку разделитель разделяется, чем проверяет все в массиве на исходную строку, если есть дубликаты, он удаляет их в новую строку strTOn, которая вызывается функцией olItem.To для приложения Outlook.