Я управляю списком адресов электронной почты в Excel, которые мы используем при отправке отчетов о состоянии проекта.Это список с несколькими упорядоченными строками, и для упрощения обслуживания есть один столбец, содержащий имя группы.Есть несколько адресов электронной почты в нескольких местах, так как человек принадлежит к нескольким группам.
Пример: Джон находится в группе «Продажи» и «Группа проектов».
Когда мы используем список адресов электронной почты, нам нужно удалить дубликаты, чтобы один и тот же человек не мог получить письмо несколько раз.Таким образом, мы копируем весь столбец со всеми адресами электронной почты, вставляем его в новый лист, удаляем дубликаты, а затем снова копируем адреса электронной почты.Теперь мы переходим в Outlook и PASTE в поле To и нажимаем ctrl-k, чтобы Outlook оценивал адреса.После этого необходимо вернуться к файлу Excel и удалить тот новый лист, который мы создали, где мы удалили дубликаты.
Я хотел бы сделать это автоматически, поэтому я создал приведенный ниже скрипт, который хорошо работает, за исключением того, что когда я удаляю временный лист (в котором я сделал COPY), буфер обмена очищается.Если я закомментирую строку ws_dest.Delete
в конце кода, это будет работать.
Как сделать копию в буфере обмена таким образом, чтобы она оставалась там даже после удаления листа?Или есть другое решение моей проблемы?
Sub CopyEmailAdresses()
'----------------------------------
'Purpose To make it simple for the user to grab the list of email adresses
' without getting any duplicates, so that they can paste the adresses
' in their email client.
' Copy the column with email adresses (row 1 is header) and paste in
' new sheet, remove duplicates and header and copy the row to clipboard.
' Then delete the temporary sheet.
'------------------------------------
Dim ws_source As Worksheet
Dim ws_dest As Worksheet
'Remember where we are
Set ws_source = ActiveSheet
'Create an empty sheet which will be used for "cleaning" the email adresses
'and copy the column with amll email adresses
Set ws_dest = Sheets.Add(After:=ActiveSheet)
ws_source.Range("D:D").Copy Destination:=ws_dest.Range("A1")
'Remove duplicates and the header
ws_dest.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
ws_dest.Rows("1:1").Delete Shift:=xlUp
'Copy to clipboard
ws_dest.Range("A:A").Copy
'Go back to the source sheet and delete the temporary sheet
ws_source.Activate
Application.DisplayAlerts = False 'We dont want the confirmation popup
ws_dest.Delete
Application.DisplayAlerts = True
End Sub