[英]Automatically send an email if a specific cell value exists; include adjacent value in body
[英]Returning adjacent cell value in email subject & body
我正在尝试整理一段代码,但它一直返回错误...过去整理了一些非常简单的代码,但不太精通修复代码,似乎无法解决问题所在在我到目前为止的代码中......
背景:我有一个 excel 合规性工作簿(当然启用了宏),其中有各种列和截止日期。 如果任何列的到期日在接下来的 30 天内,则 V 列将返回“Y”。 在月初,如果任何行在 V 列中列出了“Y”,则 email 警报将发送到指定的 email 地址,并在主题和正文中包含客户名称(在 W 列中)。
从识别每个“Y”出现的单元格引用开始(作为“theValue”)。 该代码似乎可以在没有在主题和正文中输入任何客户名称值的情况下工作。
已尝试使用偏移值选项,但它一直返回错误 - 不知道如何纠正。
任何关于我做错了什么的意见表示赞赏 - 如果我能在此期间进一步澄清任何事情,请告诉我!
Sub notify()
Dim Rng As Range
For Each Rng In Range("V3:W200")
If (Rng.Value = "Y") Then
Call mymacro(Rng.Value)
End If
Next Rng
End Sub
Private Sub mymacro(theValue As String)
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi All" & vbNewLine & vbNewLine & _
"This alert has been automatically created by the Client Compliance Register. Please ensure information for " & Rng.Offset(0, 1).Value & " is up to date." & vbNewLine & vbNewLine
With xOutMail
.To = "generalmanager@gmail.com"
.CC = "accountmanager@gmail.com"
.BCC = "managingdirector@gmail.com"
.Subject = "Detail(s) for " & Rng.Offset(0, 1).Value & " are expiring soon."
.Body = xMailBody
.Display 'use .Send once complete
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
正如评论中提到的:
rng
只有过程级 scope 。 变量rng
仅对过程notify
可见。 您不能在mymacro
中使用它。
要完成您的任务,请在调用mymacro
时将rng.Offset(0, 1).Value
作为参数传递。
Call mymacro(Rng.Offset(0, 1).Value)
这里的Call
是多余的; 所有你需要的是
mymacro Rng.Offset(0, 1).Value '<< no parentheses!
或者
mymacro theValue:=Rng.Offset(0, 1).Value
然后在mymacro
中,更改每个实例
Rng.Offset(0, 1).Value
至
theValue
因为theValue
的值在mymacro
中; 这是你传递的论点。
如需进一步阅读,请参阅了解 scope 和可见性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.