Создание серии электронных писем с VBA, вызывающих ошибку времени выполнения «91» - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь создать макрос, который перебирает список адресов электронной почты в диапазоне и, если значение не равно # N / A, то создает стандартное шаблонное письмо. Поскольку список со временем будет меняться, я позволил пользователю добавить номер строки в ячейку «B1», чтобы счетчик диапазонов был динамическим.

Вышеописанное работает нормально, но по какой-то причине оно продолжает выдавать мне сообщение об ошибке «91» во время выполнения, когда я пытаюсь запустить его, который предлагает и выдает ошибку в моем цикле.

Код ниже, и я прокомментировал строку, где появляется ошибка.

Как всегда, помощь приветствуется.

Sub generateEmail()

Application.ScreenUpdating = False

Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range

Set OutApp = CreateObject("Outlook.Application")

Dim rng As Range
Dim c As Range
Dim endNum As Long

'Set the last row number in range for loop to look through
endNum = ActiveSheet.Range("B1").Value

Set rng = ActiveSheet.Range("B3:B" & endNum)

'Loop through range and if cell value equals #N/A then skip and move on to next one
For Each c In rng.Cells
    If cell.Value <> "#N/A" Then '<< ERROR HIGHLIGHTED ON THIS LINE
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = cell.Value
            .Subject = "Test Email"
            '.Body = " "
            .Display
        End With
    End If
Next c

Application.ScreenUpdating = True

End Sub

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Запись If Not IsError(c) Then вместо If c.Value <> "#N/A" Then.

0 голосов
/ 04 сентября 2018

попробуйте ниже строки вместо вашей строки ошибки

c.Value<>CVErr(xlErrNA)
0 голосов
/ 04 сентября 2018

Я разобрался в проблеме. Я использовал cell и c, чтобы сделать то же самое. Мне нужна была только одна из этих переменных, однако она отключается на части фильтра # N / A кода.

Вот мой исправленный код:

Sub generateEmail()

Application.ScreenUpdating = False

'Set variables
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Range
Dim c As Range
Dim endNum As Long

'Set Outlook App
Set OutApp = CreateObject("Outlook.Application")

'Set the last row number in range for loop to look through
endNum = ActiveSheet.Range("B1").Value
Set rng = ActiveSheet.Range("B3:B" & endNum)

'Loop through range and if cell value equals #N/A then skip and move on to next one
For Each c In rng.Cells
    If c.Value <> "#N/A" Then '<< ERROR HIGHLIGHTED ON THIS LINE
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = c.Value
            .Subject = "Test Email"
            '.Body = " "
            .Display
        End With
    End If
Next c

Application.ScreenUpdating = True

End Sub
...