Как я могу отобразить MsgBox при отправке электронного письма?Excel VBA - PullRequest
1 голос
/ 26 сентября 2019

Я написал код для отправки электронной почты с outlook через excel.Но я хочу добавить MsgBox при нажатии на кнопку «Отправить» с надписью «Электронная почта отправлена ​​успешно».Но это не работает.Могу ли я получить некоторую помощь

Я попытался создать переменную "Dim IsSent As Boolean" и установить ее в False в начале, а затем установить в True при отправке.Но это не работает.Вот мой код:

Sub subMail_Sheet_Outlook_Body()
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim IsSent As Boolean

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

    Set IsSent = False
    Set rng = Nothing
    Set rng = ActiveSheet.UsedRange
    'You can also use a sheet name
    'Set rng = Sheets("YourSheet").UsedRange

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

    On Error Resume Next
    With OutMail
        .To = emailform.emailEnter.Value
        .CC = ""
        .BCC = ""
        .Subject = emailform.emailSubject.Value
        .HTMLBody = "Here" & RangetoHTML(rng)
        .Send  'or use .Display


    End With


    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True

        Set IsSent = True

        If IsSent = True Then
        MsgBox "Succes"
        Else
        MsgBox "Noooon"
        End If

    End With

    Set OutMail = Nothing
    Set OutApp = Nothing


End Sub

С этим кодом я ожидаю «Успех», если письмо отправлено, и «Не успех», если нет, но вместо этого у меня есть ошибка, которая говорит:

Ошибка компиляции: требуется объект

Ответы [ 3 ]

0 голосов
/ 26 сентября 2019

Набор для объектов.Булевы значения.Попробуйте удалить «Set» в строках с переменной IsSent.

0 голосов
/ 26 сентября 2019

Я думаю, что вы можете использовать простое On error GoTo и избежать этого случайного логического условия

Sub subMail_Sheet_Outlook_Body()

On Error GoTo IFErrorMail

    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object

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


    Set rng = Nothing
    Set rng = ActiveSheet.UsedRange
    'You can also use a sheet name
    'Set rng = Sheets("YourSheet").UsedRange

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


    With OutMail
        .To = emailform.emailEnter.Value
        .CC = ""
        .BCC = ""
        .Subject = emailform.emailSubject.Value
        .HTMLBody = "Here" & RangetoHTML(rng)
        .Send  'or use .Display


    End With


    With Application
        .EnableEvents = True
        .ScreenUpdating = True

    End With

MsgBox "Success"
If (Not (OutMail Is Nothing)) Then Set OutMail = Nothing
If (Not (OutApp Is Nothing)) Then Set OutApp = Nothing

Exit Sub

IFErrorMail:
If (Not (OutMail Is Nothing)) Then Set OutMail = Nothing
If (Not (OutApp Is Nothing)) Then Set OutApp = Nothing
MsgBox "Error Mail could not be sent"    
End Sub
0 голосов
/ 26 сентября 2019

изменить Set IsSent = False на IsSent = False, поскольку ISSent является логической переменной, а не объектом

...