1

У меня есть общая рабочая книга, в которой есть столбец, в котором используется список проверки данных. Если выбрано « YES я бы хотел, чтобы оно отправляло электронное письмо определенному отделу с просьбой просмотреть рабочую книгу.

Я получил это далеко

Sub SendMail()
    If Range("G10:G250") = "YES" Then
            With CreateObject("Outlook.Application").createitem(0)
                .To = "p***.h***@****.com"
                .Subject = "Update from Facility Manager"
                .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
                .Send
            End With
    End If
End Sub

но я продолжаю получать ошибку type mismatch .

1 ответ1

1

Когда вы спрашиваете об ошибках, важно указать, где именно происходит ошибка. Поместите точку останова в канаву панели кода в начале вашего кода и шагните по строке с помощью клавиши F8.

В вашем коде ошибка "несоответствие типов" происходит в строке

If Range("G10:G250") = "YES" Then

Диапазон, охватывающий более одной ячейки, не может иметь строковое значение. Неясно, намерено ли вы пройти через все ячейки в диапазоне и отправить одно письмо, если одна или несколько ячеек показывают "ДА". Следующий ваш модифицированный код ищет "YES" в диапазоне и, если он найден, устанавливает логическое значение и прекращает поиск. Затем, если логическое значение установлено, готовит и отправляет электронное письмо.

Private Sub SendMail()
    Dim cell As Range
    Dim y As Boolean

    'If Range("G10:G250").Value = "YES" Then
    y = False
    For Each cell In Range("G10:G250")
        If cell.Value = "YES" Then
            y = True
            Exit For
        End If
    Next

    If y Then
        With CreateObject("Outlook.Application").createitem(0)
            .To = "p***.h***@****.com"
            .Subject = "Update from Facility Manager"
            .Body = "Hi Property Services, " & vbNewLine & vbNewLine & " Please follow the link to see update on Facilty Management Tracker"
            .Send  'during debugging you can use .Display instead (to avoid filling someones mailbox)
        End With
    End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .