2015-07-24 3 views
0

Я работаю над приведенным ниже кодом в течение нескольких дней, надеюсь, что конечный продукт будет делать 2 вещи.конец, если без блока, если

Отправьте электронное письмо организатору группы с подробной информацией из таблицы. Отправляйте визитку в диспетчер стола с подробной информацией о назначении.

я получаю сообщение об ошибке, говорящее:

Compile Error:

End if without block if

Sub ACarr_Step2() 
    Dim iRet As Integer 
    Dim strPrompt As String 
    Dim strTitle As String 

    ' Promt 
    strPrompt = "Have you checked if Joe Bloggs is available?" 

    ' Dialog's Title 
    strTitle = "Availability Confirmation" 

    'Display MessageBox 
    iRet = MsgBox(strPrompt, vbYesNo, strTitle) 

    ' Check pressed button 
    If iRet = vbNo Then 
     MsgBox "Please check Availability with Joe Bloggs" 
    Else 
      Dim OutApp As Object 
    Dim OutMail As Object 

    assessor = Sheets("ACarr").Range("AB5").Text 
    clerk = Sheets("ACarr").Range("AB1").Text 
    team = Sheets("ACarr").Range("AB2").Text 
    datee = Sheets("ACarr").Range("AB3").Text 
    timeslot = Sheets("ACarr").Range("AB4").Text 

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

    On Error Resume Next 
    With OutMail 
     .To = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .Subject = "DSE Assessment Booking" 
     .Body = "Hi there," & vbNewLine & vbNewLine & "Could you please arrange for the agents below to be rota'd off to complete a Desk Assessment." & vbNewLine & vbNewLine & "Assessor: " & assessor & vbNewLine & "Staff Member : " & clerk & vbNewLine & "Team: " & team & vbNewLine & "Date: " & datee & vbNewLine & "Time Slot: " & timeslot & vbNewLine & vbNewLine & "Thank You" 

     .send 

' Create the Outlook session 
Set myoutlook = CreateObject("Outlook.Application") 
' Create the AppointmentItem 
Set myapt = myoutlook.CreateItem(olAppointmentItem)  ' Set the appointment properties 
With myapt 
    .Subject = "DSE Assessment Booking" 
    .Location = Sheets("ACarr").Range("AB2").Text 
    .Start = Sheets("ACarr").Range("AB4").Text 
    .Duration = 30 
    .Recipients = "[email protected]" 
    .MeetingStatus = olMeeting 
    ' not necessary if recipients are email addresses 
    'myapt.Recipients.ResolveAll 
    .AllDayEvent = "False" 
    .BusyStatus = "2" 
    .ReminderSet = False 
    .Body = "Hi there," & vbNewLine & vbNewLine & "Could you please arrange for the agents below to be rota'd off to complete a Desk Assessment." & vbNewLine & vbNewLine & "Assessor: " & assessor & vbNewLine & "Staff Member : " & clerk & vbNewLine & "Team: " & team & vbNewLine & "Date: " & datee & vbNewLine & "Time Slot: " & timeslot & vbNewLine & vbNewLine & "Thank You" 
     .Save 
    .send 

     Application.ScreenUpdating = False 
    Sheets("ACarr").Activate 
    Range("C14").Select 
    Selection.ClearContents 
    Range("C20").Select 
    Selection.ClearContents 
    Range("C26").Select 
    Selection.ClearContents 
    Range("C32").Select 
    Selection.ClearContents 
    Sheets("Menu").Activate 
    'enable the application to show screen switching again 
    Application.ScreenUpdating = True 

    ActiveWorkbook.Save 

    MsgBox "Your Email has been sent and changes saved." 

    End With 
    On Error GoTo 0 

    Set OutMail = Nothing 
    Set OutApp = Nothing 

    End If 

End Sub 

Насколько я могу видеть, я есть нужное количество Конца Иф на сумму Иф.

+2

'С OutMail ..' отсутствует его' Конец With' –

+0

Пожалуйста, прости меня, я не понимаю, что вы имеете в виду? –

+0

У вас есть «с OutMail», поэтому для его закрытия должен быть соответствующий «End With» - на данный момент нет. Предположительно, вам нужно это после '.send' –

ответ

1

Я просмотрел чуток кода, и обнаружил 2 вещи, которые могут повлиявших на назначение отправки:

  1. Вы сохранить его перед отправкой, который закрыть окно, и поэтому, вероятно, сделать его невозможно отправить
  2. создается второй экземпляр Outlook, а и что не является действительно необходимым и будет использовать только больше оперативной памяти для ничего (пока вы не закрыть ее)

Так вот ваш (reformated) изменен код, дайте ему попробовать:

Sub ACarr_Step2() 
    Dim iRet As Integer 
    Dim strPrompt As String 
    Dim strTitle As String 

    ' Promt 
    strPrompt = "Have you checked if Joe Bloggs is available?" 
    ' Dialog's Title 
    strTitle = "Availability Confirmation" 
    'Display MessageBox 
    iRet = MsgBox(strPrompt, vbYesNo, strTitle) 

    ' Check pressed button 
    If iRet = vbNo Then 
     MsgBox "Please check Availability with Joe Bloggs" 
    Else 
     Dim OutApp As Object 
     Dim OutMail As Object 
     Dim myApt As Object 

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

     assessor = Sheets("ACarr").Range("AB5").Text 
     clerk = Sheets("ACarr").Range("AB1").Text 
     team = Sheets("ACarr").Range("AB2").Text 
     datee = Sheets("ACarr").Range("AB3").Text 
     timeslot = Sheets("ACarr").Range("AB4").Text 

     On Error Resume Next 
     With OutMail 
      .To = "[email protected]" 
      .CC = "" 
      .BCC = "" 
      .Subject = "DSE Assessment Booking" 
      .Body = "Hi there," & vbNewLine & vbNewLine & "Could you please arrange for the agents below to be rota'd off to complete a Desk Assessment." & vbNewLine & vbNewLine & "Assessor: " & assessor & vbNewLine & "Staff Member : " & clerk & vbNewLine & "Team: " & team & vbNewLine & "Date: " & datee & vbNewLine & "Time Slot: " & timeslot & vbNewLine & vbNewLine & "Thank You" 

      .Send 
     End With 

     ' Create the Outlook session 
     'Set myoutlook = CreateObject("Outlook.Application") 
     ' Create the AppointmentItem 
     Set myApt = OutApp.CreateItem(olAppointmentItem)  ' Set the appointment properties 

     With myApt 
      .Subject = "DSE Assessment Booking" 
      .Location = Sheets("ACarr").Range("AB2").Text 
      .Start = Sheets("ACarr").Range("AB4").Text 
      .Duration = 30 
      .Recipients = "[email protected]" 
      .MeetingStatus = olMeeting 
      ' not necessary if recipients are email addresses 
      'myapt.Recipients.ResolveAll 
      .AllDayEvent = "False" 
      .BusyStatus = "2" 
      .ReminderSet = False 
      .Body = "Hi there," & vbNewLine & vbNewLine & _ 
         "Could you please arrange for the agents below to be rota'd off to complete a Desk Assessment." & vbNewLine & vbNewLine & _ 
         "Assessor: " & assessor & vbNewLine & _ 
         "Staff Member : " & clerk & vbNewLine & _ 
         "Team: " & team & vbNewLine & _ 
         "Date: " & datee & vbNewLine & _ 
         "Time Slot: " & timeslot & vbNewLine & vbNewLine & _ 
         "Thank You" 
      '.Save 
      .Send 
     End With 

     Application.ScreenUpdating = False 
     With Sheets("ACarr") 
      .Range("C14").ClearContents 
      .Range("C20").ClearContents 
      .Range("C26").ClearContents 
      .Range("C32").ClearContents 
     End With 
     Sheets("Menu").Activate 
     'enable the application to show screen switching again 
     Application.ScreenUpdating = True 
     ActiveWorkbook.Save 

     MsgBox "Your Email has been sent and changes saved." 

     On Error GoTo 0 

     Set OutMail = Nothing 
     Set OutApp = Nothing 
     Set myApt = Nothing 
    End If 
End Sub 
+0

Благодарим вас за помощь R3uK. я пробовал вышеперечисленный код и до сих пор не повезло :(он отправляет первое электронное письмо совершенно, но никакое назначение не приходит. –

+0

кажется, что я могу получить каждый индивидуальный код (один для отправки электронной почты организатору, один для отправки назначения в оценщик) для работы индивидуально. Каково ваше мнение о создании кода для отдельного отдельного отдельного кода и присвоении этого кода кнопке? Вы могли бы увидеть какие-либо проблемы при этом? –