VBA, который будет прикреплять PDF и отправлять электронную почту через Outlook

Для неизменяемых объектов создание копии не имеет особого смысла, поскольку они не будут меняться. Для изменяемых объектов assignment , copy и deepcopy ведут себя по-разному. Давайте поговорим о каждом из них с примерами.

Операция присваивания просто назначает ссылку источника на место назначения, например:

>>> i = [1,2,3]
>>> j=i
>>> hex(id(i)), hex(id(j))
>>> ('0x10296f908', '0x10296f908') #Both addresses are identical

Теперь i и j технически ссылаются на тот же список. Оба i и j имеют одинаковый адрес памяти. Любое обновление любого из них будет отражено в другом. например:

>>> i.append(4)
>>> j
>>> [1,2,3,4] #Destination is updated

>>> j.append(5)
>>> i
>>> [1,2,3,4,5] #Source is updated

С другой стороны, copy и deepcopy создают новую копию переменной. Итак, теперь изменения исходной переменной не будут отражаться на переменной копирования и наоборот. Однако copy(shallow copy) не создает копию вложенных объектов, а просто копирует ссылку на вложенные объекты. Deepcopy рекурсивно копирует все вложенные объекты.

Некоторые примеры для демонстрации поведения copy и deepcopy:

Пример с плоским списком с использованием copy:

>>> import copy
>>> i = [1,2,3]
>>> j = copy.copy(i)
>>> hex(id(i)), hex(id(j))
>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)
>>> j
>>> [1,2,3] #Updation of original list didn't affected copied variable

Пример вложенного списка с использованием copy:

>>> import copy
>>> i = [1,2,3,[4,5]]
>>> j = copy.copy(i)

>>> hex(id(i)), hex(id(j))
>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))
>>> ('0x10296f908', '0x10296f908') #Nested lists have same address

>>> i[3].append(6)
>>> j
>>> [1,2,3,[4,5,6]] #Updation of original nested list updated the copy as well

Пример с плоским списком с использованием deepcopy:

>>> import copy
>>> i = [1,2,3]
>>> j = copy.deepcopy(i)
>>> hex(id(i)), hex(id(j))
>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)
>>> j
>>> [1,2,3] #Updation of original list didn't affected copied variable

Пример вложенного списка используя deepcopy:

>>> import copy
>>> i = [1,2,3,[4,5]]
>>> j = copy.deepcopy(i)

>>> hex(id(i)), hex(id(j))
>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))
>>> ('0x10296f908', '0x102b9b7c8') #Nested lists have different addresses

>>> i[3].append(6)
>>> j
>>> [1,2,3,[4,5]] #Updation of original nested list didn't affected the copied variable    

0
задан Arjun 25 March 2019 в 20:06
поделиться

1 ответ

Предполагая, что все остальное в коде работает должным образом. Затем вам нужно добавить следующую строку перед методом olMail.Send. Пример:

olMail.attachments.Add Sheets("Sheet1").Range("E2").Value, olByValue, , "sampleFile"

Более подробную информацию о методе attachments.add можно найти здесь Вложения Добавить

Функция отправки почты будет выглядеть следующим образом:

[ 111]

Правка 1: Полагаю, ваш вопрос был в том, как включить несколько вложений в электронное письмо. Тогда вы можете попробовать это:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)

Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")
Dim olMail As Outlook.MailItem
Dim lastRow As Integer

Set olMail = olApp.CreateItem(olMailItem)

'Provide the Column where the attachment links are stored. I guess its E in your case
lastRow = Sheets("Sheet1").Range("E" & Rows.Count).End(xlUp).Row

olMail.To = what_address
olMail.Subject = subject_line
olMail.Body = mail_body

'Loop through the column and add the attachments to the Email
For i = 2 To lastRow
    .attachments.Add Sheets("Sheet1").Range("E" & i).Value, olByValue
Next i
olMail.Send

End Sub
0
ответ дан Arjun 25 March 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: