发送自动电子邮件时出错

发送自动电子邮件时出错

我有一个共享工作簿,其中有一列使用数据验证列表。如果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

询问错误时,指出错误发生的确切位置非常重要。在代码开头的代码窗格边缘放置一个断点,然后使用 逐行执行F8

在您的代码中,错误“类型不匹配”发生在以下行

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

跨越多个单元格的范围不能具有字符串值。不清楚您是否打算遍历该范围内的所有单元格,并在一个或多个单元格显示“YES”时发送一封邮件。以下修改后的代码会在范围内查找“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

相关内容