2014-02-06 2 views
0

Первая часть кода не будет создавать письмо с тех пор, как я добавил строку strBody и все.Создание почты с текстом в теле

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

Sub Send_Row() 
    'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm 
    'Don't forget to copy the function RangetoHTML in the module. 
    'Working in Excel 2000-2013 
     Dim OutApp As Object 
     Dim OutMail As Object 
     Dim cell As Range 
     Dim rng As Range 
     Dim Ash As Worksheet 
     Dim StrBody As String 

     Set Ash = ActiveSheet 
     On Error GoTo cleanup 
     Set OutApp = CreateObject("Outlook.Application") 

     StrBody = "Hello " & cel.Offset(, -1) & "<br>" & "<br>" & _ 
        "We regret to inform you that there was an issue with the January interface file and your elections were not" & "<br>" & _ 
        "processed correctly. In order to rectify this situation, we will issue new logs " & "<br>" & _ 
        "you will not experience a big hit to time:" & "<br>" & "<br>" & _ 
        "Please Check Proposed Adjustment Schedule below" & "<br>" & _ 
        "Please contact ." & "<br>" & "<br>" & _ 
        "Again, our sincere apologies for the mishaps with the interface file and any inconvenience this may have caused you." & "<br><br><br>" 

     With Application 
      .EnableEvents = False 
      .ScreenUpdating = False 
     End With 

     For Each cell In Ash.Columns("B").Cells.SpecialCells(xlCellTypeConstants) 
      If cell.Value Like "?*@?*.?*" _ 
       And LCase(cell.Offset(0, 1).Value) = "yes" Then 

       'Change the filter range and filter Field if needed 
       'It will filter on Column B now (mail addresses) 
       Ash.Range("A1:J200").AutoFilter Field:=2, Criteria1:=cell.Value 

       With Ash.AutoFilter.Range 
        On Error Resume Next 
        Set rng = .SpecialCells(xlCellTypeVisible) 
        On Error GoTo 0 
       End With 

       Set OutMail = OutApp.CreateItem(0) 

       On Error Resume Next 
       With OutMail 
        .To = cel.Offset(0, -1).Value 
        .Subject = "Benefits Deductions" 
        .HTMLBody = StrBody & RangetoHTML(rng) 
        .Display 'Or use .Send 
       End With 
       On Error GoTo 0 

       Set OutMail = Nothing 
       Ash.AutoFilterMode = False 
      End If 
     Next cell 

    cleanup: 
     Set OutApp = Nothing 
     With Application 
      .EnableEvents = True 
      .ScreenUpdating = True 
     End With 
    End Sub 
+0

Какая ошибка вы принимаете? – Sam

ответ

0

На первой строке StrBody = ..., можно использовать переменную с именем cel, который, кажется, не определено, что это, вероятно, что бросает свою программу прочь.

+0

cel определен выше, хотя ... – William

+0

@William _Cell_ объявлен, _Cel_ не объявлен. Даже если 'Cel'_was_ объявлен, он не был' Set' для диапазона, когда вы пытаетесь включить его в 'StrBody'. Если 'Cel' должен быть' Cell', попробуйте переместить 'StrBody =' в ваш цикл 'Для каждой ячейки'. – ARich

+0

@ARich Я видел, что во время выполнения кода шаг за шагом ... Мне все еще новобранец, извините за глупые вопросы ... Его работа сейчас, но у него был вопрос относительно информации о его вставке. – William