2015-12-14 3 views
4

У нас есть таблица Excel, которую мы используем для создания котировок для потенциальных клиентов. Благодаря использованию VBA он создает PDF-файлы и отправляет их клиенту с помощью Outlook. Он берет адрес электронной почты клиента из ячейки на основном листе, где пользователь заполняет детали клиента.Outlook пустое поле «Кому» из Excel VBA на некоторых компьютерах

Пару недель назад он не заполнил адрес электронной почты клиента в поле «Кому» в Outlook, хотя он был заполнен на основном листе.

Когда мы меняем что-либо в этой электронной таблице, включая код, мы сохраняем ее как новую «ревизию» (сохраняя все предыдущие версии). Возвращаясь к предыдущим версиям, теперь я обнаружил, что никто из них не работает. Это странно, как прежде. Я использую Office 2016 (хотя я недавно обновился, но эта проблема недавно). Машина, работающая с Office 2013, также не работает. Однако работает компьютер с Office 2007.

Любые идеи относительно того, почему это проблема сейчас и почему это проблема только в определенных версиях Office? Вот фрагмент кода:

Private Sub send_as_pdf_Click() 
    On Error GoTo ErrMsg 
    Dim strPath As String, strFName As String 
    Dim OutApp As Object, OutMail As Object 

    strPath = Environ$("temp") & "\" 

    strFName = Sheets("Quotation").Name & " " & Range("G18") & ".pdf" 

    Sheets("Quotation").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     strPath & strFName, Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

    strPath2 = Environ$("temp") & "\" 

    strFName2 = Sheets("Quotation Offer Letter").Name & " " & Range("G18") & ".pdf" 

    Sheets("Quotation Offer Letter").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     strPath2 & strFName2, Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

    strPath3 = Environ$("temp") & "\" 

    strFName3 = Sheets("Additional Works Required").Name & " " & Range("G18") & ".pdf" 

    Sheets("Additional Works Required").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     strPath3 & strFName3, Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

    Set OutApp = CreateObject("Outlook.Application") 
    Set OutMail = OutApp.CreateItem(0) 

    strbody = "<p style='color:#2C3E50;font-family:Calibri;font-size:11pt;'>Hi " & Range("C9") & ",</p>" 

    strbody2 = "<p style='color:#2C3E50;font-family:Calibri;font-size:11pt;'>The content of the email goes here.</p>" 

    On Error Resume Next 
    With OutMail 
     .Display 
     .To = Range("C19") 
     .CC = "" 
     .BCC = "[email protected]" & ";" & "[email protected]" & ";" & Range("I6") & ";" 
     .Subject = "Quotation" 
     .HTMLBody = strbody & strbody2 & .HTMLBody 
     .Attachments.Add strPath & strFName 
     .Attachments.Add strPath2 & strFName2 
     .Attachments.Add strPath3 & strFName3 
     .Attachments.Add ("C:\Terms and Conditions of Business of Our Business.pdf") 
     .Attachments.Add ("C:\Warranty Statement of Our Business.pdf") 
    End With 

    Kill strPath & strFName 
    On Error GoTo 0 
    Set OutMail = Nothing 
    Set OutApp = Nothing 
Exit Sub 

ErrMsg: 
MsgBox ("MUST enter Issue Number, Date & Customer Info."), , "Customer Email Error Message" 

End Sub 
+0

все остальные поля заселение в порядке? Это просто поле «Кому»? –

+0

Возможно, вам понадобится ссылка на диапазон с используемым листом, то есть '.To = Sheets (« NameOfSheet »). Диапазон (« C19 »)';) – R3uK

+0

@ScottHoltzman Да - первое имя клиента заполняется правильно в тело электронной почты и третий адрес электронной почты BCC правильно заполняются (это зависит от того, кто создает цитату.) Это поле «Кому». – adamcwhite

ответ

2

Попробуйте это:

Комментарий эта линия так что вы можете увидеть, что ошибка и отладки.

'On Error Resume Next 

После этого, что вы должны быть в состоянии увидеть ошибку в строке:

.To = Range("C19") 

enter image description here

В Excel это возвращает значение диапазона, однако вы отправляете это значение к другому приложению Outlook, который ожидает строку.

Я изменил эту линию к этому:

.To = Range("C19").Value2 

и работал

+0

Это работает на всех машинах. Я все еще не уверен, почему проблема только недавно представилась. Спасибо огромное! – adamcwhite

Смежные вопросы