我正在尝试将一段代码放在一起,但它一直返回错误...过去已经将一些非常简单的代码放在一起,但对修复代码并不精通,并且似乎无法解决我迄今为止拥有的代码中出现的问题......
背景: 我有一个用于合规性的 excel 工作簿(当然是启用宏的(,其中包含带有截止日期的各种列。如果任何列的截止日期在接下来的 30 天内,则列 V 将返回"Y"。在月初,如果任何行在 V 列中列出了"Y",则会向指定的电子邮件地址发送电子邮件警报,并在主题和正文中显示客户的名称(在 W 列中(。
从识别每个"Y"出现的单元格引用开始(作为"值"(。代码似乎无需在主题和正文中输入任何客户端名称的值即可工作。
尝试使用偏移值选项,但它不断返回错误 - 不确定如何纠正。
对于我做错了什么,任何意见都值得赞赏 - 如果在此期间我可以进一步澄清任何事情,请告诉我!
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
只有过程级范围。变量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
范围内;这是你传递的论点。
有关进一步阅读,请参阅了解范围和可见性。