excel 如何使用VBA仅向分配了特定值的人员发送电子邮件?

i34xakig  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在尝试更新excel工作表以向某些人发送提醒。这张excel表有一个人员名单,以及他们何时被认证使用某些设备。以前,当他们的认证即将到期或已经到期时,必须手动通知他们。我已经设置了工作表,以便它自动计算自他们获得认证以来已经过了多少天,以及在他们必须重新认证之前有多少天。我正在尝试做的是做一个脚本,它可以读取这个人在重新认证之前有多少天的专栏,如果它少于,比如说,30天,那么脚本将自动发送电子邮件。
我已经遵循了一个关于如何构建发送电子邮件的脚本的教程,但它将它们发送给所有列出的内容。我试图修改它来检查“F”列,其中“自认证以来的天数”,并只将其发送给那些小于或等于30的人,但我承认我甚至在基本编码方面都超出了我的深度。这是我的尝试,没有工作。我已经加粗了我放进去的部分,其他的都是我按照教程编写的代码,效果很好。当我试着运行这个时,它说“下一个没有For的编译错误”。不太确定我会怎么做。

Sub CreateCourseCertificates()
Dim EApp As Object
Set EApp = CreateObject("Outlook.Application")
Dim EItem As Object
Dim RList As Range
Set RList = Range("A2", Range("a2").End(xlDown))
Dim R As Range
Dim daysSinceCert As Range
Set daysSinceCert = Range("F2", Range("f2").End(xlDown))
For Each R In RList
    If daysSinceCert <= 30 Then
        Set EItem = EApp.CreateItem(0)
            With EItem
            .To = R.Offset(0, 2)
            .Subject = "Test"
            .Body = "Test"
            .Display
            End With
Next R
Set EApp = Nothing
Set EItem = Nothing
End Sub

谢谢你。

92dk7w1h

92dk7w1h1#

移除

Dim daysSinceCert As Range
Set daysSinceCert = Range("F2", Range("f2").End(xlDown))

而是使用Offset在循环时引用F列中的相应单元格:

For Each R In RList
    If R.Offset(,5).Value <= 30 Then
        Set EItem = EApp.CreateItem(0)
        With EItem
            .To = R.Offset(,2).Value
            .Subject = "Test"
            .Body = "Test"
            .Display
        End With
    End If
Next

相关问题