Код Excel VBA генерирует электронные письма, но вылетает Outlook - PullRequest
0 голосов
/ 13 июня 2018

Этот код ниже создает (он не отправляет, потому что им нужна визуальная проверка) несколько электронных писем (около 60) с двумя вложениями, одно - 209 КБ pptx (я сжал его настолько, насколько мог) - и файл .xlsb (30 КБ- 700Кб в зависимости от).Текст в HTML, потому что мы нуждаемся в выделении.Я думал, что это было бы лучше, чем вызывать шаблон из внешнего вида, но если это неправильно, дайте мне знать, я не могу найти какую-либо информацию об этом.

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

Есть идеи, как это сделать?

Sub email()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim MailMessage As String
Dim CusName As String
Dim Lastrow As Long
Dim i As Long

Application.ScreenUpdating = False

Call getemails


MailMessage = "<HTML><BODY> Hello, <br><br>" _
        & "Attached you will find your trailing 12 month (TTM) margin leak 
report which was discussed on the Best Practices call in August. (Deck from 
meeting attached as well)<br><br><br>" _
        & "<li> Tab 1 shows margin leak by item<br><br>" _
        & "<li>Tab 2 shows margin leak by vendor then by item<br><br>" _
        & "<li>Tab 3 is data tab where you can see all the data<br><br>" _
        & "Tab 1 and 2 includes a filter at the top so you can look at or 
exclude specific PCATs.<br><br>" _
        & "<b>Key definitions of fields on data tab:</b><br><br>" _
        & "<li>Base Price, Base Cost, Base Margin – Price, Cost and Margin 
dollars prior to margin leak<br><br>" _
        & "Thank you,<br><br>" _


Lastrow = Range("A" & rows.Count).End(xlUp).Row
For i = 1 To Lastrow
Set olApp = GetObject(Class:="Outlook.Application")

If olApp Is Nothing Then

Set olApp = CreateObject(Class:="outlook.application")

End If

Set olMail = olApp.CreateItem(0)

With olMail
    .To = Cells(i, 2).Value
    .Subject = Format(MonthName(Month(Now))) & " - Margin Leak - " & Cells(i, 
1).Value
    .display
    .HTMLBody = MailMessage
    .Attachments.Add ("C:\Linking_Files\Best Practices Margin Leak.pptx")
    .Attachments.Add ("C:\Desktop\June\" & Cells(i, 1).Value & ".xlsb")

End With

Set olMail = Nothing
Set olApp = Nothing

Next i
Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 13 июня 2018

Проблема с нехваткой памяти, когда она зависит от объема создаваемого вами электронного письма.Добавьте сохранение и закрытие в свой цикл, чтобы избежать нехватки памяти.

Для моей версии Excel (2010) сработало следующее, уменьшив использование памяти:

With olMail
   .To = Cells(i, 2).Value
   .Subject = Format(MonthName(Month(Now))) & " - Margin Leak - " & Cells(i, 1).Value
   .display
   .HTMLBody = MailMessage
   .Attachments.Add ("C:\Users\u\Desktop\test.xls")
   .Save
   .Close 1
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...