我在Sheet2
中有一个用宏(“新项目”)更改的列。每次运行该宏时,C列中的单元格都会更改其内容。
我希望使用“new item”宏(从C列中的单元格)添加所有字符串,并将所有字符串放在变量中。我需要将该变量(包含更改的单元格内容)发送到电子邮件中。
我想我必须使用下面的功能,但我不知道如何做我需要的。下面的代码不起作用。
Private Sub Worksheet_Change(ByVal Target As Range)
'if column C changes
If Target.Address = Sheet(2).Range("C15:C"&lastRow) Then
dim var as string
'put the contents of cells changed in the variable "var"
var=range("?").Value
End If
End Sub
答案 0 :(得分:2)
我建议采用不同的方法。原因很简单。每次更改单元格时都会触发Worksheet_Change
,这会降低代码速度。
当该宏启动时(在Sheet2
中更改 Col C 的那个),在{temp}中复制 Col C 在宏结束之前,将 Col C 再次从Sheet2
复制到临时表,然后简单地比较两列以检查更改的内容。
例如( UNTESTED )
Sheet2
答案 1 :(得分:1)
我看到的直接问题是:
重写原始回复。这包括将更改通过电子邮件发送为通知的子例程。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C15:C" & Cells(Rows.Count, 3).End(xlUp).Row)) Is Nothing Then
On Error GoTo FallThrough
Application.EnableEvents = False
Dim c As Range, cs As String
For Each c In Intersect(Target, Range("C15:C" & Cells(Rows.Count, 3).End(xlUp).Row))
cs = cs & c.Address(0, 0) & ": " & c.Value & " - " & Format(Now, "dd-mmm-yyyy hh:mm") & Chr(10)
Next c
cs = Left(cs, Len(cs) - 1)
Call mcr_Email_Notification("New Item Notification", cs)
End If
FallThrough:
Application.EnableEvents = True
End Sub
Sub mcr_Email_Notification(sSBJ As String, sBDY As String)
Dim objOL As Outlook.Application, objOLMSG As Outlook.MailItem
Set objOL = CreateObject("Outlook.Application")
Set objOLMSG = objOL.CreateItem(olMailItem)
With objOLMSG
.To = "some.recipient@null.com" 'change this
.Subject = sSBJ
.HTMLBody = "<html><body>" & Replace(sBDY, Chr(10), "<br/>") & "</body></html>"
.send
End With
Set objOLMSG = Nothing
Set objOL = Nothing
End Sub
电子邮件通知例程需要添加工具,引用,Microsoft Outlook 15.0对象库(或等效项)。我已经测试并收到了电子邮件中第14行下方C栏所做更改/添加的详细信息。
此代码属于工作表代码表,而不是模块代码表。右键单击工作表名称选项卡,然后选择查看代码。当VBE打开时,将其粘贴到标题为 Book1 - Sheet2(Code)的窗格中。